Guest User

Untitled

a guest
Jan 23rd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. class Handler
  2. attr_accessor :entity
  3. def initialize(entity)
  4. @entity = entity
  5. end
  6. def self.my_attr(name_symbol,&write_block)
  7. name_string = name_symbol.to_s
  8. write_symbol = (name_string + "=").to_sym
  9. if block_given? then
  10. write_proc = Proc.new{|value|
  11. new_value = write_block.call(value)
  12. @entity.write(new_value)
  13.  
  14. #the instance_variable_set method creates a class instance variable
  15. #I want to create a proper instance variable here
  16. instance_variable_set(("@" + name_string).to_sym,new_value)}
  17. else
  18. write_proc = Proc.new{@entity.write(name_string,value)
  19.  
  20. #ditto here
  21. instance_variable_set(("@" + name_string).to_sym,new_value)}
  22. end
  23. read_proc = Proc.new{@entity.read(name_string)}
  24.  
  25. define_method(name_symbol,read_proc)
  26. define_method(write_symbol,write_proc)
  27. end
  28. end
  29.  
  30. class MyHandler < Handler
  31. my_attr(:off_center){|new_off_center|
  32. if new_off_center != @off_center then
  33.  
  34. #I want off_center to be an instance variable, not a class instance variable
  35. #but the behaviour here isn't working out that way
  36. @off_center = new_off_center + 180
  37. else
  38. @off_center = new_off_center - 90
  39. end
  40. }
  41. end
Add Comment
Please, Sign In to add comment