waterfall 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4fa811a59c1b353ab25f5c56d47c494aab50972
4
- data.tar.gz: 07657eeaebc676339be72d29373afecff23527f1
3
+ metadata.gz: 078be4fc0c809c19b4dc69414117ed5ab2962cec
4
+ data.tar.gz: a1dbebd4c474ea3cca0f3d2ac62ca2883d2cbc73
5
5
  SHA512:
6
- metadata.gz: 512a8896bbd591e770c78be0d3c8fd3628f824c664020b2d1b430b0a2c718e34dc8cca6661f1387d283368eef54b4e439698bad1d0ca950e3c991aa2c9a25257
7
- data.tar.gz: ce7e7632e200548d05a87419aa03b8f318c3284f40052b2b792fa1c8afba5246860b67151a1dda8db66e8006c5e26510edad3925833e0ab17499f927140e1447
6
+ metadata.gz: 4cb114ad14c238c888ee842cc29020a56ce9d554848ba83a60b90bf2faa17a4888d6ff32ad6c2d066379d4107909d252cafa0f55b0741feb3b29b0e233707885
7
+ data.tar.gz: e21b53012acfcf0555c874c26f8fd3bd490f33e9ff74be1afccb9043625038ed08c6b00bc1daa7502f1a0ddd514f51e461952fa68eeabe3c1d9d10f6b36418c8
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- waterfall (1.2.1)
4
+ waterfall (1.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -53,7 +53,7 @@ Flow.new
53
53
  .chain(user1: :user) { FetchUser.new(1) }
54
54
  .chain(user2: :user) { FetchUser.new(2) }
55
55
  .chain {|outflow| puts(outflow.user1, outflow.user2) } # report success
56
- .on_dam {|error| puts(error) } # report error
56
+ .on_dam {|error, context| puts(error, context) } # report error
57
57
  ```
58
58
 
59
59
  Which works like:
@@ -1,3 +1,8 @@
1
+ ===1.3.0
2
+ - Introduced `error_pool_context`, providing with the stacktrace leading to the dam
3
+ - changed `on_dam` signature to pass context to the block
4
+ - add `Waterfall.caller_locations_length` to limit the number of lines of the stacktrace (default is nil: unlimited)
5
+
1
6
  ===1.2.1
2
7
  - Introduced `Waterfall.with_reversible_flow`, makes `reverse_flow` optionnal, may save memory
3
8
  - outflow is now lazy loaded
@@ -6,17 +6,21 @@ require 'waterfall/predicates/when_falsy'
6
6
  require 'waterfall/predicates/when_truthy'
7
7
  require 'waterfall/predicates/chain'
8
8
 
9
+ WATERFALL_PATH = "lib/waterfall"
10
+
9
11
  module Waterfall
10
12
 
11
- attr_reader :error_pool
13
+ attr_reader :error_pool, :error_pool_context
12
14
 
13
15
  class IncorrectDamArgumentError < StandardError; end
14
16
  class IncorrectChainingArgumentError < StandardError; end
15
17
 
16
18
  class << self
17
19
  attr_accessor :with_reversible_flow
20
+ attr_accessor :caller_locations_length
18
21
  end
19
22
  @with_reversible_flow = true
23
+ @caller_locations_length = nil
20
24
 
21
25
  def outflow
22
26
  @outflow ||= OpenStruct.new({})
@@ -49,16 +53,17 @@ module Waterfall
49
53
  self
50
54
  end
51
55
 
52
- def dam(obj)
56
+ def dam(obj, context = nil)
53
57
  raise IncorrectDamArgumentError.new("You cant dam with a falsy object") unless obj
54
58
  _wf_run do
55
59
  @error_pool = obj
60
+ @error_pool_context = context || _error_pool_context
56
61
  _reverse_flows(true)
57
62
  end
58
63
  end
59
64
 
60
65
  def halt_chain(&block)
61
- yield(outflow, error_pool)
66
+ yield(outflow, error_pool, error_pool_context)
62
67
  end
63
68
 
64
69
  def dammed?
@@ -104,6 +109,12 @@ module Waterfall
104
109
  yield unless dammed?
105
110
  self
106
111
  end
112
+
113
+ def _error_pool_context
114
+ caller_locations(1, Waterfall.caller_locations_length).reject do |line|
115
+ line.to_s.include?(WATERFALL_PATH)
116
+ end
117
+ end
107
118
  end
108
119
 
109
120
  class Wf
@@ -27,7 +27,7 @@ module Waterfall
27
27
  @root.send :_add_executed_flow, child_waterfall
28
28
 
29
29
  if child_waterfall.dammed?
30
- @root.dam child_waterfall.error_pool
30
+ @root.dam child_waterfall.error_pool, child_waterfall.error_pool_context
31
31
  end
32
32
 
33
33
  self
@@ -7,7 +7,7 @@ module Waterfall
7
7
 
8
8
  def call
9
9
  return unless @root.dammed?
10
- yield @root.error_pool, @root.outflow, @root
10
+ yield @root.error_pool, @root.error_pool_context, @root.outflow, @root
11
11
  end
12
12
  end
13
13
  end
@@ -1,3 +1,3 @@
1
1
  module Waterfall
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -42,12 +42,14 @@ describe Flow do
42
42
  it 'isnt dammed by default' do
43
43
  expect(wf.dammed?).to be false
44
44
  expect(wf.error_pool).to eq nil
45
+ expect(wf.error_pool_context).to be nil
45
46
  end
46
47
 
47
48
  it 'is dammed if you dam it!' do
48
49
  wf.dam('error')
49
50
  expect(wf.dammed?).to be true
50
51
  expect(wf.error_pool).to eq 'error'
52
+ expect(wf.error_pool_context).to be_an Array
51
53
  end
52
54
 
53
55
  it 'dam raises if falsy argument sent' do
@@ -66,6 +68,15 @@ describe Flow do
66
68
  expect(wf.error_pool).to eq 'error'
67
69
  end
68
70
 
71
+ it 'error pool and context values propagate to root flow' do
72
+ sub_flow = Flow.new
73
+ sub_flow.chain { sub_flow.dam('errr') }
74
+ wf.chain { sub_flow }
75
+
76
+ expect(wf).to be_dammed
77
+ expect(wf.error_pool_context).to eq sub_flow.error_pool_context
78
+ end
79
+
69
80
  it 'doesnt execute chain blocks once dammed' do
70
81
  expect do
71
82
  wf.when_falsy { false }.dam { 'error' }.chain { raise 'I should not be executed because of damming before me' }
@@ -85,9 +96,10 @@ describe Flow do
85
96
  expect(listener).to have_received :failure
86
97
  end
87
98
 
88
- it 'on_dam blocks yield error pool, outflow and waterfall' do
89
- wf.dam('errr').on_dam do |error_pool, outflow, waterfall|
99
+ it 'on_dam blocks yield error pool, error context, outflow and waterfall' do
100
+ wf.dam('errr').on_dam do |error_pool, error_pool_context, outflow, waterfall|
90
101
  expect(error_pool).to eq wf.error_pool
102
+ expect(error_pool_context).to eq wf.error_pool_context
91
103
  expect(outflow).to eq wf.outflow
92
104
  expect(waterfall).to eq wf
93
105
  end
@@ -106,9 +118,10 @@ describe Flow do
106
118
  end
107
119
 
108
120
  it "yields expected values even if dammed" do
109
- wf.chain(:foo) { 1 }.dam("errr").halt_chain do |outflow, error_pool|
121
+ wf.chain(:foo) { 1 }.dam("errr").halt_chain do |outflow, error_pool, error_pool_context|
110
122
  expect(outflow).to eq wf.outflow
111
123
  expect(error_pool).to eq wf.error_pool
124
+ expect(error_pool_context).to eq wf.error_pool_context
112
125
  end
113
126
  end
114
127
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waterfall
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Roth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-16 00:00:00.000000000 Z
11
+ date: 2019-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler