From: Zev Blut Date: 2005-03-07T23:53:30+09:00 Subject: [Job] Ruby Developers in Tokyo, Japan #!/usr/bin/env ruby # Warning this is a job announcement! # Run it/Read it if you are interested. # Lack of comments and robust input handling are intentional. class Company attr_accessor :name, :location, :web_site, :description attr_accessor :available_jobs def initialize(name = nil, location = nil, web_site = nil) self.name = name self.location = location self.web_site = web_site self.available_jobs = Array.new end def ask_for_interview?(job_applicant) available_jobs.each do |ajob| return true if ajob.meets_requirements?(job_applicant) end false end def describe puts "Company : #{name}" puts "Location : #{location}" puts "Web site : #{web_site}" puts "","Brief description :" puts description, "" end def announce_job_availability(good_match, not_so_good_match) return if available_jobs.empty? describe puts "Available jobs:" available_jobs.each_with_index do |job, idx| puts "", "#{idx + 1} ) #{job.name}", job.description, "" end job_applicant = ask_for_job_applicant_information return if job_applicant.nil? if ask_for_interview?( job_applicant ) puts good_match else puts not_so_good_match end end def ask_for_job_applicant_information job_applicant = nil puts "Would you like to apply for a job? Y/N" res = gets.chomp if res =~ /Y/i msg = "Great! Please follow the prompts to input your profile" msg<< " to see if there if a job matches." puts msg, "" job_applicant = JobApplicant.new_from_interactive_shell else puts "Well thanks for reading/running the program! Good Bye!" end job_applicant end end class Job attr_accessor :name, :description, :requirements, :threshold def initialize(name = nil, description = nil, threshold = 100, requirements = [] ) self.name = name self.description = description self.requirements = requirements self.threshold = threshold end def meets_requirements?(job_applicant) points = 0 requirements.each do |req| points += req.check_requirement(job_applicant) end points >= threshold end end class JobApplicant attr_accessor :name, :resume, :location attr_accessor :spoken_languages, :computer_languages_skills def initialize self.spoken_languages = Array.new self.computer_languages_skills = Array.new end def JobApplicant.new_from_interactive_shell applicant = JobApplicant.new puts "What is your name?" applicant.name = gets.chomp puts "Where do you live? (City, Country)" applicant.location = gets.chomp note = " [One entry per line. Press CTRL-D to stop input] " puts "What languages do you speak?", note applicant.spoken_languages = readlines.map { |d| d.chomp } cq1 = "What computer languages are you proficient in?" cq2 = "And what other computer skills do you have?" puts cq1, cq2, note applicant.computer_languages_skills = readlines.map {|d| d.chomp } puts "" applicant end end class Requirement def initialize(points = 1, &proc) @points = points if proc @requirement_calc = proc else @requirement_calc = Proc.new { |x| true } end end def check_requirement(job_applicant) points = 0 if @requirement_calc.call(job_applicant) points = @points end points end end ubit = Company.new("Ubit", "Tokyo, Japan", "http://ubit.com") ubit.description =< 0 end reqs<< Requirement.new(50) do |ja| ja.computer_languages_skills.include?("Ruby") end reqs<< Requirement.new(25) do |ja| ja.computer_languages_skills.include?("Databases") end reqs<< Requirement.new(10) do |ja| ja.computer_languages_skills.include?("Mobile Technologies") end reqs<< Requirement.new(5) do |ja| ja.computer_languages_skills.include?("*NIX") end reqs<< Requirement.new(5) do |ja| (ja.computer_languages_skills - ["Ruby", "Database"]).size > 0 end reqs<< Requirement.new(25) do |ja| ja.location =~ /Japan/i end developer.requirements = reqs developer.threshold = 125 ubit.available_jobs<< developer good_match =<