Skip to content

Instantly share code, notes, and snippets.

@Leejojo
Created June 26, 2016 17:56
Show Gist options
  • Select an option

  • Save Leejojo/7c3bd8a0a79594e1b2b7100502b0c594 to your computer and use it in GitHub Desktop.

Select an option

Save Leejojo/7c3bd8a0a79594e1b2b7100502b0c594 to your computer and use it in GitHub Desktop.
Candidates
require 'active_support/all'
require 'pp'
@candidates = [
{
id: 5,
years_of_experience: 4,
github_points: 293,
languages: ['C', 'Ruby', 'Python', 'Clojure'],
date_applied: 5.days.ago.to_date,
age: 26
},
{
id: 7,
years_of_experience: 1,
github_points: 145,
languages: ['JavaScript', 'Ruby', 'Go', 'Erlang'],
date_applied: 15.days.ago.to_date,
age: 19
},
{
id: 9,
years_of_experience: 6,
github_points: 435,
languages: ['JavaScript', 'SQL', 'C#'],
date_applied: 1.day.ago.to_date,
age: 32
},
{
id: 10,
years_of_experience: 3,
github_points: 232,
languages: ['Java', 'Ruby', 'JavaScript'],
date_applied: 12.days.ago.to_date,
age: 31
},
{
id: 11,
years_of_experience: 12,
github_points: 32,
languages: ['VB', 'Cobol', 'Fortran'],
date_applied: 2.days.ago.to_date,
age: 42
},
{
id: 13,
years_of_experience: 2,
github_points: 328,
languages: ['Python', 'Ruby', 'JavaScript'],
date_applied: 4.days.ago.to_date,
age: 25
},
{
id: 15,
years_of_experience: 1,
github_points: 400,
languages: ['JavaScript', 'Ruby'],
date_applied: 3.days.ago.to_date,
age: 16
},
]
# In this file we define the methods to help filter out candidates
# This way, we keep these methods separated from other potential parts of the program
def find(id)
array = []
@candidates.each do |x|
if x[:id] == id
array.push(x)
end
end
return array.length > 0 ? array : nil
end
pp find(15)
###################
def experienced?(candidate)
candidate[:years_of_experience] >= 2
end
########################
def over_requisite_github_points?(candidate)
candidate[:github_points] >= 100
end
######################
def ruby_or_python(candidate)
(candidate[:languages].include?("Ruby") || candidate[:languages].include?("Python"))
end
####################
def applied(candidate)
candidate[:date_applied] >= 5.days.ago.to_date
end
#######################
def age(candidate)
candidate[:age] >= 18
end
################################
def qualified_candidates(candidates)
candidates.select do |candidate|
experienced?(candidate) &&
over_requisite_github_points?(candidate) &&
(candidate[:languages].include?("Ruby") || candidate[:languages].include?("Python")) &&
candidate[:date_applied] >= 5.days.ago.to_date &&
candidate[:age] >= 18
end
end
################################
def ordered_by_qualifications(candidates)
candidates.sort do |a,b|
years = b[:years_of_experience] <=> a[:years_of_experience]
if years == 0
b[:github_points] <=> a[:github_points]
else
years
end
end
end
# This is the main entrypoint into the program
# It requires the other files/gems that it needs
require 'pp'
require 'pry'
require './candidates'
require './filters'
## Your test code can go here
# binding.pry
def find_one_candidate(candidates)
puts "Please type candidates ID number:"
id = gets.chomp.to_i
array = []
candidates.each do |x|
if x[:id] == id
array.push(x)
end
end
return array.length > 0 ? array : "ID does not exist."
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment