Advertisement
Guest User

Untitled

a guest
Sep 27th, 2013
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. class Creature
  2. def self.metaclass
  3. class << self; self; end
  4. end
  5.  
  6. def self.traits(*arr)
  7. return @traits if arr.empty?
  8. attr_accessor(*arr)
  9.  
  10. arr.each do |a|
  11. metaclass.instance_eval {
  12. define_method(a) do |val|
  13. return @traits[a] if val.nil?
  14. @traits ||= {}
  15. @traits[a] = val
  16. end
  17. }
  18. end
  19.  
  20. class_eval do
  21. define_method( :initialize ) do
  22. self.class.traits.each do |k,v|
  23. instance_variable_set("@#{k}", v)
  24. end
  25. end
  26. end
  27. end
  28.  
  29.  
  30. traits :life, :strength, :charisma, :weapon
  31. end
  32.  
  33.  
  34. class Dragon < Creature
  35. life 100
  36. strength 200
  37. charisma 1
  38. weapon 1000
  39. end
  40. Dragon.life
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement