Module: Decider::View
- Defined in:
- lib/decider/view.rb
Defined Under Namespace
Classes: Module
Constant Summary collapse
- StateAlreadyDefined =
Class.new(StandardError)
- StateNotDefined =
Class.new(StandardError)
Class Method Summary collapse
- .define(&block) ⇒ Object
- .dimap_on_state(fl, fr, view) ⇒ Object
- .lmap_on_event(fn, view) ⇒ Object
- .lmap_on_state(fn, view) ⇒ Object
- .many(view) ⇒ Object
- .rmap_on_state(fn, view) ⇒ Object
Class Method Details
.define(&block) ⇒ Object
122 123 124 125 |
# File 'lib/decider/view.rb', line 122 def self.define(&block) builder = Builder.new builder.build(&block) end |
.dimap_on_state(fl, fr, view) ⇒ Object
145 146 147 148 149 150 151 152 153 |
# File 'lib/decider/view.rb', line 145 def self.dimap_on_state(fl, fr, view) define do initial_state fr.call(view.initial_state) evolve proc { true } do fr.call(view.evolve(fl.call(state), event)) end end end |
.lmap_on_event(fn, view) ⇒ Object
127 128 129 130 131 132 133 134 135 |
# File 'lib/decider/view.rb', line 127 def self.lmap_on_event(fn, view) define do initial_state view.initial_state evolve proc { true } do view.evolve(state, fn.call(event)) end end end |
.lmap_on_state(fn, view) ⇒ Object
137 138 139 |
# File 'lib/decider/view.rb', line 137 def self.lmap_on_state(fn, view) dimap_on_state(fn, ->(state) { state }, view) end |
.many(view) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/decider/view.rb', line 155 def self.many(view) define do initial_state({}) evolve proc { [state, event] in [Hash, [_id, _]] } do event => [id, event] vs = state.fetch(id) { view.initial_state } vs = view.evolve(vs, event) state.merge(id => vs) end end end |
.rmap_on_state(fn, view) ⇒ Object
141 142 143 |
# File 'lib/decider/view.rb', line 141 def self.rmap_on_state(fn, view) dimap_on_state(->(state) { state }, fn, view) end |