lhs 21.2.2 → 21.3.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/README.md +208 -107
- data/lhs.gemspec +1 -1
- data/lib/lhs.rb +8 -0
- data/lib/lhs/concerns/autoload_records.rb +20 -3
- data/lib/lhs/concerns/o_auth.rb +25 -0
- data/lib/lhs/concerns/record/configuration.rb +28 -11
- data/lib/lhs/concerns/record/request.rb +29 -8
- data/lib/lhs/config.rb +1 -1
- data/lib/lhs/interceptors/auto_oauth/interceptor.rb +33 -0
- data/lib/lhs/interceptors/auto_oauth/thread_registry.rb +18 -0
- data/lib/lhs/version.rb +1 -1
- data/spec/auto_oauth_spec.rb +129 -0
- data/spec/autoloading_spec.rb +35 -8
- data/spec/dummy/app/controllers/application_controller.rb +15 -0
- data/spec/dummy/app/controllers/automatic_authentication_controller.rb +22 -0
- data/spec/dummy/app/controllers/error_handling_with_chains_controller.rb +2 -2
- data/spec/dummy/app/controllers/extended_rollbar_controller.rb +2 -2
- data/spec/dummy/app/controllers/option_blocks_controller.rb +2 -2
- data/spec/dummy/app/models/dummy_customer.rb +6 -0
- data/spec/dummy/app/models/{record.rb → dummy_record.rb} +1 -1
- data/spec/dummy/app/models/dummy_record_with_multiple_oauth_providers1.rb +7 -0
- data/spec/dummy/app/models/dummy_record_with_multiple_oauth_providers2.rb +7 -0
- data/spec/dummy/app/models/dummy_record_with_multiple_providers_per_endpoint.rb +6 -0
- data/spec/dummy/app/models/dummy_record_with_oauth.rb +7 -0
- data/spec/dummy/app/models/{user.rb → dummy_user.rb} +1 -1
- data/spec/dummy/app/models/providers/customer_system.rb +7 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/option_blocks/ensure_reset_between_requests_spec.rb +2 -1
- data/spec/record/error_handling_integration_spec.rb +1 -1
- data/spec/record/includes_spec.rb +41 -0
- data/spec/request_cycle_cache_spec.rb +3 -3
- data/spec/support/reset.rb +31 -9
- metadata +29 -10
data/spec/dummy/config/routes.rb
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
Rails.application.routes.draw do
|
4
4
|
root 'application#root'
|
5
5
|
|
6
|
+
# Automatic Authentication
|
7
|
+
get 'automatic_authentication/oauth' => 'automatic_authentication#o_auth'
|
8
|
+
get 'automatic_authentication/oauth_with_multiple_providers' => 'automatic_authentication#o_auth_with_multiple_providers'
|
9
|
+
|
6
10
|
# Request Cycle Cache
|
7
11
|
get 'request_cycle_cache/simple' => 'request_cycle_cache#simple'
|
8
12
|
get 'request_cycle_cache/no_caching_interceptor' => 'request_cycle_cache#no_caching_interceptor'
|
@@ -13,7 +13,8 @@ describe 'Option Blocks', type: :request do
|
|
13
13
|
.to_return(status: 200)
|
14
14
|
end
|
15
15
|
|
16
|
-
it 'always ensures option blocks are always reset for new requests',
|
16
|
+
it 'always ensures option blocks are always reset for new requests',
|
17
|
+
dummy_models: true, reset_before: true do
|
17
18
|
get '/option_blocks/first'
|
18
19
|
expect(first_request).to have_been_made.once
|
19
20
|
get '/option_blocks/second'
|
@@ -664,6 +664,28 @@ describe LHS::Record do
|
|
664
664
|
expect(nested_request).to have_been_requested
|
665
665
|
expect(place.customer.salesforce.name).to eq 'Steve'
|
666
666
|
end
|
667
|
+
|
668
|
+
context 'included data has a configured record endpoint option' do
|
669
|
+
before do
|
670
|
+
class SalesforceCustomer < LHS::Record
|
671
|
+
endpoint 'https://salesforce/customers/{id}', headers: { 'Authorization': 'Bearer 123' }
|
672
|
+
end
|
673
|
+
end
|
674
|
+
|
675
|
+
let!(:nested_request) do
|
676
|
+
stub_request(:get, "https://salesforce/customers/1")
|
677
|
+
.with(headers: { 'Authorization' => 'Bearer 123' })
|
678
|
+
.to_return(body: {
|
679
|
+
name: 'Steve'
|
680
|
+
}.to_json)
|
681
|
+
end
|
682
|
+
|
683
|
+
it 'includes data that has been nested in an additional structure' do
|
684
|
+
place = Place.includes(customer: :salesforce).find(1)
|
685
|
+
expect(nested_request).to have_been_requested
|
686
|
+
expect(place.customer.salesforce.name).to eq 'Steve'
|
687
|
+
end
|
688
|
+
end
|
667
689
|
end
|
668
690
|
|
669
691
|
context 'include empty structures' do
|
@@ -683,4 +705,23 @@ describe LHS::Record do
|
|
683
705
|
}).not_to raise_exception
|
684
706
|
end
|
685
707
|
end
|
708
|
+
|
709
|
+
context 'include partially empty structures' do
|
710
|
+
before do
|
711
|
+
class Place < LHS::Record
|
712
|
+
endpoint 'https://places/{id}'
|
713
|
+
end
|
714
|
+
stub_request(:get, "https://places/1")
|
715
|
+
.to_return(body: {
|
716
|
+
id: '123',
|
717
|
+
customer: {}
|
718
|
+
}.to_json)
|
719
|
+
end
|
720
|
+
|
721
|
+
it 'skips includes when there is nothing and also does not raise an exception' do
|
722
|
+
expect(-> {
|
723
|
+
Place.includes(customer: :salesforce).find(1)
|
724
|
+
}).not_to raise_exception
|
725
|
+
end
|
726
|
+
end
|
686
727
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rails_helper'
|
4
|
-
require 'lhc/
|
4
|
+
require 'lhc/rspec'
|
5
5
|
|
6
6
|
describe 'Request Cycle Cache', type: :request do
|
7
7
|
let!(:request) do
|
@@ -37,7 +37,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
37
37
|
expect(lambda do
|
38
38
|
get '/request_cycle_cache/no_caching_interceptor'
|
39
39
|
end).to output(
|
40
|
-
%r{\[WARNING\] Can't enable request cycle cache as LHC::Caching interceptor is not enabled/configured \(see https://github.com/local-ch/lhc/blob/master/
|
40
|
+
%r{\[WARNING\] Can't enable request cycle cache as LHC::Caching interceptor is not enabled/configured \(see https://github.com/local-ch/lhc/blob/master/README.md#caching-interceptor\)!}
|
41
41
|
).to_stderr
|
42
42
|
expect(request).to have_been_made.times(2)
|
43
43
|
end
|
@@ -70,7 +70,7 @@ describe 'Request Cycle Cache', type: :request do
|
|
70
70
|
expect(lambda do
|
71
71
|
get '/request_cycle_cache/no_caching_interceptor'
|
72
72
|
end).not_to output(
|
73
|
-
%r{\[WARNING\] Can't enable request cycle cache as LHC::Caching interceptor is not enabled/configured \(see https://github.com/local-ch/lhc/blob/master/
|
73
|
+
%r{\[WARNING\] Can't enable request cycle cache as LHC::Caching interceptor is not enabled/configured \(see https://github.com/local-ch/lhc/blob/master/README.md#caching-interceptor\)!}
|
74
74
|
).to_stderr
|
75
75
|
expect(request).to have_been_made.times(2)
|
76
76
|
end
|
data/spec/support/reset.rb
CHANGED
@@ -12,10 +12,15 @@ end
|
|
12
12
|
|
13
13
|
class LHS::Record
|
14
14
|
|
15
|
-
|
15
|
+
DESCENDANTS = []
|
16
16
|
|
17
17
|
def self.inherited(child)
|
18
|
-
|
18
|
+
DESCENDANTS.push(child)
|
19
|
+
child.singleton_class.class_eval do
|
20
|
+
define_method(:inherited) do |grand_child|
|
21
|
+
DESCENDANTS.push(grand_child)
|
22
|
+
end
|
23
|
+
end
|
19
24
|
super
|
20
25
|
end
|
21
26
|
|
@@ -27,9 +32,28 @@ end
|
|
27
32
|
|
28
33
|
def reset_lhs
|
29
34
|
LHS::Record::Endpoints.all = {}
|
30
|
-
LHS::Record::
|
31
|
-
|
32
|
-
|
35
|
+
LHS::Record::DESCENDANTS.each do |decendant|
|
36
|
+
decendant.endpoints = [] if !decendant.name['LHS'] && defined?(decendant.endpoints)
|
37
|
+
decendant.configuration({}) if !decendant.name['LHS']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def model_files_to_reload
|
42
|
+
Dir.glob(Rails.root.join('app', 'models', '**', '*.rb'))
|
43
|
+
end
|
44
|
+
|
45
|
+
def reload_direct_inheritance
|
46
|
+
model_files_to_reload.map do |file|
|
47
|
+
next unless File.read(file).match('LHS::Record')
|
48
|
+
load file
|
49
|
+
file.split('models/').last.gsub('.rb', '').classify
|
50
|
+
end.compact
|
51
|
+
end
|
52
|
+
|
53
|
+
def reload_inheriting_records(parents)
|
54
|
+
model_files_to_reload.each do |file|
|
55
|
+
next if parents.none? { |parent| File.read(file).match(parent) }
|
56
|
+
load file
|
33
57
|
end
|
34
58
|
end
|
35
59
|
|
@@ -37,9 +61,7 @@ RSpec.configure do |config|
|
|
37
61
|
config.before do |spec|
|
38
62
|
reset_lhc unless spec.metadata.key?(:reset_before) && spec.metadata[:reset_before] == false
|
39
63
|
reset_lhs unless spec.metadata.key?(:reset_before) && spec.metadata[:reset_before] == false
|
40
|
-
next
|
41
|
-
|
42
|
-
load file if File.read(file).match('LHS::Record')
|
43
|
-
end
|
64
|
+
next if !spec.metadata.key?(:dummy_models) || spec.metadata[:dummy_models] != true
|
65
|
+
reload_inheriting_records(reload_direct_inheritance)
|
44
66
|
end
|
45
67
|
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: 21.
|
4
|
+
version: 21.3.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: 2020-
|
11
|
+
date: 2020-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -146,16 +146,16 @@ dependencies:
|
|
146
146
|
name: rollbar
|
147
147
|
requirement: !ruby/object:Gem::Requirement
|
148
148
|
requirements:
|
149
|
-
- - "
|
149
|
+
- - "<="
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
151
|
+
version: 2.24.0
|
152
152
|
type: :development
|
153
153
|
prerelease: false
|
154
154
|
version_requirements: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
|
-
- - "
|
156
|
+
- - "<="
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
158
|
+
version: 2.24.0
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: rspec-rails
|
161
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -283,6 +283,7 @@ files:
|
|
283
283
|
- lib/lhs/concerns/item/save.rb
|
284
284
|
- lib/lhs/concerns/item/update.rb
|
285
285
|
- lib/lhs/concerns/item/validation.rb
|
286
|
+
- lib/lhs/concerns/o_auth.rb
|
286
287
|
- lib/lhs/concerns/option_blocks.rb
|
287
288
|
- lib/lhs/concerns/proxy/accessors.rb
|
288
289
|
- lib/lhs/concerns/proxy/create.rb
|
@@ -314,6 +315,8 @@ files:
|
|
314
315
|
- lib/lhs/config.rb
|
315
316
|
- lib/lhs/data.rb
|
316
317
|
- lib/lhs/endpoint.rb
|
318
|
+
- lib/lhs/interceptors/auto_oauth/interceptor.rb
|
319
|
+
- lib/lhs/interceptors/auto_oauth/thread_registry.rb
|
317
320
|
- lib/lhs/interceptors/extended_rollbar/handler.rb
|
318
321
|
- lib/lhs/interceptors/extended_rollbar/interceptor.rb
|
319
322
|
- lib/lhs/interceptors/extended_rollbar/thread_registry.rb
|
@@ -340,6 +343,7 @@ files:
|
|
340
343
|
- lib/lhs/version.rb
|
341
344
|
- script/ci/build.sh
|
342
345
|
- spec/.DS_Store
|
346
|
+
- spec/auto_oauth_spec.rb
|
343
347
|
- spec/autoloading_spec.rb
|
344
348
|
- spec/collection/accessors_spec.rb
|
345
349
|
- spec/collection/collection_items_spec.rb
|
@@ -372,6 +376,7 @@ files:
|
|
372
376
|
- spec/dummy/app/assets/javascripts/application.js
|
373
377
|
- spec/dummy/app/assets/stylesheets/application.css
|
374
378
|
- spec/dummy/app/controllers/application_controller.rb
|
379
|
+
- spec/dummy/app/controllers/automatic_authentication_controller.rb
|
375
380
|
- spec/dummy/app/controllers/concerns/.keep
|
376
381
|
- spec/dummy/app/controllers/error_handling_with_chains_controller.rb
|
377
382
|
- spec/dummy/app/controllers/extended_rollbar_controller.rb
|
@@ -381,8 +386,14 @@ files:
|
|
381
386
|
- spec/dummy/app/mailers/.keep
|
382
387
|
- spec/dummy/app/models/.keep
|
383
388
|
- spec/dummy/app/models/concerns/.keep
|
384
|
-
- spec/dummy/app/models/
|
385
|
-
- spec/dummy/app/models/
|
389
|
+
- spec/dummy/app/models/dummy_customer.rb
|
390
|
+
- spec/dummy/app/models/dummy_record.rb
|
391
|
+
- spec/dummy/app/models/dummy_record_with_multiple_oauth_providers1.rb
|
392
|
+
- spec/dummy/app/models/dummy_record_with_multiple_oauth_providers2.rb
|
393
|
+
- spec/dummy/app/models/dummy_record_with_multiple_providers_per_endpoint.rb
|
394
|
+
- spec/dummy/app/models/dummy_record_with_oauth.rb
|
395
|
+
- spec/dummy/app/models/dummy_user.rb
|
396
|
+
- spec/dummy/app/models/providers/customer_system.rb
|
386
397
|
- spec/dummy/app/views/error_handling_with_chains/error.html.erb
|
387
398
|
- spec/dummy/app/views/error_handling_with_chains/show.html.erb
|
388
399
|
- spec/dummy/app/views/form_for.html.erb
|
@@ -557,6 +568,7 @@ specification_version: 4
|
|
557
568
|
summary: 'REST services accelerator: Rails gem providing an easy, active-record-like
|
558
569
|
interface for http (hypermedia) json services'
|
559
570
|
test_files:
|
571
|
+
- spec/auto_oauth_spec.rb
|
560
572
|
- spec/autoloading_spec.rb
|
561
573
|
- spec/collection/accessors_spec.rb
|
562
574
|
- spec/collection/collection_items_spec.rb
|
@@ -589,6 +601,7 @@ test_files:
|
|
589
601
|
- spec/dummy/app/assets/javascripts/application.js
|
590
602
|
- spec/dummy/app/assets/stylesheets/application.css
|
591
603
|
- spec/dummy/app/controllers/application_controller.rb
|
604
|
+
- spec/dummy/app/controllers/automatic_authentication_controller.rb
|
592
605
|
- spec/dummy/app/controllers/concerns/.keep
|
593
606
|
- spec/dummy/app/controllers/error_handling_with_chains_controller.rb
|
594
607
|
- spec/dummy/app/controllers/extended_rollbar_controller.rb
|
@@ -598,8 +611,14 @@ test_files:
|
|
598
611
|
- spec/dummy/app/mailers/.keep
|
599
612
|
- spec/dummy/app/models/.keep
|
600
613
|
- spec/dummy/app/models/concerns/.keep
|
601
|
-
- spec/dummy/app/models/
|
602
|
-
- spec/dummy/app/models/
|
614
|
+
- spec/dummy/app/models/dummy_customer.rb
|
615
|
+
- spec/dummy/app/models/dummy_record.rb
|
616
|
+
- spec/dummy/app/models/dummy_record_with_multiple_oauth_providers1.rb
|
617
|
+
- spec/dummy/app/models/dummy_record_with_multiple_oauth_providers2.rb
|
618
|
+
- spec/dummy/app/models/dummy_record_with_multiple_providers_per_endpoint.rb
|
619
|
+
- spec/dummy/app/models/dummy_record_with_oauth.rb
|
620
|
+
- spec/dummy/app/models/dummy_user.rb
|
621
|
+
- spec/dummy/app/models/providers/customer_system.rb
|
603
622
|
- spec/dummy/app/views/error_handling_with_chains/error.html.erb
|
604
623
|
- spec/dummy/app/views/error_handling_with_chains/show.html.erb
|
605
624
|
- spec/dummy/app/views/form_for.html.erb
|