On Tue, 8 Mar 2005 02:01:39 +0900, Tim Ferrell <Tim.Ferrell / s0nspark.com> wrote: > Now that is just too cool :-) > > Cheers, > Tim > > Zev Blut wrote: > > #!/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 =<<EOF > > Ubit is a Japanese company focusing on mobile phone services and > > content aggregation both in Japan and abroad. > > EOF > > > > developer = Job.new("Software Developer") > > developer.description =<<EOF > > Become knowledgeable in the inner workings of our > > product platform and work as a team with other developers to implement > > new features and improve our current capabilities. Ideally, you are > > willing to work under dynamic conditions and communicate well with > > others. > > EOF > > > > > > loose_find = lambda do |data, reg_match| > > data.find { |v| v =~ match } > > end > > > > reqs = Array.new > > reqs<< Requirement.new(25) do |ja| > > ja.spoken_languages.include?("English") > > end > > > > reqs<< Requirement.new(25) do |ja| > > ja.spoken_languages.include?("Japanese") > > end > > > > reqs<< Requirement.new(5) do |ja| > > sub = ["English", "Japanese"] > > (ja.spoken_languages - sub).size > 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 =<<EOF > > Your profile looks promising! > > If you are interested in working with us, > > please send your resume to Zev Blut at rubyzbibd / ubit.com > > EOF > > > > nsgm =<<EOF > > Sorry, at the moment we are in need of people who meet our specific > > needs. But if you feel that you can meet them then go ahead and send > > your resume to Zev Blut at rubyzbibd / ubit.com > > EOF > > > > ubit.announce_job_availability(good_match,nsgm) > > > > That's what I was thinking. -- Thomas G. Willis http://paperbackmusic.net