Guest User

Untitled

a guest
Jul 17th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. class BasicEntity
  2. # Advanced metaprogramming code for nice, clean properties
  3. def self.properties( *arr )
  4. # 1. Set up accessors for each variable
  5. arr.each do |name|
  6. name = name.to_s
  7. unless is_a_question? name
  8. attr_accessor name
  9. else
  10. define_method(name) do
  11. instance_variable_get("@#{name.chop}")
  12. end
  13.  
  14. define_method(name.chop + "=") do
  15. instance_variable_set("@#{name.chop}")
  16. end
  17. end
  18. end
  19.  
  20. # 2. For each property, the `initialize' method
  21. # should set its value.
  22. class_eval do
  23. define_method( :initialize ) do |*args|
  24. arr.each_with_index do |name, i|
  25. value = args[i]
  26. value = value.to_i unless (value =~ /^\d+$/).nil?
  27. name = name.to_s
  28. if is_a_question? name
  29. name.chop! and value = value == 1
  30. end
  31. instance_variable_set("@#{name}", value)
  32. end
  33. end
  34. end
  35. end
  36. end
Add Comment
Please, Sign In to add comment