Guest User

Untitled

a guest
May 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.70 KB | None | 0 0
  1. class Options
  2. def initialize(*opts)
  3. @opts = opts
  4. vals = {}
  5. class <<self; self end.class_eval do
  6. opts.each do |opt|
  7. define_method(opt) do |*args|
  8. if args.size == 0
  9. vals[opt]
  10. else
  11. vals[opt] = *args
  12. end
  13. end
  14. end
  15. end
  16. @vals = vals
  17. end
  18.  
  19. def run(&blk)
  20. instance_eval &blk
  21. self
  22. end
  23.  
  24. def to_a
  25. @vals.values_at(*@opts)
  26. end
  27. end
  28.  
  29. class YourClass
  30. def initialize
  31. @price = {}
  32. end
  33.  
  34. def set_price(&blk)
  35. @price[:apples], @price[:oranges] = *Options.new(:apples,:oranges).run(&blk)
  36. self
  37. end
  38. end
  39.  
  40. YourClass.new.set_price do
  41. apples 5
  42. oranges 2
  43. end
Add Comment
Please, Sign In to add comment