Class: ThomasUtils::Observation

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/thomas_utils/observation.rb

Direct Known Subclasses

Future

Instance Method Summary collapse

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

#joinObject



39
40
41
42
# File 'lib/thomas_utils/observation.rb', line 39

def join
  @observable.value
  self
end

#none_fallbackObject



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_completeObject



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_failureObject



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_successObject



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