Class: Decider::View::Module
- Inherits:
-
Module
- Object
- Module
- Decider::View::Module
- Defined in:
- lib/decider/view.rb
Defined Under Namespace
Classes: Evolve
Constant Summary collapse
- EVOLVE_FALLBACK =
proc { [nil, proc { state }] }
Instance Method Summary collapse
-
#initialize(initial_state:, evolutions:) ⇒ Module
constructor
A new instance of Module.
Constructor Details
#initialize(initial_state:, evolutions:) ⇒ Module
Returns a new instance of Module.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/decider/view.rb', line 16 def initialize(initial_state:, evolutions:) case initial_state in Proc define_method(:initial_state) do initial_state.call end else define_method(:initial_state) do initial_state end end define_method(:evolve) do |*args| if args.empty? ->(state, event) { evolve(state, event) } else context = Evolve.build(*args) evolutions.find(EVOLVE_FALLBACK) do |args, _| case args in [Proc => fn] context.instance_exec(&fn) in [etype] context_event = context.event context_event in ^etype in [stype, etype] context_state = context.state context_event = context.event [context_state, context_event] in [^stype, ^etype] else false end end => [_, handler] context.instance_exec(&handler) end end define_method(:lmap_on_event) do |fn| Decider::View.lmap_on_event(fn, self) end define_method(:lmap_on_state) do |fn| Decider::View.lmap_on_state(fn, self) end define_method(:rmap_on_state) do |fn| Decider::View.rmap_on_state(fn, self) end define_method(:dimap_on_state) do |fl:, fr:| Decider::View.dimap_on_state(fl, fr, self) end define_method(:many) do Decider::View.many(self) end end |