castle-rb 7.2.0 → 8.0.0

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/castle/api/authenticate.rb +3 -12
  3. data/lib/castle/api/end_impersonation.rb +1 -3
  4. data/lib/castle/api/filter.rb +2 -10
  5. data/lib/castle/api/log.rb +2 -10
  6. data/lib/castle/api/risk.rb +2 -10
  7. data/lib/castle/api/start_impersonation.rb +1 -3
  8. data/lib/castle/api/track.rb +1 -3
  9. data/lib/castle/client.rb +1 -5
  10. data/lib/castle/commands/log.rb +1 -5
  11. data/lib/castle/commands/risk.rb +1 -5
  12. data/lib/castle/configuration.rb +2 -5
  13. data/lib/castle/core/process_response.rb +4 -3
  14. data/lib/castle/core/send_request.rb +1 -3
  15. data/lib/castle/errors.rb +4 -0
  16. data/lib/castle/headers/extract.rb +1 -3
  17. data/lib/castle/headers/filter.rb +2 -3
  18. data/lib/castle/payload/prepare.rb +1 -2
  19. data/lib/castle/session.rb +1 -1
  20. data/lib/castle/version.rb +1 -1
  21. data/lib/castle.rb +1 -3
  22. data/spec/integration/rails/rails_spec.rb +9 -3
  23. data/spec/integration/rails/support/application.rb +2 -2
  24. data/spec/integration/rails/support/home_controller.rb +4 -30
  25. data/spec/lib/castle/api/approve_device_spec.rb +2 -6
  26. data/spec/lib/castle/api/authenticate_spec.rb +22 -25
  27. data/spec/lib/castle/api/end_impersonation_spec.rb +8 -14
  28. data/spec/lib/castle/api/get_device_spec.rb +1 -3
  29. data/spec/lib/castle/api/get_devices_for_user_spec.rb +1 -3
  30. data/spec/lib/castle/api/report_device_spec.rb +2 -6
  31. data/spec/lib/castle/api/start_impersonation_spec.rb +8 -14
  32. data/spec/lib/castle/api/track_spec.rb +9 -16
  33. data/spec/lib/castle/client_id/extract_spec.rb +2 -9
  34. data/spec/lib/castle/client_spec.rb +32 -78
  35. data/spec/lib/castle/command_spec.rb +3 -3
  36. data/spec/lib/castle/commands/approve_device_spec.rb +2 -2
  37. data/spec/lib/castle/commands/authenticate_spec.rb +17 -24
  38. data/spec/lib/castle/commands/end_impersonation_spec.rb +14 -21
  39. data/spec/lib/castle/commands/filter_spec.rb +15 -15
  40. data/spec/lib/castle/commands/get_device_spec.rb +2 -2
  41. data/spec/lib/castle/commands/get_devices_for_user_spec.rb +2 -2
  42. data/spec/lib/castle/commands/log_spec.rb +15 -15
  43. data/spec/lib/castle/commands/report_device_spec.rb +2 -2
  44. data/spec/lib/castle/commands/risk_spec.rb +15 -15
  45. data/spec/lib/castle/commands/start_impersonation_spec.rb +14 -21
  46. data/spec/lib/castle/commands/track_spec.rb +19 -24
  47. data/spec/lib/castle/configuration_spec.rb +1 -1
  48. data/spec/lib/castle/context/get_default_spec.rb +9 -8
  49. data/spec/lib/castle/context/prepare_spec.rb +3 -4
  50. data/spec/lib/castle/core/process_response_spec.rb +3 -6
  51. data/spec/lib/castle/core/process_webhook_spec.rb +12 -6
  52. data/spec/lib/castle/core/send_request_spec.rb +7 -11
  53. data/spec/lib/castle/failover/strategy_spec.rb +5 -5
  54. data/spec/lib/castle/headers/extract_spec.rb +1 -1
  55. data/spec/lib/castle/headers/filter_spec.rb +6 -3
  56. data/spec/lib/castle/headers/format_spec.rb +5 -5
  57. data/spec/lib/castle/ips/extract_spec.rb +2 -6
  58. data/spec/lib/castle/logger_spec.rb +2 -1
  59. data/spec/lib/castle/payload/prepare_spec.rb +4 -7
  60. data/spec/lib/castle/secure_mode_spec.rb +1 -3
  61. data/spec/lib/castle/session_spec.rb +1 -5
  62. data/spec/lib/castle/singleton_configuration_spec.rb +1 -1
  63. data/spec/lib/castle/utils/clone_spec.rb +1 -1
  64. data/spec/lib/castle/utils/merge_spec.rb +2 -4
  65. data/spec/lib/castle/validators/not_supported_spec.rb +1 -6
  66. data/spec/lib/castle/validators/present_spec.rb +2 -9
  67. data/spec/lib/castle/verdict_spec.rb +3 -3
  68. data/spec/lib/castle/webhooks/verify_spec.rb +12 -6
  69. data/spec/lib/castle_spec.rb +5 -7
  70. data/spec/support/shared_examples/action_request.rb +16 -34
  71. data/spec/support/shared_examples/configuration.rb +14 -16
  72. metadata +48 -48
