Guest User

Untitled

a guest
May 25th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. module Foo
  2. def create_methods(*args)
  3. args.each do |fieldname|
  4. fieldname = fieldname.to_s
  5.  
  6. define_method fieldname + '_field' do
  7. @fields ||= {}
  8. begin
  9. raise 'foo'
  10. rescue
  11. puts "#{fieldname}_field (#{$!.backtrace[0]})"
  12. end
  13. @fields[fieldname]
  14. end
  15.  
  16. define_method fieldname + '_field=' do |value|
  17. puts "#{fieldname}_field = #{value.inspect}"
  18. @fields ||= {}
  19. @fields[fieldname] = value
  20. end
  21.  
  22. define_method 'writeback' do
  23. @fields.keys.each do |fieldname|
  24. puts "#{fieldname} = #{@fields[fieldname].inspect}"
  25. end
  26. end
  27. end
  28. end
  29. end
  30.  
  31. class BaseClass
  32. end
  33.  
  34. BaseClass.class_eval do
  35. extend Foo
  36. end
  37.  
  38. class FooClass < BaseClass
  39. create_methods :bar, :baz
  40. end
  41.  
  42. b = FooClass.new
  43. b.bar_field
  44. b.baz_field
  45. b.bar_field = 'barr'
  46. b.baz_field = 'bazz'
  47. b.writeback
  48. b.bar_field
  49.  
  50. # The error manifests itself here: variable fieldname has the value 'bar'
  51. # where it should be 'baz'
  52. b.baz_field
Add Comment
Please, Sign In to add comment