coach 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/lib/coach/errors.rb +16 -3
- data/lib/coach/handler.rb +4 -0
- data/lib/coach/middleware_validator.rb +12 -6
- data/lib/coach/version.rb +1 -1
- data/spec/lib/coach/middleware_validator_spec.rb +2 -2
- metadata +19 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f98b2d520ff9d3365bc21440436f1505c1f691bc
|
4
|
+
data.tar.gz: 0ef36903075d6e1339f028c7e41bed7f9ca96ee5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9356101215b2e311132501a81f609a4ace4a76de13d109ee6fb962ba28303edfc65882b0edd26cc6aef19b1296aa5c023f3e834465feeea115a2e8637b2314fa
|
7
|
+
data.tar.gz: 8901071c03b028612902d07b143595bcfc02b187a09da697c5b87c8b4395f9be1fca0105caaa2d2368ade0ae1f07676a1ea4eeee871215c70d01a19b441e242e
|
data/Gemfile.lock
CHANGED
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,
|
5
|
-
|
6
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
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
@@ -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(/
|
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(/
|
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.
|
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
|
-
-
|
105
|
-
-
|
106
|
-
-
|
107
|
-
-
|
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: []
|