@@ -19,13 +19,19 @@ describe Castle::Webhooks::Verify do
19
19
  device_token: 'token',
20
20
  user_id: user_id,
21
21
  trigger: '$login.succeeded',
22
- context: {},
23
- location: {},
24
- user_agent: {}
22
+ context: {
23
+ },
24
+ location: {
25
+ },
26
+ user_agent: {
27
+ }
25
28
  },
26
- user_traits: {},
27
- properties: {},
28
- policy: {}
29
+ user_traits: {
30
+ },
31
+ properties: {
32
+ },
33
+ policy: {
34
+ }
29
35
  }.to_json
30
36
  end
31
37
 
@@ -4,7 +4,7 @@ describe Castle do
4
4
  subject(:castle) { described_class }
5
5
 
6
6
  describe 'config' do
7
- it { expect(castle.config).to be_kind_of(Castle::Configuration) }
7
+ it { expect(castle.config).to be_a(Castle::Configuration) }
8
8
  end
9
9
 
10
10
  describe 'api_secret setter' do
@@ -12,7 +12,7 @@ describe Castle do
12
12
 
13
13
  before { castle.api_secret = value }
14
14
 
15
- it { expect(castle.config.api_secret).to be_eql(value) }
15
+ it { expect(castle.config.api_secret).to eql(value) }
16
16
  end
17
17
 
18
18
  describe 'configure' do
@@ -20,8 +20,8 @@ describe Castle do
20
20
  let(:timeout) { 60 }
21
21
 
22
22
  shared_examples 'config_setup' do
23
- it { expect(castle.config.api_secret).to be_eql(value) }
24
- it { expect(castle.config.request_timeout).to be_eql(timeout) }
23
+ it { expect(castle.config.api_secret).to eql(value) }
24
+ it { expect(castle.config.request_timeout).to eql(timeout) }
25
25
  end
26
26
 
27
27
  context 'with block' do
@@ -52,9 +52,7 @@ describe Castle do
52
52
  let(:value) { 'new_secret' }
53
53
 
54
54
  it do
55
- expect { castle.configure { |config| config.wrong_config = value } }.to raise_error(
56
- Castle::ConfigurationError
57
- )
55
+ expect { castle.configure { |config| config.wrong_config = value } }.to raise_error(Castle::ConfigurationError)
58
56
  end
59
57
  end
60
58
  end
@@ -4,14 +4,7 @@ RSpec.shared_examples_for 'action request' do |action|
4
4
  subject(:request_response) { client.send(action.to_sym, options) }
5
5
 
6
6
  let(:options) do
7
- {
8
- request_token: request_token,
9
- event: event,
10
- status: status,
11
- user: user,
12
- context: context,
13
- properties: properties
14
- }
7
+ { request_token: request_token, event: event, status: status, user: user, context: context, properties: properties }
15
8
  end
16
9
  let(:request_token) { '7e51335b-f4bc-4bc7-875d-b713fb61eb23-bf021a3022a1a302' }
17
10
  let(:event) { '$login' }
@@ -104,19 +97,15 @@ RSpec.shared_examples_for 'action request' do |action|
104
97
  end
105
98
 
106
99
  it { assert_not_requested :post, "https://api.castle.io/v1/#{action}" }
107
- it { expect(request_response[:policy][:action]).to be_eql(Castle::Verdict::ALLOW) }
108
- it { expect(request_response[:action]).to be_eql(Castle::Verdict::ALLOW) }
109
- it { expect(request_response[:user_id]).to be_eql('1234') }
100
+ it { expect(request_response[:policy][:action]).to eql(Castle::Verdict::ALLOW) }
101
+ it { expect(request_response[:action]).to eql(Castle::Verdict::ALLOW) }
102
+ it { expect(request_response[:user_id]).to eql('1234') }
110
103
  it { expect(request_response[:failover]).to be true }
111
- it { expect(request_response[:failover_reason]).to be_eql('Castle is set to do not track.') }
104
+ it { expect(request_response[:failover_reason]).to eql('Castle is set to do not track.') }
112
105
  end
113
106
 
114
107
  context 'when request with fail' do
115
- before do
116
- allow(Castle::API).to receive(:send_request).and_raise(
117
- Castle::RequestError.new(Timeout::Error)
118
- )
119
- end
108
+ before { allow(Castle::API).to receive(:send_request).and_raise(Castle::RequestError.new(Timeout::Error)) }
120
109
 
121
110
  context 'with request error and throw strategy' do
122
111
  before { allow(Castle.config).to receive(:failover_strategy).and_return(:throw) }
@@ -126,11 +115,11 @@ RSpec.shared_examples_for 'action request' do |action|
126
115
 
127
116
  context 'with request error and not throw on eg deny strategy' do
128
117
  it { assert_not_requested :post, "https:/:secret@api.castle.io/v1/#{action}" }
129
- it { expect(request_response[:policy][:action]).to be_eql('allow') }
130
- it { expect(request_response[:action]).to be_eql('allow') }
131
- it { expect(request_response[:user_id]).to be_eql('1234') }
118
+ it { expect(request_response[:policy][:action]).to eql('allow') }
119
+ it { expect(request_response[:action]).to eql('allow') }
120
+ it { expect(request_response[:user_id]).to eql('1234') }
132
121
  it { expect(request_response[:failover]).to be true }
133
- it { expect(request_response[:failover_reason]).to be_eql('Castle::RequestError') }
122
+ it { expect(request_response[:failover_reason]).to eql('Castle::RequestError') }
134
123
  end
135
124
  end
136
125
 
@@ -145,11 +134,11 @@ RSpec.shared_examples_for 'action request' do |action|
145
134
 
146
135
  describe 'not throw on eg deny strategy' do
147
136
  it { assert_not_requested :post, "https:/:secret@api.castle.io/v1/#{action}" }
148
- it { expect(request_response[:policy][:action]).to be_eql('allow') }
149
- it { expect(request_response[:action]).to be_eql('allow') }
150
- it { expect(request_response[:user_id]).to be_eql('1234') }
137
+ it { expect(request_response[:policy][:action]).to eql('allow') }
138
+ it { expect(request_response[:action]).to eql('allow') }
139
+ it { expect(request_response[:user_id]).to eql('1234') }
151
140
  it { expect(request_response[:failover]).to be true }
152
- it { expect(request_response[:failover_reason]).to be_eql('Castle::InternalServerError') }
141
+ it { expect(request_response[:failover_reason]).to eql('Castle::InternalServerError') }
153
142
  end
154
143
  end
155
144
 
@@ -158,9 +147,7 @@ RSpec.shared_examples_for 'action request' do |action|
158
147
  let(:response_body) { { type: 'bad_request', message: 'wrong params' }.to_json }
159
148
  let(:response_code) { 422 }
160
149
 
161
- it do
162
- expect { request_response }.to raise_error(Castle::InvalidParametersError, 'wrong params')
163
- end
150
+ it { expect { request_response }.to raise_error(Castle::InvalidParametersError, 'wrong params') }
164
151
  end
165
152
 
166
153
  describe 'throw InvalidParametersError for legacy endpoints' do
@@ -174,12 +161,7 @@ RSpec.shared_examples_for 'action request' do |action|
174
161
  let(:response_body) { { type: 'invalid_request_token', message: 'invalid token' }.to_json }
175
162
  let(:response_code) { 422 }
176
163
 
177
- it do
178
- expect { request_response }.to raise_error(
179
- Castle::InvalidRequestTokenError,
180
- 'invalid token'
181
- )
182
- end
164
+ it { expect { request_response }.to raise_error(Castle::InvalidRequestTokenError, 'invalid token') }
183
165
  end
184
166
  end
185
167
  end
@@ -3,69 +3,67 @@
3
3
  shared_examples 'configuration_host' do
4
4
  describe 'host' do
5
5
  context 'with default' do
6
- it { expect(config.base_url.host).to be_eql('api.castle.io') }
6
+ it { expect(config.base_url.host).to eql('api.castle.io') }
7
7
  end
8
8
 
9
9
  context 'with setter' do
10
10
  before { config.base_url = 'http://api.castle.dev/v2' }
11
11
 
12
- it { expect(config.base_url.host).to be_eql('api.castle.dev') }
12
+ it { expect(config.base_url.host).to eql('api.castle.dev') }
13
13
  end
14
14
  end
15
15
  end
16
16
 
17
17
  shared_examples 'configuration_request_timeout' do
18
18
  describe 'request_timeout' do
19
- it { expect(config.request_timeout).to be_eql(1000) }
19
+ it { expect(config.request_timeout).to be(1000) }
20
20
 
21
21
  context 'with setter' do
22
22
  let(:value) { 50.0 }
23
23
 
24
24
  before { config.request_timeout = value }
25
25
 
26
- it { expect(config.request_timeout).to be_eql(value) }
26
+ it { expect(config.request_timeout).to eql(value) }
27
27
  end
28
28
  end
29
29
  end
30
30
 
31
31
  shared_examples 'configuration_allowlisted' do
32
32
  describe 'allowlisted' do
33
- it { expect(config.allowlisted.size).to be_eql(0) }
33
+ it { expect(config.allowlisted.size).to be(0) }
34
34
 
35
35
  context 'with setter' do
36
36
  before { config.allowlisted = ['header'] }
37
37
 
38
- it { expect(config.allowlisted).to be_eql(['Header']) }
38
+ it { expect(config.allowlisted).to eql(['Header']) }
39
39
  end
40
40
  end
41
41
  end
42
42
 
43
43
  shared_examples 'configuration_denylisted' do
44
44
  describe 'denylisted' do
45
- it { expect(config.denylisted.size).to be_eql(0) }
45
+ it { expect(config.denylisted.size).to be(0) }
46
46
 
47
47
  context 'with setter' do
48
48
  before { config.denylisted = ['header'] }
49
49
 
50
- it { expect(config.denylisted).to be_eql(['Header']) }
50
+ it { expect(config.denylisted).to eql(['Header']) }
51
51
  end
52
52
  end
53
53
  end
54
54
 
55
55
  shared_examples 'configuration_failover_strategy' do
56
56
  describe 'failover_strategy' do
57
- it { expect(config.failover_strategy).to be_eql(Castle::Failover::Strategy::ALLOW) }
57
+ it { expect(config.failover_strategy).to eql(Castle::Failover::Strategy::ALLOW) }
58
58
 
59
59
  context 'with setter' do
60
60
  before { config.failover_strategy = Castle::Failover::Strategy::DENY }
61
61
 
62
- it { expect(config.failover_strategy).to be_eql(Castle::Failover::Strategy::DENY) }
62
+ it { expect(config.failover_strategy).to eql(Castle::Failover::Strategy::DENY) }
63
63
  end
64
64
 
65
65
  context 'when broken' do
66
- it do
67
- expect { config.failover_strategy = :unicorn }.to raise_error(Castle::ConfigurationError)
68
- end
66
+ it { expect { config.failover_strategy = :unicorn }.to raise_error(Castle::ConfigurationError) }
69
67
  end
70
68
  end
71
69
  end
@@ -81,12 +79,12 @@ shared_examples 'configuration_api_secret' do
81
79
  config.reset
82
80
  end
83
81
 
