Skip to content

Instantly share code, notes, and snippets.

@dsomel21
Created June 4, 2016 18:56
Show Gist options
  • Save dsomel21/137ed89fee4e806d2debf90af8ad7056 to your computer and use it in GitHub Desktop.
Save dsomel21/137ed89fee4e806d2debf90af8ad7056 to your computer and use it in GitHub Desktop.
Simple application that filters our candidates based on experience, languages, points, etc. Create your own CSV to get started!
# An important extention for Ruby... we need it for the date to manipulate data
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)
@candidates.detect {|candidate| candidate[:id] == id}
end
def experienced?(candidate)
candidate[:years_of_experience] >= 2
end
def github_points?(candidate)
candidate[:github_points] >= 100
end
def programming_languages?(candidate)
# candidate[:languages].include?("Ruby" || "Python")
candidate[:languages].any?{|lang| ["Ruby","Python"].include? lang}
end
# Since a past date is smaller than future... we must use < operator
def applied_recently?(candidate)
candidate[:date_applied] < 15.days.ago.to_date
end
def adult?(candidate)
candidate[:age] > 18
end
# What select does.. is that if these are true... it will put that in a new set of an array
def qualified_candidates(candidates)
#YOU CAN USE JUST @candidates.select since @ has wider scope AND HAVE NO PARAMATER
candidates.select do |i|
experienced?(i) &&
github_points?(i) &&
programming_languages?(i) &&
adult?(i)
end
end
# This is the main entrypoint into the program
# It requires the other files/gems that it needs
require 'pry'
require './candidates'
require './filters'
require 'pp'
pp qualified_candidates(@candidates)
# Below you can throw in some binding.prys to test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment