Skip to content

Instantly share code, notes, and snippets.

@martinlaws
Last active October 23, 2015 02:20
Show Gist options
  • Save martinlaws/8e2905ac41a12a3f6190 to your computer and use it in GitHub Desktop.
Save martinlaws/8e2905ac41a12a3f6190 to your computer and use it in GitHub Desktop.
Searches and sorts job candidates based on age, years of experience, github points, programming languages, the date applied and the candidate's age
require 'active_support/all'
@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
},
]
def find(id)
candidate = nil
@candidates.each do |candidate|
if candidate[:id] == id
return candidate
else
return "So sorry, there is no candidate with that ID."
end
end
candidate
end
def experienced?(cand)
if @candidates[cand][:years_of_experience] >= 2
return true
else
return false
end
end
def qualified_candidates(range = @candidates)
qualified = []
@candidates.each do |candidate|
if (candidate[:years_of_experience] >= 2) &&
(candidate[:github_points] >= 100) &&
!(['Ruby', 'Python'] & (candidate[:languages])).empty? &&
(candidate[:date_applied] >= 15.days.ago.to_date) &&
(candidate[:age] > 17)
qualified << candidate
end
end
qualified
end
def ordered_by_qualifications(range = @candidates)
@candidates.sort_by {|candidate| [candidate[:years_of_experience], candidate[:github_points]]}.reverse
end
require 'pry'
require './candidates'
require './filters'
loop do
puts "---------------------------------------------------------"
puts "Welcome to your search for the best dev talent out there!"
puts "What would you like to do?"
puts "You can:"
puts "- /find/ by id number,"
puts "- list /all/ candidates, "
puts "- list /qualified/ candidates or "
puts "- /quit/."
puts "---------------------------------------------------------"
puts "So, what's your choice?"
choice = gets.chomp!
case choice
when /find\s(\d+)/
pp find($1.to_i)
when 'all'
pp ordered_by_qualifications
when 'qualified'
pp qualified_candidates
when 'quit'
break
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment