coach 0.2.1 → 0.2.2

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: 3258a468d749d86884a028d51d035966dfa925a2
4
- data.tar.gz: c04518e139d26372ee97a8450967d4aa32756989
3
+ metadata.gz: f98b2d520ff9d3365bc21440436f1505c1f691bc
4
+ data.tar.gz: 0ef36903075d6e1339f028c7e41bed7f9ca96ee5
5
5
  SHA512:
6
- metadata.gz: 439c250dce80d2ed7f50a69d8c06aaf4d47e01ba3b25f4c368debfc0ab4431c45c8cf470f0f3377cbdb6043e1604c3c731b116e0134903d986865b06f53f9fc2
7
- data.tar.gz: 01963b88c9e4886cfd523d0da278958a5db70e08e1f1fb96d2c97ba987c30392fe2581a450a613c9ee0f6427390664ba44f1c4b4b90be10efbb092b360eeb017
6
+ metadata.gz: 9356101215b2e311132501a81f609a4ace4a76de13d109ee6fb962ba28303edfc65882b0edd26cc6aef19b1296aa5c023f3e834465feeea115a2e8637b2314fa
7
+ data.tar.gz: 8901071c03b028612902d07b143595bcfc02b187a09da697c5b87c8b4395f9be1fca0105caaa2d2368ade0ae1f07676a1ea4eeee871215c70d01a19b441e242e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- coach (0.2.1)
4
+ coach (0.2.2)
5
5
  actionpack (~> 4.2)
6
6
  activesupport (~> 4.2)
7
7
 
@@ -101,4 +101,4 @@ DEPENDENCIES
101
101
  rubocop
102
102
 
103
103
  BUNDLED WITH
104
- 1.10.4
104
+ 1.10.5
data/lib/coach/errors.rb CHANGED
@@ -1,9 +1,22 @@
1
1
  module Coach
2
2
  module Errors
3
3
  class MiddlewareDependencyNotMet < StandardError
4
- def initialize(middleware, keys)
5
- super("#{middleware.name} requires keys [#{keys.join(',')}] that are not " \
6
- "provided by the middleware chain")
4
+ def initialize(middleware, previous_chain, missing_keys)
5
+ @middleware = middleware
6
+ @previous_chain = previous_chain
7
+ @missing_keys = missing_keys
8
+
9
+ super("\n\n#{chain_diagram}\n\n#{missing_keys_message}\n\n")
10
+ end
11
+
12
+ def missing_keys_message
13
+ " #{@middleware.name} is missing #{@missing_keys} from above!"
14
+ end
15
+
16
+ def chain_diagram
17
+ @previous_chain.map do |middleware|
18
+ " #{middleware.name} => #{middleware.provided}"
19
+ end.join("\n")
7
20
  end
8
21
  end
9
22
 
data/lib/coach/handler.rb CHANGED
@@ -5,6 +5,10 @@ module Coach
5
5
  def initialize(middleware)
6
6
  @root_item = MiddlewareItem.new(middleware)
7
7
  validate!
8
+ rescue Coach::Errors::MiddlewareDependencyNotMet => error
9
+ # Remove noise of validation stack trace, reset to the handler callsite
10
+ error.backtrace.clear.push(*Thread.current.backtrace)
11
+ raise error
8
12
  end
9
13
 
10
14
  # Run validation on the root of the middleware chain
@@ -2,8 +2,9 @@ require "coach/errors"
2
2
 
3
3
  module Coach
4
4
  class MiddlewareValidator
5
- def initialize(middleware, already_provided = [])
5
+ def initialize(middleware, previous_middlewares = [], already_provided = [])
6
6
  @middleware = middleware
7
+ @previous_middlewares = previous_middlewares.clone
7
8
  @already_provided = already_provided
8
9
  end
9
10
 
@@ -12,7 +13,7 @@ module Coach
12
13
  def validated_provides!
13
14
  if missing_requirements.any?
14
15
  raise Coach::Errors::MiddlewareDependencyNotMet.new(
15
- @middleware, missing_requirements
16
+ @middleware, @previous_middlewares, missing_requirements
16
17
  )
17
18
  end
18
19
 
@@ -21,15 +22,20 @@ module Coach
21
22
 
22
23
  private
23
24
 
25
+ attr_reader :previous_middlewares
26
+
24
27
  def missing_requirements
25
28
  @middleware.requirements - provided_by_chain
26
29
  end
27
30
 
28
31
  def provided_by_chain
29
- @provided_by_chain ||=
30
- middleware_dependencies.reduce(@already_provided) do |provided, middleware|
31
- provided + self.class.new(middleware, provided).validated_provides!
32
- end.flatten.uniq
32
+ @provided_by_chain ||= begin
33
+ initial = [@already_provided, @previous_middlewares]
34
+ middleware_dependencies.reduce(initial) do |(provided, previous), middleware|
35
+ validator = self.class.new(middleware, previous, provided)
36
+ [provided + validator.validated_provides!, previous + [middleware]]
37
+ end.first.flatten.uniq
38
+ end
33
39
  end
34
40
 
35
41
  def middleware_dependencies
data/lib/coach/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Coach
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
@@ -56,7 +56,7 @@ describe Coach::MiddlewareValidator do
56
56
  context "at terminal" do
57
57
  before { head_middleware.requires :a, :c }
58
58
 
59
- it { is_expected.to raise_exception(/requires keys \[a,c\]/) }
59
+ it { is_expected.to raise_exception(/missing \[:a, :c\]/) }
60
60
  end
61
61
 
62
62
  context "from unordered middleware" do
@@ -65,7 +65,7 @@ describe Coach::MiddlewareValidator do
65
65
  middleware_b.provides :b
66
66
  end
67
67
 
68
- it { is_expected.to raise_exception(/requires keys \[b\]/) }
68
+ it { is_expected.to raise_exception(/missing \[:b\]/) }
69
69
  end
70
70
  end
71
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coach
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
@@ -14,84 +14,84 @@ dependencies:
14
14
  name: actionpack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '4.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '4.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: 3.2.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 3.2.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec-its
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.2.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.2.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  description: Controller framework
@@ -101,10 +101,10 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
- - ".gitignore"
105
- - ".rspec"
106
- - ".rubocop.yml"
107
- - ".travis.yml"
104
+ - .gitignore
105
+ - .rspec
106
+ - .rubocop.yml
107
+ - .travis.yml
108
108
  - Gemfile
109
109
  - Gemfile.lock
110
110
  - README.md
@@ -139,12 +139,12 @@ require_paths:
139
139
  - lib
140
140
  required_ruby_version: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - ">="
142
+ - - '>='
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
145
  required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - ">="
147
+ - - '>='
148
148
  - !ruby/object:Gem::Version
149
149
  version: '0'
150
150
  requirements: []