84
- it { expect(config.api_secret).to be_eql(secret_key_env) }
82
+ it { expect(config.api_secret).to eql(secret_key_env) }
85
83
 
86
84
  context 'when key is overwritten' do
87
85
  before { config.api_secret = secret_key }
88
86
 
89
- it { expect(config.api_secret).to be_eql(secret_key) }
87
+ it { expect(config.api_secret).to eql(secret_key) }
90
88
  end
91
89
  end
92
90
 
@@ -95,7 +93,7 @@ shared_examples 'configuration_api_secret' do
95
93
 
96
94
  before { config.api_secret = value }
97
95
 
98
- it { expect(config.api_secret).to be_eql(value) }
96
+ it { expect(config.api_secret).to eql(value) }
99
97
  end
100
98
  end
101
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: castle-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johan Brissmyr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-14 00:00:00.000000000 Z
11
+ date: 2024-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appraisal
@@ -170,78 +170,78 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: '2.4'
173
+ version: '2.7'
174
174
  required_rubygems_version: !ruby/object:Gem::Requirement
175
175
  requirements:
176
176
  - - ">="
177
177
  - !ruby/object:Gem::Version
178
178
  version: '0'
179
179
  requirements: []
180
- rubygems_version: 3.2.27
180
+ rubygems_version: 3.5.17
181
181
  signing_key:
182
182
  specification_version: 4
183
183
  summary: Castle
184
184
  test_files:
185
- - spec/spec_helper.rb
186
- - spec/integration/rails/support/application.rb
185
+ - spec/integration/rails/rails_spec.rb
187
186
  - spec/integration/rails/support/all.rb
187
+ - spec/integration/rails/support/application.rb
188
188
  - spec/integration/rails/support/home_controller.rb
189
- - spec/integration/rails/rails_spec.rb
190
- - spec/support/shared_examples/action_request.rb
191
- - spec/support/shared_examples/configuration.rb
192
- - spec/lib/castle_spec.rb
193
- - spec/lib/castle/session_spec.rb
194
- - spec/lib/castle/verdict_spec.rb
189
+ - spec/lib/castle/api/approve_device_spec.rb
190
+ - spec/lib/castle/api/authenticate_spec.rb
191
+ - spec/lib/castle/api/end_impersonation_spec.rb
192
+ - spec/lib/castle/api/filter_spec.rb
193
+ - spec/lib/castle/api/get_device_spec.rb
194
+ - spec/lib/castle/api/get_devices_for_user_spec.rb
195
+ - spec/lib/castle/api/log_spec.rb
196
+ - spec/lib/castle/api/report_device_spec.rb
197
+ - spec/lib/castle/api/risk_spec.rb
198
+ - spec/lib/castle/api/start_impersonation_spec.rb
199
+ - spec/lib/castle/api/track_spec.rb
200
+ - spec/lib/castle/api_spec.rb
201
+ - spec/lib/castle/client_id/extract_spec.rb
195
202
  - spec/lib/castle/client_spec.rb
203
+ - spec/lib/castle/command_spec.rb
204
+ - spec/lib/castle/commands/approve_device_spec.rb
205
+ - spec/lib/castle/commands/authenticate_spec.rb
206
+ - spec/lib/castle/commands/end_impersonation_spec.rb
207
+ - spec/lib/castle/commands/filter_spec.rb
208
+ - spec/lib/castle/commands/get_device_spec.rb
209
+ - spec/lib/castle/commands/get_devices_for_user_spec.rb
210
+ - spec/lib/castle/commands/log_spec.rb
211
+ - spec/lib/castle/commands/report_device_spec.rb
212
+ - spec/lib/castle/commands/risk_spec.rb
213
+ - spec/lib/castle/commands/start_impersonation_spec.rb
214
+ - spec/lib/castle/commands/track_spec.rb
215
+ - spec/lib/castle/configuration_spec.rb
196
216
  - spec/lib/castle/context/get_default_spec.rb
217
+ - spec/lib/castle/context/merge_spec.rb
197
218
  - spec/lib/castle/context/prepare_spec.rb
198
219
  - spec/lib/castle/context/sanitize_spec.rb
