lhs 15.5.1 → 15.6.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +3 -0
- data/README.md +1630 -780
- data/lhs.gemspec +2 -2
- data/lib/lhs/concerns/record/chainable.rb +4 -0
- data/lib/lhs/concerns/record/configuration.rb +7 -0
- data/lib/lhs/concerns/record/request.rb +4 -2
- data/lib/lhs/version.rb +1 -1
- data/spec/autoloading_spec.rb +1 -1
- data/spec/dummy/app/controllers/error_handling_with_chains_controller.rb +34 -0
- data/spec/dummy/app/models/record.rb +4 -0
- data/spec/dummy/app/views/error_handling_with_chains/error.html.erb +1 -0
- data/spec/dummy/app/views/error_handling_with_chains/show.html.erb +3 -0
- data/spec/dummy/config/routes.rb +6 -0
- data/spec/pagination/parameters_spec.rb +2 -2
- data/spec/record/all_spec.rb +26 -0
- data/spec/record/error_handling_integration_spec.rb +23 -0
- data/spec/record/{chain_error_handling_spec.rb → error_handling_spec.rb} +0 -0
- data/spec/record/fetch_spec.rb +24 -9
- data/spec/{request_cycle_cache/main_spec.rb → request_cycle_cache_spec.rb} +8 -8
- data/spec/support/reset.rb +43 -0
- metadata +24 -13
- data/spec/support/cleanup.rb +0 -32
data/lhs.gemspec
CHANGED
@@ -8,9 +8,9 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.name = "lhs"
|
9
9
|
s.version = LHS::VERSION
|
10
10
|
s.authors = ['https://github.com/local-ch/lhs/graphs/contributors']
|
11
|
-
s.email = ['
|
11
|
+
s.email = ['web@localsearch.ch']
|
12
12
|
s.homepage = 'https://github.com/local-ch/lhs'
|
13
|
-
s.summary = 'Rails gem providing an easy, active-record-like interface for http json services'
|
13
|
+
s.summary = 'REST services accelerator: Rails gem providing an easy, active-record-like interface for http (hypermedia) json services'
|
14
14
|
s.description = s.summary
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
@@ -60,6 +60,13 @@ class LHS::Record
|
|
60
60
|
)
|
61
61
|
end
|
62
62
|
|
63
|
+
# Allows record to be configured as not paginated,
|
64
|
+
# as by default it's considered paginated
|
65
|
+
def paginated
|
66
|
+
return true if @configuration.blank?
|
67
|
+
@configuration.fetch(:paginated, true)
|
68
|
+
end
|
69
|
+
|
63
70
|
private
|
64
71
|
|
65
72
|
def symbolize_unless_complex(value)
|
@@ -22,7 +22,7 @@ class LHS::Record
|
|
22
22
|
private
|
23
23
|
|
24
24
|
def single_request_load_and_merge_remaining_objects!(data, options, endpoint)
|
25
|
-
return
|
25
|
+
return if options[:all].blank? || !paginated
|
26
26
|
load_and_merge_remaining_objects!(
|
27
27
|
data: data,
|
28
28
|
options: process_options(options, endpoint),
|
@@ -40,6 +40,7 @@ class LHS::Record
|
|
40
40
|
# Tries to apply an high value for limit and reacts on the limit
|
41
41
|
# returned by the endpoint to make further requests
|
42
42
|
def apply_limit!(options)
|
43
|
+
return if !paginated || options[:all].blank?
|
43
44
|
options[:params] ||= {}
|
44
45
|
options[:params] = options[:params].merge(limit_key(:parameter) => options[:params][limit_key(:parameter)] || LHS::Pagination::Base::DEFAULT_LIMIT)
|
45
46
|
end
|
@@ -239,6 +240,7 @@ class LHS::Record
|
|
239
240
|
elsif data.collection? && paginated?(data.first.try(:_raw))
|
240
241
|
load_and_merge_set_of_paginated_collections!(data, options)
|
241
242
|
elsif load_not_paginated_collection
|
243
|
+
warn('[Warning] "all" has been requested, but endpoint does not provide pagination meta data. If you just want to fetch the first response, use "where" or "fetch".')
|
242
244
|
load_and_merge_not_paginated_collection!(data, options)
|
243
245
|
end
|
244
246
|
end
|
@@ -522,7 +524,7 @@ class LHS::Record
|
|
522
524
|
including = options.delete(:including)
|
523
525
|
referencing = options.delete(:referencing)
|
524
526
|
endpoint = find_endpoint(options[:params], options.fetch(:url, nil))
|
525
|
-
apply_limit!(options)
|
527
|
+
apply_limit!(options)
|
526
528
|
response = LHC.request(process_options(options, endpoint))
|
527
529
|
return nil if !response.success? && response.error_ignored?
|
528
530
|
data = LHS::Data.new(response.body, nil, self, response.request, endpoint)
|
data/lib/lhs/version.rb
CHANGED
data/spec/autoloading_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe LHS, type: :request do
|
|
4
4
|
context 'autoloading' do
|
5
5
|
it "pre/re-loads all LHS classes initialy,|
|
6
6
|
because it's necessary for endpoint-to-record-class-discovery",
|
7
|
-
|
7
|
+
reset_before: false do
|
8
8
|
all_endpoints = LHS::Record::Endpoints.all
|
9
9
|
expect(all_endpoints['http://datastore/v2/users']).to be_present
|
10
10
|
expect(all_endpoints['http://datastore/v2/users/{id}']).to be_present
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class ErrorHandlingWithChainsController < ApplicationController
|
2
|
+
|
3
|
+
# Example where the query chain is resolved
|
4
|
+
# in the view (during render 'show')
|
5
|
+
def fetch_in_view
|
6
|
+
@records = Record
|
7
|
+
.handle(LHC::Error, ->(error) { handle_error(error) })
|
8
|
+
.where(color: 'blue')
|
9
|
+
render 'show'
|
10
|
+
render_error if @error
|
11
|
+
end
|
12
|
+
|
13
|
+
# Example where the query chain is resolved
|
14
|
+
# before the view is rendered
|
15
|
+
def fetch_in_controller
|
16
|
+
@records = Record
|
17
|
+
.handle(LHC::Error, ->(error) { handle_error(error) })
|
18
|
+
.where(color: 'blue').fetch
|
19
|
+
render 'show'
|
20
|
+
render_error if @error
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def handle_error(error)
|
26
|
+
@error = error
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def render_error
|
31
|
+
self.response_body = nil
|
32
|
+
render 'error'
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Sorry there was an error.
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
root 'application#root'
|
3
|
+
|
4
|
+
# Request Cycle Cache
|
3
5
|
get 'request_cycle_cache/simple' => 'request_cycle_cache#simple'
|
4
6
|
get 'request_cycle_cache/no_caching_interceptor' => 'request_cycle_cache#no_caching_interceptor'
|
5
7
|
get 'request_cycle_cache/parallel' => 'request_cycle_cache#parallel'
|
6
8
|
get 'request_cycle_cache/headers' => 'request_cycle_cache#headers'
|
9
|
+
|
10
|
+
# Error handling with chains
|
11
|
+
get 'error_handling_with_chains/fetch_in_controller' => 'error_handling_with_chains#fetch_in_controller'
|
12
|
+
get 'error_handling_with_chains/fetch_in_view' => 'error_handling_with_chains#fetch_in_view'
|
7
13
|
end
|
@@ -16,9 +16,9 @@ describe LHS::Record do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
context 'explicit pagination
|
19
|
+
context 'explicit pagination parameters for retrieving pages' do
|
20
20
|
|
21
|
-
it 'uses explicit parameters when
|
21
|
+
it 'uses explicit parameters when retrieving pages' do
|
22
22
|
stub_request(:get, "http://uberall/locations?max=100")
|
23
23
|
.to_return(body: {
|
24
24
|
response: {
|
data/spec/record/all_spec.rb
CHANGED
@@ -101,5 +101,31 @@ describe LHS::Record do
|
|
101
101
|
records = Category.all(language: 'en').fetch
|
102
102
|
expect(records.length).to eq 300
|
103
103
|
end
|
104
|
+
|
105
|
+
it 'outputs a warning, if all is requested, but endpoint does not implement pagination meta data' do
|
106
|
+
stub_batch('http://store/categories?language=en&max=100', 100)
|
107
|
+
stub_batch('http://store/categories?language=en&max=100&offset=100', 100)
|
108
|
+
stub_batch('http://store/categories?language=en&max=100&offset=200', 100)
|
109
|
+
stub_batch('http://store/categories?language=en&max=100&offset=300', 0)
|
110
|
+
expect(-> { Category.all(language: 'en').fetch }).to output(
|
111
|
+
%r{\[Warning\] "all" has been requested, but endpoint does not provide pagination meta data. If you just want to fetch the first response, use "where" or "fetch".}
|
112
|
+
).to_stderr
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'with record set to not paginated' do
|
116
|
+
before do
|
117
|
+
class Record < LHS::Record
|
118
|
+
configuration paginated: false
|
119
|
+
endpoint 'http://datastore/records'
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'just fetches the first response' do
|
124
|
+
stub_request(:get, "http://datastore/records")
|
125
|
+
.to_return(body: [{ name: 'Steve' }].to_json)
|
126
|
+
records = Record.all
|
127
|
+
expect(records.first.name).to eq 'Steve'
|
128
|
+
end
|
129
|
+
end
|
104
130
|
end
|
105
131
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
require 'lhc/test/cache_helper.rb'
|
3
|
+
|
4
|
+
describe 'Error handling with chains', type: :request do
|
5
|
+
let!(:request) do
|
6
|
+
stub_request(:get, "http://datastore/v2/records?color=blue")
|
7
|
+
.to_return(status: 404)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'handles errors in rails controllers when query resolved in controller',
|
11
|
+
dummy_models: true do
|
12
|
+
get '/error_handling_with_chains/fetch_in_controller'
|
13
|
+
expect(request).to have_been_made.once
|
14
|
+
expect(response.body).to include('Sorry there was an error.')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'handles errors in rails controllers when query resolved in view',
|
18
|
+
dummy_models: true do
|
19
|
+
get '/error_handling_with_chains/fetch_in_view'
|
20
|
+
expect(request).to have_been_made.once
|
21
|
+
expect(response.body).to include('Sorry there was an error.')
|
22
|
+
end
|
23
|
+
end
|
File without changes
|
data/spec/record/fetch_spec.rb
CHANGED
@@ -8,17 +8,32 @@ describe LHS::Record do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
context 'fetch' do
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
|
12
|
+
context 'to resolve the chain' do
|
13
|
+
let!(:request_stub) do
|
14
|
+
stub_request(:get, "http://datastore/records/?available=true&color=blue&range=%3E26")
|
15
|
+
.to_return(body: [{
|
16
|
+
name: 'Steve'
|
17
|
+
}].to_json)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'resolves chains' do
|
21
|
+
records = Record.where(color: 'blue').where(range: '>26', available: true).fetch
|
22
|
+
expect(request_stub).to have_been_requested
|
23
|
+
expect(records.first.name).to eq 'Steve'
|
24
|
+
end
|
16
25
|
end
|
17
26
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
context 'to fetch the first response' do
|
28
|
+
let!(:request_stub) do
|
29
|
+
stub_request(:get, "http://datastore/records/")
|
30
|
+
.to_return(body: [{ name: 'Steve' }])
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'does fetch the first response if requested directly on the record' do
|
34
|
+
records = Record.fetch
|
35
|
+
expect(records.first.name).to eq 'Steve'
|
36
|
+
end
|
22
37
|
end
|
23
38
|
end
|
24
39
|
end
|
@@ -21,7 +21,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'serves requests that are exactly the same during one request cycle from the cache',
|
24
|
-
|
24
|
+
dummy_models: true, request_cycle_cache: true do
|
25
25
|
get '/request_cycle_cache/simple'
|
26
26
|
expect(request).to have_been_made.once
|
27
27
|
|
@@ -31,7 +31,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'does not serve from request cycle cache when cache interceptor is not hooked in, but logs a warning',
|
34
|
-
|
34
|
+
dummy_models: true, request_cycle_cache: true do
|
35
35
|
expect(lambda do
|
36
36
|
get '/request_cycle_cache/no_caching_interceptor'
|
37
37
|
end).to output(
|
@@ -41,14 +41,14 @@ describe 'Request Cycle Cache', type: :request do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'serves requests also from cache when LHS/LHC makes requests in parallel',
|
44
|
-
|
44
|
+
dummy_models: true, request_cycle_cache: true do
|
45
45
|
get '/request_cycle_cache/parallel'
|
46
46
|
expect(request).to have_been_made.once
|
47
47
|
expect(second_request).to have_been_made.once
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'sets different uniq request ids as base for request cycle caching for different requests',
|
51
|
-
|
51
|
+
dummy_models: true, request_cycle_cache: true do
|
52
52
|
get '/request_cycle_cache/simple'
|
53
53
|
first_request_id = LHS::Record::RequestCycleCache::RequestCycleThreadRegistry.request_id
|
54
54
|
second_request_id = nil
|
@@ -64,7 +64,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
64
64
|
|
65
65
|
context 'disabled request cycle cache' do
|
66
66
|
it 'does not serve from request cycle cache when cache interceptor is not hooked in, and does not warn if request cycle cache is explicitly disabled',
|
67
|
-
|
67
|
+
dummy_models: true do
|
68
68
|
expect(lambda do
|
69
69
|
get '/request_cycle_cache/no_caching_interceptor'
|
70
70
|
end).not_to output(
|
@@ -74,7 +74,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'DOES NOT serve requests that are exactly the same during one request cycle from the cache, when request cycle cache is disabled',
|
77
|
-
|
77
|
+
dummy_models: true do
|
78
78
|
get '/request_cycle_cache/simple'
|
79
79
|
expect(request).to have_been_made.times(2)
|
80
80
|
end
|
@@ -82,7 +82,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
82
82
|
|
83
83
|
context 'headers' do
|
84
84
|
it 'considers the request headers when setting the cache key',
|
85
|
-
|
85
|
+
dummy_models: true, request_cycle_cache: true do
|
86
86
|
get '/request_cycle_cache/headers'
|
87
87
|
expect(request).to have_been_made.times(2)
|
88
88
|
end
|
@@ -95,7 +95,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
95
95
|
after { LHS.config.request_cycle_cache = old_cache }
|
96
96
|
|
97
97
|
it 'uses the cache passed in',
|
98
|
-
|
98
|
+
dummy_models: true, request_cycle_cache: true do
|
99
99
|
expect(LHS.config.request_cycle_cache).to receive(:fetch).at_least(:once)
|
100
100
|
expect(LHS.config.request_cycle_cache).to receive(:write).at_least(:once)
|
101
101
|
get '/request_cycle_cache/simple'
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'lhc'
|
2
|
+
class LHC::Config
|
3
|
+
|
4
|
+
def _cleanup
|
5
|
+
@endpoints = {}
|
6
|
+
@placeholders = {}
|
7
|
+
@interceptors = nil
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class LHS::Record
|
12
|
+
|
13
|
+
CHILDREN = []
|
14
|
+
|
15
|
+
def self.inherited(child)
|
16
|
+
CHILDREN.push(child)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def reset_lhc
|
23
|
+
LHC::Config.instance._cleanup
|
24
|
+
end
|
25
|
+
|
26
|
+
def reset_lhs
|
27
|
+
LHS::Record::Endpoints.all = {}
|
28
|
+
LHS::Record::CHILDREN.each do |child|
|
29
|
+
child.endpoints = [] if !child.name['LHS'] && defined?(child.endpoints)
|
30
|
+
child.configuration({}) if !child.name['LHS']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
RSpec.configure do |config|
|
35
|
+
config.before do |spec|
|
36
|
+
reset_lhc unless spec.metadata.key?(:reset_before) && spec.metadata[:reset_before] == false
|
37
|
+
reset_lhs unless spec.metadata.key?(:reset_before) && spec.metadata[:reset_before] == false
|
38
|
+
next unless spec.metadata.key?(:dummy_models) && spec.metadata[:dummy_models] == true
|
39
|
+
Dir.glob(Rails.root.join('app', 'models', '**', '*.rb')).each do |file|
|
40
|
+
load file if File.read(file).match('LHS::Record')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lhs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 15.
|
4
|
+
version: 15.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- https://github.com/local-ch/lhs/graphs/contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -178,10 +178,10 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
-
description: Rails gem providing an easy, active-record-like
|
182
|
-
services
|
181
|
+
description: 'REST services accelerator: Rails gem providing an easy, active-record-like
|
182
|
+
interface for http (hypermedia) json services'
|
183
183
|
email:
|
184
|
-
-
|
184
|
+
- web@localsearch.ch
|
185
185
|
executables: []
|
186
186
|
extensions: []
|
187
187
|
extra_rdoc_files: []
|
@@ -302,12 +302,16 @@ files:
|
|
302
302
|
- spec/dummy/app/assets/stylesheets/application.css
|
303
303
|
- spec/dummy/app/controllers/application_controller.rb
|
304
304
|
- spec/dummy/app/controllers/concerns/.keep
|
305
|
+
- spec/dummy/app/controllers/error_handling_with_chains_controller.rb
|
305
306
|
- spec/dummy/app/controllers/request_cycle_cache_controller.rb
|
306
307
|
- spec/dummy/app/helpers/application_helper.rb
|
307
308
|
- spec/dummy/app/mailers/.keep
|
308
309
|
- spec/dummy/app/models/.keep
|
309
310
|
- spec/dummy/app/models/concerns/.keep
|
311
|
+
- spec/dummy/app/models/record.rb
|
310
312
|
- spec/dummy/app/models/user.rb
|
313
|
+
- spec/dummy/app/views/error_handling_with_chains/error.html.erb
|
314
|
+
- spec/dummy/app/views/error_handling_with_chains/show.html.erb
|
311
315
|
- spec/dummy/app/views/form_for.html.erb
|
312
316
|
- spec/dummy/app/views/layouts/application.html.erb
|
313
317
|
- spec/dummy/bin/bundle
|
@@ -371,7 +375,6 @@ files:
|
|
371
375
|
- spec/record/all_spec.rb
|
372
376
|
- spec/record/build_spec.rb
|
373
377
|
- spec/record/cast_nested_data_spec.rb
|
374
|
-
- spec/record/chain_error_handling_spec.rb
|
375
378
|
- spec/record/create_spec.rb
|
376
379
|
- spec/record/creation_failed_spec.rb
|
377
380
|
- spec/record/definitions_spec.rb
|
@@ -382,6 +385,8 @@ files:
|
|
382
385
|
- spec/record/endpoint_options_spec.rb
|
383
386
|
- spec/record/endpoints_spec.rb
|
384
387
|
- spec/record/equality_spec.rb
|
388
|
+
- spec/record/error_handling_integration_spec.rb
|
389
|
+
- spec/record/error_handling_spec.rb
|
385
390
|
- spec/record/expanded_spec.rb
|
386
391
|
- spec/record/fetch_spec.rb
|
387
392
|
- spec/record/find_by_chains_spec.rb
|
@@ -426,15 +431,15 @@ files:
|
|
426
431
|
- spec/record/where_chains_spec.rb
|
427
432
|
- spec/record/where_spec.rb
|
428
433
|
- spec/record/where_values_hash_spec.rb
|
429
|
-
- spec/
|
434
|
+
- spec/request_cycle_cache_spec.rb
|
430
435
|
- spec/require_lhs_spec.rb
|
431
436
|
- spec/spec_helper.rb
|
432
|
-
- spec/support/cleanup.rb
|
433
437
|
- spec/support/fixtures/json/feedback.json
|
434
438
|
- spec/support/fixtures/json/feedbacks.json
|
435
439
|
- spec/support/fixtures/json/localina_content_ad.json
|
436
440
|
- spec/support/load_json.rb
|
437
441
|
- spec/support/request_cycle_cache.rb
|
442
|
+
- spec/support/reset.rb
|
438
443
|
- spec/views/form_for_spec.rb
|
439
444
|
homepage: https://github.com/local-ch/lhs
|
440
445
|
licenses:
|
@@ -457,10 +462,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
457
462
|
requirements:
|
458
463
|
- Ruby >= 2.3.0
|
459
464
|
rubyforge_project:
|
460
|
-
rubygems_version: 2.7.
|
465
|
+
rubygems_version: 2.7.6
|
461
466
|
signing_key:
|
462
467
|
specification_version: 4
|
463
|
-
summary: Rails gem providing an easy, active-record-like
|
468
|
+
summary: 'REST services accelerator: Rails gem providing an easy, active-record-like
|
469
|
+
interface for http (hypermedia) json services'
|
464
470
|
test_files:
|
465
471
|
- spec/autoloading_spec.rb
|
466
472
|
- spec/collection/accessors_spec.rb
|
@@ -495,12 +501,16 @@ test_files:
|
|
495
501
|
- spec/dummy/app/assets/stylesheets/application.css
|
496
502
|
- spec/dummy/app/controllers/application_controller.rb
|
497
503
|
- spec/dummy/app/controllers/concerns/.keep
|
504
|
+
- spec/dummy/app/controllers/error_handling_with_chains_controller.rb
|
498
505
|
- spec/dummy/app/controllers/request_cycle_cache_controller.rb
|
499
506
|
- spec/dummy/app/helpers/application_helper.rb
|
500
507
|
- spec/dummy/app/mailers/.keep
|
501
508
|
- spec/dummy/app/models/.keep
|
502
509
|
- spec/dummy/app/models/concerns/.keep
|
510
|
+
- spec/dummy/app/models/record.rb
|
503
511
|
- spec/dummy/app/models/user.rb
|
512
|
+
- spec/dummy/app/views/error_handling_with_chains/error.html.erb
|
513
|
+
- spec/dummy/app/views/error_handling_with_chains/show.html.erb
|
504
514
|
- spec/dummy/app/views/form_for.html.erb
|
505
515
|
- spec/dummy/app/views/layouts/application.html.erb
|
506
516
|
- spec/dummy/bin/bundle
|
@@ -564,7 +574,6 @@ test_files:
|
|
564
574
|
- spec/record/all_spec.rb
|
565
575
|
- spec/record/build_spec.rb
|
566
576
|
- spec/record/cast_nested_data_spec.rb
|
567
|
-
- spec/record/chain_error_handling_spec.rb
|
568
577
|
- spec/record/create_spec.rb
|
569
578
|
- spec/record/creation_failed_spec.rb
|
570
579
|
- spec/record/definitions_spec.rb
|
@@ -575,6 +584,8 @@ test_files:
|
|
575
584
|
- spec/record/endpoint_options_spec.rb
|
576
585
|
- spec/record/endpoints_spec.rb
|
577
586
|
- spec/record/equality_spec.rb
|
587
|
+
- spec/record/error_handling_integration_spec.rb
|
588
|
+
- spec/record/error_handling_spec.rb
|
578
589
|
- spec/record/expanded_spec.rb
|
579
590
|
- spec/record/fetch_spec.rb
|
580
591
|
- spec/record/find_by_chains_spec.rb
|
@@ -619,13 +630,13 @@ test_files:
|
|
619
630
|
- spec/record/where_chains_spec.rb
|
620
631
|
- spec/record/where_spec.rb
|
621
632
|
- spec/record/where_values_hash_spec.rb
|
622
|
-
- spec/
|
633
|
+
- spec/request_cycle_cache_spec.rb
|
623
634
|
- spec/require_lhs_spec.rb
|
624
635
|
- spec/spec_helper.rb
|
625
|
-
- spec/support/cleanup.rb
|
626
636
|
- spec/support/fixtures/json/feedback.json
|
627
637
|
- spec/support/fixtures/json/feedbacks.json
|
628
638
|
- spec/support/fixtures/json/localina_content_ad.json
|
629
639
|
- spec/support/load_json.rb
|
630
640
|
- spec/support/request_cycle_cache.rb
|
641
|
+
- spec/support/reset.rb
|
631
642
|
- spec/views/form_for_spec.rb
|