Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.14 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. class Entry
  4.   @@queue = []
  5.   def self.include_serach
  6.     (class_variables - @@queue).each do |attribute|
  7.       method_name  = attribute.to_s[2..-1]
  8.       define_singleton_method("find_by_#{method_name}") do |key|
  9.         @@queue.select { |e| e.instance_variable_get(attribute.to_s[1..-1]) == key }
  10.       end
  11.       define_singleton_method("find_first_by_#{method_name}") do |key|
  12.         @@queue.find { |e| e.instance_variable_get(attribute.to_s[1..-1]) == key }
  13.       end
  14.     end
  15.   end
  16. end
  17.  
  18. class Person < Entry
  19.   @@name = 0
  20.   @@surname = 0
  21.   @@age = 0
  22.   @@sex = 0
  23.   include_serach
  24.  
  25.   def initialize(name, surname, age, sex)
  26.     @name = name
  27.     @surname = surname
  28.     @age = age
  29.     @sex = sex
  30.     @@queue.unshift(self)
  31.   end
  32. end
  33.  
  34. NAMES = %w[Jordan James Liza Hans Vano Sasha].freeze
  35. SURNAMES = %w[Pitt Last LaBrie Sharshepkin Barret].freeze
  36. SEX = %w[M F].freeze
  37.  
  38. 100.times do |name, surname, sex|
  39.   name = NAMES[rand(NAMES.length)]
  40.   surname = SURNAMES[rand(SURNAMES.length)]
  41.   sex = SEX[rand(SEX.length)]
  42.   Person.new(name, surname, rand(100), sex)
  43. end
  44.  
  45. p Person.find_first_by_surname('Sharshepkin')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement