Guest User

Untitled

a guest
Nov 20th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.88 KB | None | 0 0
  1. class Type
  2. attr_accessor :bs, :if_eval, :name
  3. def initialize(name, if_eval, &block)
  4. self.bs = []
  5. self.if_eval = method(if_eval)
  6. self.name = name
  7.  
  8. instance_eval &block
  9. end
  10.  
  11. def b &block
  12. bs << B.new(block)
  13. end
  14.  
  15. def execute
  16. bs.each do |b|
  17. b.block.call
  18. end
  19. end
  20. end
  21.  
  22. class B
  23. attr_accessor :block
  24. def initialize(block)
  25. self.block = block
  26. end
  27.  
  28. def execute
  29. self.block.call
  30. end
  31. end
  32.  
  33. @types = []
  34. def to(name, opts={}, &block)
  35. @types << Type.new(name, opts[:if], &block)
  36. end
  37.  
  38. def is_a?(id)
  39. id == 'a'
  40. end
  41.  
  42. def is_c?(id)
  43. id == 'c'
  44. end
  45.  
  46. to 'a', if: :is_a? do
  47. b do
  48. puts 'A1'
  49. end
  50. b do
  51. puts 'A2'
  52. end
  53. end
  54.  
  55. to 'c', if: :is_c? do
  56. b do
  57. puts 'C1'
  58. end
  59. b do
  60. puts 'C2'
  61. end
  62. end
  63.  
  64. ['a', 'c', 'c'].each do |id|
  65. @types.each do |type|
  66. type.execute if type.if_eval.call(id)
  67. end
  68. end
  69.  
  70. # Output:
  71. # A1
  72. # A2
  73. # C1
  74. # C2
  75. # C1
  76. # C2
Add Comment
Please, Sign In to add comment