Class: ThomasUtils::Observation
- Inherits:
-
Object
- Object
- ThomasUtils::Observation
- Extended by:
- Forwardable
- Defined in:
- lib/thomas_utils/observation.rb
Direct Known Subclasses
Instance Method Summary collapse
- #ensure(&block) ⇒ Object
- #fallback(&block) ⇒ Object
-
#initialize(executor, observable) ⇒ Observation
constructor
A new instance of Observation.
- #join ⇒ Object
- #none_fallback ⇒ Object
- #on_complete ⇒ Object
- #on_failure ⇒ Object
- #on_failure_ensure(&block) ⇒ Object
- #on_success ⇒ Object
- #on_success_ensure(&block) ⇒ Object
- #then(&block) ⇒ Object
Constructor Details
#initialize(executor, observable) ⇒ Observation
Returns a new instance of Observation.
7 8 9 10 |
# File 'lib/thomas_utils/observation.rb', line 7 def initialize(executor, observable) @executor = executor @observable = observable end |
Instance Method Details
#ensure(&block) ⇒ Object
58 59 60 |
# File 'lib/thomas_utils/observation.rb', line 58 def ensure(&block) successive(:on_complete_ensure, &block) end |
#fallback(&block) ⇒ Object
54 55 56 |
# File 'lib/thomas_utils/observation.rb', line 54 def fallback(&block) successive(:on_complete_fallback, &block) end |
#join ⇒ Object
39 40 41 42 |
# File 'lib/thomas_utils/observation.rb', line 39 def join @observable.value self end |
#none_fallback ⇒ Object
48 49 50 51 52 |
# File 'lib/thomas_utils/observation.rb', line 48 def none_fallback self.then do |result| result || yield end end |
#on_complete ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/thomas_utils/observation.rb', line 30 def on_complete @observable.add_observer do |_, value, error| @executor.post do yield value, error end end self end |
#on_failure ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/thomas_utils/observation.rb', line 21 def on_failure @observable.add_observer do |_, _, error| @executor.post do yield error if error end end self end |
#on_failure_ensure(&block) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/thomas_utils/observation.rb', line 73 def on_failure_ensure(&block) self.fallback do |error| result = block.call(error) error_observation = Observation.new(@executor, ConstantVar.error(error)) if result_is_observation?(result) result.then { error_observation } else error_observation end end end |
#on_success ⇒ Object
12 13 14 15 16 17 18 19 |
# File 'lib/thomas_utils/observation.rb', line 12 def on_success @observable.add_observer do |_, value, error| @executor.post do yield value unless error end end self end |
#on_success_ensure(&block) ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/thomas_utils/observation.rb', line 62 def on_success_ensure(&block) self.then do |result| child_result = block.call(result) if result_is_observation?(child_result) child_result.then { result } else result end end end |
#then(&block) ⇒ Object
44 45 46 |
# File 'lib/thomas_utils/observation.rb', line 44 def then(&block) successive(:on_complete_then, &block) end |