199
- - spec/lib/castle/context/merge_spec.rb
200
220
  - spec/lib/castle/core/get_connection_spec.rb
221
+ - spec/lib/castle/core/process_response_spec.rb
201
222
  - spec/lib/castle/core/process_webhook_spec.rb
202
223
  - spec/lib/castle/core/send_request_spec.rb
203
- - spec/lib/castle/core/process_response_spec.rb
224
+ - spec/lib/castle/failover/strategy_spec.rb
225
+ - spec/lib/castle/headers/extract_spec.rb
226
+ - spec/lib/castle/headers/filter_spec.rb
227
+ - spec/lib/castle/headers/format_spec.rb
204
228
  - spec/lib/castle/ips/extract_spec.rb
205
- - spec/lib/castle/api_spec.rb
206
229
  - spec/lib/castle/logger_spec.rb
207
- - spec/lib/castle/client_id/extract_spec.rb
208
- - spec/lib/castle/configuration_spec.rb
209
- - spec/lib/castle/version_spec.rb
210
230
  - spec/lib/castle/payload/prepare_spec.rb
231
+ - spec/lib/castle/secure_mode_spec.rb
232
+ - spec/lib/castle/session_spec.rb
233
+ - spec/lib/castle/singleton_configuration_spec.rb
211
234
  - spec/lib/castle/utils/clean_invalid_chars_spec.rb
235
+ - spec/lib/castle/utils/clone_spec.rb
212
236
  - spec/lib/castle/utils/deep_symbolize_keys_spec.rb
213
237
  - spec/lib/castle/utils/get_timestamp_spec.rb
214
- - spec/lib/castle/utils/clone_spec.rb
215
238
  - spec/lib/castle/utils/merge_spec.rb
216
- - spec/lib/castle/command_spec.rb
217
- - spec/lib/castle/headers/format_spec.rb
218
- - spec/lib/castle/headers/extract_spec.rb
219
- - spec/lib/castle/headers/filter_spec.rb
220
- - spec/lib/castle/api/report_device_spec.rb
221
- - spec/lib/castle/api/authenticate_spec.rb
222
- - spec/lib/castle/api/track_spec.rb
223
- - spec/lib/castle/api/get_device_spec.rb
224
- - spec/lib/castle/api/risk_spec.rb
225
- - spec/lib/castle/api/start_impersonation_spec.rb
226
- - spec/lib/castle/api/log_spec.rb
227
- - spec/lib/castle/api/approve_device_spec.rb
228
- - spec/lib/castle/api/get_devices_for_user_spec.rb
229
- - spec/lib/castle/api/end_impersonation_spec.rb
230
- - spec/lib/castle/api/filter_spec.rb
231
- - spec/lib/castle/commands/report_device_spec.rb
232
- - spec/lib/castle/commands/authenticate_spec.rb
233
- - spec/lib/castle/commands/track_spec.rb
234
- - spec/lib/castle/commands/get_device_spec.rb
235
- - spec/lib/castle/commands/risk_spec.rb
236
- - spec/lib/castle/commands/start_impersonation_spec.rb
237
- - spec/lib/castle/commands/log_spec.rb
238
- - spec/lib/castle/commands/approve_device_spec.rb
239
- - spec/lib/castle/commands/get_devices_for_user_spec.rb
240
- - spec/lib/castle/commands/end_impersonation_spec.rb
241
- - spec/lib/castle/commands/filter_spec.rb
242
239
  - spec/lib/castle/validators/not_supported_spec.rb
243
240
  - spec/lib/castle/validators/present_spec.rb
241
+ - spec/lib/castle/verdict_spec.rb
242
+ - spec/lib/castle/version_spec.rb
244
243
  - spec/lib/castle/webhooks/verify_spec.rb
245
- - spec/lib/castle/failover/strategy_spec.rb
246
- - spec/lib/castle/secure_mode_spec.rb
247
- - spec/lib/castle/singleton_configuration_spec.rb
244
+ - spec/lib/castle_spec.rb
245
+ - spec/spec_helper.rb
246
+ - spec/support/shared_examples/action_request.rb
247
+ - spec/support/shared_examples/configuration.rb