Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- class Entry
- @@queue = []
- def self.include_serach
- (class_variables - @@queue).each do |attribute|
- method_name = attribute.to_s[2..-1]
- define_singleton_method("find_by_#{method_name}") do |key|
- @@queue.select { |e| e.instance_variable_get(attribute.to_s[1..-1]) == key }
- end
- define_singleton_method("find_first_by_#{method_name}") do |key|
- @@queue.find { |e| e.instance_variable_get(attribute.to_s[1..-1]) == key }
- end
- end
- end
- end
- class Person < Entry
- @@name = 0
- @@surname = 0
- @@age = 0
- @@sex = 0
- include_serach
- def initialize(name, surname, age, sex)
- @name = name
- @surname = surname
- @age = age
- @sex = sex
- @@queue.unshift(self)
- end
- end
- NAMES = %w[Jordan James Liza Hans Vano Sasha].freeze
- SURNAMES = %w[Pitt Last LaBrie Sharshepkin Barret].freeze
- SEX = %w[M F].freeze
- 100.times do |name, surname, sex|
- name = NAMES[rand(NAMES.length)]
- surname = SURNAMES[rand(SURNAMES.length)]
- sex = SEX[rand(SEX.length)]
- Person.new(name, surname, rand(100), sex)
- end
- p Person.find_first_by_surname('Sharshepkin')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement