Skip to content

Instantly share code, notes, and snippets.

@Andsbf
Created March 9, 2015 03:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Andsbf/4b054b783fb8b706447e to your computer and use it in GitHub Desktop.
Save Andsbf/4b054b783fb8b706447e to your computer and use it in GitHub Desktop.
Candidates Exercise
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
},
]
# 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)
id_find = @candidates.select { |candidade_array| candidade_array[:id] == id }
id_find == [] ? nil : id_find
end
def experienced?(candidate_xp)
candidate_xp[:years_of_experience] > 2
end
def qualified_candidates
@candidates.select do |candidate_search|
candidate_search[:years_of_experience] >= 2 && \
candidate_search[:github_points] >= 100 && \
( candidate_search[:languages].include? ('Ruby' || 'Python') ) && \
candidate_search[:date_applied] >= 15.day.ago.to_date && \
candidate_search[:age] >= 18
end
end
def ordered_by_qualifications
ordered_candidates = @candidates.sort_by { |can| [can[:years_of_experience] , can[:github_points]] }.reverse
end
# More methods will go below
# This is the main entrypoint into the program
# It requires the other files/gems that it needs
require 'pry'
require_relative './candidates'
require_relative './filters'
require 'colorize'
## Your test code can go here
# binding.pry
# puts "Qualified_candidates".red
# pp qualified_candidates
# puts "ordered_by_qualifications".red
# pp ordered_by_qualifications
while true
puts "Options: \n find 'id' \n qualified_candidates \n ordered_by_qualifications \n all"
user_input = gets.chomp
pp find(user_input.match(/\d+/)[0].to_i) if user_input =~ /find\s\d/
case user_input
when "all"
pp @candidates
when 'quit'
break
when 'qualified'
pp qualified_candidates
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment