lhs 19.0.2 → 19.1.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: c6b7b500cba025714dd25acd5768e165e52a9a3a5310c4aee5a76e649edbadf6
4
- data.tar.gz: d6460304be65c24f414e71c8a58bcf127cc7a79ad6a6fb3854c50dc177c0f835
3
+ metadata.gz: fce80cb737ee0b8d0cedfb8d5ff785baf20e468fcb875dcaab3a241861df1253
4
+ data.tar.gz: 7bd2a65ea111864756de1b9d74063db7865026f47e702a6ba005fa8dead64c3e
5
5
  SHA512:
6
- metadata.gz: f6777297192f3a1daefd322c76681a9402bef7893f67c9520e4db7b67357d67065a580f34069b85f13f971738c7a174e9be97f54641fe2254bdec07939f4dd60
7
- data.tar.gz: 46d307a8ad2c62f749c30552c2785db48d44dcb87612150eb25b312129320561f782041fc9139ed9ecc4abcfc8336bf91693f207b958a8c76b386d1f3b371f3d
6
+ metadata.gz: 80bda8a5f669ea96f3a4922a0a0efb69f456b68431cf844fed26392fbc5b8eb0cbab68cc69972226558c05a138290dd226c6c606342685c56d0f1d417481dcb1
7
+ data.tar.gz: 66bded778c0ad0ad02e71f6a81daa06ed28c640ff94064496d1dea8129200473ce11e658b9c4bcbf462ec5ea2ec5e3d4c4d11e3228218115888b79c4e20b9d19
data/README.md CHANGED
@@ -45,7 +45,7 @@ record.review # "Lunch was great
45
45
  * [Record](#record)
46
46
  * [Endpoints](#endpoints)
47
47
  * [Configure endpoint hosts](#configure-endpoint-hosts)
48
- * [Ambiguous endpoints](#ambiguous-endpoints)
48
+ * [Endpoint priorities](#endpoint-priorities)
49
49
  * [Record inheritance](#record-inheritance)
50
50
  * [Find multiple records](#find-multiple-records)
51
51
  * [fetch](#fetch)
@@ -228,9 +228,11 @@ class Record < LHS::Record
228
228
  end
229
229
  ```
230
230
 
231
- #### Ambiguous endpoints
231
+ #### Endpoint Priorities
232
232
 
233
- If you try to setup a Record with ambiguous endpoints, LHS will immediately raise an exception:
233
+ LHS uses endpoint configurations to determine what endpoint to use when data is requested, in a similiar way, routes are identified in Rails to map requests to controllers.
234
+
235
+ If they are ambiguous, LHS will always use the first one found:
234
236
 
235
237
  ```ruby
236
238
  # app/models/record.rb
@@ -241,9 +243,18 @@ class Record < LHS::Record
241
243
  endpoint '{+service}/bananas'
242
244
 
243
245
  end
246
+ ```
247
+
248
+ ```ruby
249
+ # app/controllers/some_controller.rb
244
250
 
245
- # raises: Ambiguous endpoints
251
+ Record.fetch
252
+ ```
246
253
  ```
254
+ GET https://service.example.com/records
255
+ ```
256
+
257
+ **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.**
247
258
 
248
259
  ### Record inheritance
249
260
 
@@ -25,7 +25,6 @@ class LHS::Record
25
25
  self.endpoints = endpoints.clone
26
26
  validates_deprecation_check!(options)
27
27
  endpoint = LHC::Endpoint.new(url, options)
28
- sanity_check(endpoint)
29
28
  endpoints.push(endpoint)
30
29
  LHS::Record::Endpoints.all ||= {}
31
30
  LHS::Record::Endpoints.all[url] = self
@@ -50,16 +49,6 @@ class LHS::Record
50
49
  endpoint
51
50
  end
52
51
 
53
- # Prevent ambiguous endpoints
54
- def sanity_check(new_endpoint)
55
- endpoints.each do |existing_endpoint|
56
- invalid = existing_endpoint.placeholders.sort == new_endpoint.placeholders.sort &&
57
- existing_endpoint.url != new_endpoint.url
58
- next unless invalid
59
- raise "Ambiguous endpoints! Cannot differentiate between #{existing_endpoint.url} and #{new_endpoint.url}"
60
- end
61
- end
62
-
63
52
  # Computes the url from params
64
53
  # by identifiying endpoint and compiles it if necessary.
65
54
  def compute_url!(params)
@@ -112,7 +101,6 @@ class LHS::Record
112
101
  endpoint.placeholders.length
113
102
  end
114
103
  bases = endpoints[endpoints.keys.min]
115
- raise 'Multiple base endpoints found' if bases.count > 1
116
104
  bases.first
117
105
  end
118
106
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LHS
4
- VERSION = '19.0.2'
4
+ VERSION = '19.1.0'
5
5
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ describe LHS::Record do
6
+
7
+ context 'endpoint priorities' do
8
+
9
+ before do
10
+ class Record < LHS::Record
11
+ endpoint 'https://api/v2/feedbacks'
12
+ endpoint 'https://api/v2/reviews'
13
+ endpoint 'https://api/v2/streets/{id}'
14
+ endpoint 'https://api/v2/feedbacks/{id}'
15
+ endpoint 'https://api/v2/reviews/{id}'
16
+ end
17
+ end
18
+
19
+ it 'always takes the first endpoint found' do
20
+ stub_request(:get, "https://api/v2/feedbacks").to_return(status: 200)
21
+ Record.fetch
22
+ stub_request(:get, "https://api/v2/streets/1").to_return(status: 200)
23
+ Record.find(1)
24
+ end
25
+ end
26
+ 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.0.2
4
+ version: 19.1.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-04-03 00:00:00.000000000 Z
11
+ date: 2019-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -391,8 +391,8 @@ files:
391
391
  - spec/record/dig_configuration_spec.rb
392
392
  - spec/record/dup_spec.rb
393
393
  - spec/record/endpoint_inheritance_spec.rb
394
- - spec/record/endpoint_misconfiguration_spec.rb
395
394
  - spec/record/endpoint_options_spec.rb
395
+ - spec/record/endpoint_priorities_spec.rb
396
396
  - spec/record/endpoints_spec.rb
397
397
  - spec/record/equality_spec.rb
398
398
  - spec/record/error_handling_integration_spec.rb
@@ -472,7 +472,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
472
472
  version: '0'
473
473
  requirements:
474
474
  - Ruby >= 2.3.0
475
- rubygems_version: 3.0.2
475
+ rubyforge_project:
476
+ rubygems_version: 2.7.8
476
477
  signing_key:
477
478
  specification_version: 4
478
479
  summary: 'REST services accelerator: Rails gem providing an easy, active-record-like
@@ -591,8 +592,8 @@ test_files:
591
592
  - spec/record/dig_configuration_spec.rb
592
593
  - spec/record/dup_spec.rb
593
594
  - spec/record/endpoint_inheritance_spec.rb
594
- - spec/record/endpoint_misconfiguration_spec.rb
595
595
  - spec/record/endpoint_options_spec.rb
596
+ - spec/record/endpoint_priorities_spec.rb
596
597
  - spec/record/endpoints_spec.rb
597
598
  - spec/record/equality_spec.rb
598
599
  - spec/record/error_handling_integration_spec.rb
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- describe LHS::Record do
6
- context 'misconfiguration of endpoints' do
7
- it 'fails trying to add ambiguous endpoints' do
8
- expect(
9
- lambda {
10
- class Record < LHS::Record
11
- endpoint '{+datastore}/v2/feedbacks'
12
- endpoint '{+datastore}/v2/reviews'
13
- end
14
- }
15
- ).to raise_error(/Ambiguous endpoints/)
16
-
17
- expect(
18
- lambda {
19
- class Record < LHS::Record
20
- endpoint '{+datastore}/v2/{campaign_id}/feedbacks'
21
- endpoint '{+datastore}/v2/{campaign_id}/reviews'
22
- end
23
- }
24
- ).to raise_error(/Ambiguous endpoints/)
25
- end
26
- end
27
- end