koan_05_2.rb 630 B

12345678910111213141516171819202122232425262728293031323334
  1. module MetaKoans
  2. module Attributable
  3. def attribute(params='a')
  4. name = nil
  5. default_value = nil
  6. if params.is_a?(Hash)
  7. name = params.keys[0]
  8. default_value = params[name]
  9. else
  10. name = params
  11. end
  12. var_name = "@#{name}"
  13. define_method name do
  14. instance_variable_get(var_name) || default_value
  15. end
  16. define_method name + "?" do
  17. !send(name).nil?
  18. end
  19. define_method name + "=" do |value|
  20. instance_variable_set var_name, value
  21. default_value = nil
  22. end
  23. end
  24. end
  25. class SomeClass
  26. extend Attributable
  27. class << self
  28. extend Attributable
  29. end
  30. end
  31. end