lhs 19.7.0 → 19.8.0

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
  SHA256:
3
- metadata.gz: 267b853caadad4c6709bd01b799f4679fcc0a7efda0d9aba1241a2ec52948628
4
- data.tar.gz: b627506faa83289f4b13b714fd459207ed81706236148a8dd98cca263f118e8e
3
+ metadata.gz: a6e339382991cfdddacfa4fe2c8e63b3fe03e6a25f897d7d2d0d87cdc3ebd28f
4
+ data.tar.gz: 65ecc97eac88e673a47bca919d7573c874806a13cb487a787100afffccf71ec9
5
5
  SHA512:
6
- metadata.gz: 80341435042e936ecc1d6cb3e80ab240836c5a4f885c75c0519823b697aa852c5c82ac9d355cd05a49964b8748926b70a4c0c159c2b978cac8917e77343b4dcd
7
- data.tar.gz: c667486950b86fb685e9b58ac224d7125d448e92ba61a8341b53325089831773e2331c8d3a7ca45224fe4d2ec5c2b3a79581416b9eb26bcedc7f10cca7f56c99
6
+ metadata.gz: 407bc810256e1503ab507385ef10e5711c47935ca7f2d070da8c5298c889a198bbd86401bd0206d3c3bef9c9ba4ad76d66654bce8e451a5ad278361488bba39b
7
+ data.tar.gz: 35d7f32e5eb28a95071b63d26d2c6211b37ea1354d90fb2c9e740fe93856e723ccaacddc5982f9663515261eac712454cf1443fef24b53ee660f82a75689198a
data/README.md CHANGED
@@ -46,6 +46,7 @@ record.review # "Lunch was great
46
46
  * [Endpoints](#endpoints)
47
47
  * [Configure endpoint hosts](#configure-endpoint-hosts)
48
48
  * [Endpoint Priorities](#endpoint-priorities)
49
+ * [Provider](#provider)
49
50
  * [Record inheritance](#record-inheritance)
50
51
  * [Find multiple records](#find-multiple-records)
51
52
  * [fetch](#fetch)
@@ -260,6 +261,44 @@ GET https://service.example.com/records
260
261
 
261
262
  **Be aware that, if you configure ambigious endpoints accross multiple classes, the order of things is not deteministic. Ambigious endpoints accross multiple classes need to be avoided.**
262
263
 
264
+ ### Provider
265
+
266
+ Providers in LHS allow you to group shared endpoint options under a common provider.
267
+
268
+ ```ruby
269
+ # app/models/provider/base_record.rb
270
+
271
+ module Provider
272
+ class BaseRecord < LHS::Record
273
+ provider params: { api_key: 123 }
274
+ end
275
+ end
276
+ ```
277
+
278
+ Now every record, part of that particular provider can inherit the provider's `BaseRecord`.
279
+
280
+ ```ruby
281
+ # app/models/provider/account.rb
282
+
283
+ module Provider
284
+ class Account < BaseRecord
285
+ endpoint '{+host}/records'
286
+ endpoint '{+host}/records/{id}'
287
+ end
288
+ end
289
+ ```
290
+
291
+ ```ruby
292
+ # app/controllers/some_controller.rb
293
+
294
+ Provider::Account.find(1)
295
+ ```
296
+ ```
297
+ GET https://provider/records/1?api_key=123
298
+ ```
299
+
300
+ And requests made via those provider records apply the common provider options.
301
+
263
302
  ### Record inheritance
264
303
 
265
304
  You can inherit from previously defined records and also inherit endpoints that way:
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+
6
+ class LHS::Record
7
+
8
+ # A provider can define options used for that specific provider
9
+ module Provider
10
+ extend ActiveSupport::Concern
11
+
12
+ included do
13
+ class_attribute :provider_options unless defined? provider_options
14
+ self.provider_options = nil
15
+ end
16
+
17
+ module ClassMethods
18
+ def provider(options = nil)
19
+ self.provider_options = options
20
+ end
21
+ end
22
+ end
23
+ end
@@ -495,7 +495,9 @@ class LHS::Record
495
495
  options[:ignored_errors] = ignored_errors if ignored_errors.present?
496
496
  options[:params]&.deep_symbolize_keys!
497
497
  options[:error_handler] = merge_error_handlers(options[:error_handler]) if options[:error_handler]
498
- options = (endpoint.options || {}).deep_merge(options)
498
+ options = (provider_options || {})
499
+ .deep_merge(endpoint.options || {})
500
+ .deep_merge(options)
499
501
  options[:url] = compute_url!(options[:params]) unless options.key?(:url)
500
502
  merge_explicit_params!(options[:params])
501
503
  options.delete(:params) if options[:params]&.empty?
@@ -33,6 +33,8 @@ class LHS::Record
33
33
  'lhs/concerns/record/model'
34
34
  autoload :Pagination,
35
35
  'lhs/concerns/record/pagination'
36
+ autoload :Provider,
37
+ 'lhs/concerns/record/provider'
36
38
  autoload :Request,
37
39
  'lhs/concerns/record/request'
38
40
  autoload :Relations,
@@ -69,6 +71,7 @@ class LHS::Record
69
71
  include Merge
70
72
  include Model
71
73
  include Pagination
74
+ include Provider
72
75
  include Request
73
76
  include Relations
74
77
  include RequestCycleCache
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LHS
4
- VERSION = '19.7.0'
4
+ VERSION = '19.8.0'
5
5
  end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ describe LHS::Record do
6
+ context 'provider' do
7
+
8
+ before do
9
+ module Provider
10
+ class BaseRecord < LHS::Record
11
+ provider params: { api_key: 123 }
12
+ end
13
+
14
+ class Record < Provider::BaseRecord
15
+ endpoint 'http://provider/records'
16
+ end
17
+ end
18
+
19
+ class AnotherRecord < LHS::Record
20
+ endpoint 'http://other_provider/records'
21
+ end
22
+
23
+ stub_request(:get, "http://provider/records?id=1&api_key=123")
24
+ .to_return(body: { name: 'Steve' }.to_json)
25
+
26
+ stub_request(:get, "http://other_provider/records?id=1")
27
+ .to_return(body: { name: 'Not Steve' }.to_json)
28
+ end
29
+
30
+ it 'applies provider options when making requests to that provider' do
31
+ record = Provider::Record.find(1)
32
+ expect(record.name).to eq 'Steve'
33
+ end
34
+
35
+ it 'does not apply provider options when making requests to other records' do
36
+ Provider::Record.find(1)
37
+ record = AnotherRecord.find(1)
38
+ expect(record.name).to eq 'Not Steve'
39
+ end
40
+ end
41
+ 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: 19.7.0
4
+ version: 19.8.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: 2019-07-18 00:00:00.000000000 Z
11
+ date: 2019-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -257,6 +257,7 @@ files:
257
257
  - lib/lhs/concerns/record/merge.rb
258
258
  - lib/lhs/concerns/record/model.rb
259
259
  - lib/lhs/concerns/record/pagination.rb
260
+ - lib/lhs/concerns/record/provider.rb
260
261
  - lib/lhs/concerns/record/relations.rb
261
262
  - lib/lhs/concerns/record/request.rb
262
263
  - lib/lhs/concerns/record/request_cycle_cache/interceptor.rb
@@ -445,6 +446,7 @@ files:
445
446
  - spec/record/pagination_links_spec.rb
446
447
  - spec/record/pagination_spec.rb
447
448
  - spec/record/persisted_spec.rb
449
+ - spec/record/provider_spec.rb
448
450
  - spec/record/references_spec.rb
449
451
  - spec/record/relation_caching_spec.rb
450
452
  - spec/record/reload_by_id_spec.rb
@@ -656,6 +658,7 @@ test_files:
656
658
  - spec/record/pagination_links_spec.rb
657
659
  - spec/record/pagination_spec.rb
658
660
  - spec/record/persisted_spec.rb
661
+ - spec/record/provider_spec.rb
659
662
  - spec/record/references_spec.rb
660
663
  - spec/record/relation_caching_spec.rb
661
664
  - spec/record/reload_by_id_spec.rb