lhs 11.0.0 → 11.0.1
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/lib/lhs/concerns/record/model.rb +1 -1
- data/lib/lhs/concerns/record/request.rb +10 -9
- data/lib/lhs/version.rb +1 -1
- data/spec/record/includes_spec.rb +43 -3
- data/spec/record/persisted_spec.rb +13 -3
- data/spec/record/request_spec.rb +67 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b33b5484ee3a16c6d834c1520bb907c5c84cc3e
|
4
|
+
data.tar.gz: 4f179bf4a46b0e109bcd079353186e61ec08c5d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56558afe98484a87c27bd99d379172f6166ba9d27c32662f35e0d88cb1d010223858a60fac2ae3714d6860ee24f03c665f0388a53878193874d4120939d66b70
|
7
|
+
data.tar.gz: ce2b1ba748bd7feb39858457d36dd8e3a8f6c3dcc9db11d156279e599f83e082315e8a008127e8b7285ea393c0e8a1029271e917e77f295cae85cdc56d539fb9
|
@@ -125,13 +125,13 @@ class LHS::Record
|
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
|
-
def handle_include(included, data, sub_includes = nil,
|
128
|
+
def handle_include(included, data, sub_includes = nil, reference = nil)
|
129
129
|
return if data.blank? || skip_loading_includes?(data, included)
|
130
130
|
options = options_for_data(data, included)
|
131
|
-
options =
|
132
|
-
addition = load_include(options, data, sub_includes,
|
131
|
+
options = extend_with_reference(options, reference)
|
132
|
+
addition = load_include(options, data, sub_includes, reference)
|
133
133
|
extend_raw_data!(data, addition, included)
|
134
|
-
expand_addition!(data, included) if no_expanded_data?(addition)
|
134
|
+
expand_addition!(data, included, options) if no_expanded_data?(addition)
|
135
135
|
end
|
136
136
|
|
137
137
|
def options_for_data(data, included = nil)
|
@@ -140,9 +140,10 @@ class LHS::Record
|
|
140
140
|
url_option_for(data, included)
|
141
141
|
end
|
142
142
|
|
143
|
-
def expand_addition!(data, included)
|
143
|
+
def expand_addition!(data, included, reference)
|
144
144
|
addition = data[included]
|
145
145
|
options = options_for_data(addition)
|
146
|
+
options = extend_with_reference(options, reference.except(:url))
|
146
147
|
record = record_for_options(options) || self
|
147
148
|
options = convert_options_to_endpoints(options) if record_for_options(options)
|
148
149
|
expanded_data = begin
|
@@ -163,13 +164,13 @@ class LHS::Record
|
|
163
164
|
end
|
164
165
|
|
165
166
|
# Extends request options with options provided for this reference
|
166
|
-
def
|
167
|
-
return options unless
|
167
|
+
def extend_with_reference(options, reference)
|
168
|
+
return options unless reference
|
168
169
|
options ||= {}
|
169
170
|
if options.is_a?(Array)
|
170
|
-
options.map { |request_options| request_options.merge(
|
171
|
+
options.map { |request_options| request_options.merge(reference) if request_options.present? }
|
171
172
|
elsif options.present?
|
172
|
-
options.merge(
|
173
|
+
options.merge(reference)
|
173
174
|
end
|
174
175
|
end
|
175
176
|
|
data/lib/lhs/version.rb
CHANGED
@@ -334,32 +334,72 @@ describe LHS::Record do
|
|
334
334
|
end
|
335
335
|
|
336
336
|
context 'unexpanded response when requesting the included collection' do
|
337
|
-
|
337
|
+
before(:each) do
|
338
338
|
class Customer < LHS::Record
|
339
339
|
endpoint ':datastore/customer/:id'
|
340
340
|
end
|
341
|
+
end
|
341
342
|
|
343
|
+
let!(:customer_request) do
|
342
344
|
stub_request(:get, "#{datastore}/customer/1")
|
343
345
|
.to_return(body: {
|
344
346
|
places: {
|
345
347
|
href: "#{datastore}/places"
|
346
348
|
}
|
347
349
|
}.to_json)
|
350
|
+
end
|
348
351
|
|
352
|
+
let!(:places_request) do
|
349
353
|
stub_request(:get, "#{datastore}/places")
|
350
354
|
.to_return(body: {
|
351
355
|
items: [{ href: "#{datastore}/places/1" }]
|
352
356
|
}.to_json)
|
357
|
+
end
|
353
358
|
|
354
|
-
|
359
|
+
let!(:place_request) do
|
360
|
+
stub_request(:get, "#{datastore}/places/1")
|
355
361
|
.to_return(body: {
|
356
362
|
name: 'Casa Ferlin'
|
357
363
|
}.to_json)
|
364
|
+
end
|
358
365
|
|
366
|
+
it 'loads the collection and the single items, if not already expanded' do
|
359
367
|
place = Customer.includes(:places).find(1).places.first
|
360
|
-
assert_requested(
|
368
|
+
assert_requested(place_request)
|
361
369
|
expect(place.name).to eq 'Casa Ferlin'
|
362
370
|
end
|
371
|
+
|
372
|
+
context 'forwarding options' do
|
373
|
+
let!(:places_request) do
|
374
|
+
stub_request(:get, "#{datastore}/places")
|
375
|
+
.with(headers: { 'Authorization' => 'Bearer 123' })
|
376
|
+
.to_return(
|
377
|
+
body: {
|
378
|
+
items: [{ href: "#{datastore}/places/1" }]
|
379
|
+
}.to_json
|
380
|
+
)
|
381
|
+
end
|
382
|
+
|
383
|
+
let!(:place_request) do
|
384
|
+
stub_request(:get, "#{datastore}/places/1")
|
385
|
+
.with(headers: { 'Authorization' => 'Bearer 123' })
|
386
|
+
.to_return(
|
387
|
+
body: {
|
388
|
+
name: 'Casa Ferlin'
|
389
|
+
}.to_json
|
390
|
+
)
|
391
|
+
end
|
392
|
+
|
393
|
+
it 'forwards options used to expand those unexpanded items' do
|
394
|
+
place = Customer
|
395
|
+
.includes(:places)
|
396
|
+
.references(places: { headers: { 'Authorization' => 'Bearer 123' } })
|
397
|
+
.find(1)
|
398
|
+
.places.first
|
399
|
+
assert_requested(place_request)
|
400
|
+
expect(place.name).to eq 'Casa Ferlin'
|
401
|
+
end
|
402
|
+
end
|
363
403
|
end
|
364
404
|
|
365
405
|
context 'includes with options' do
|
@@ -12,10 +12,20 @@ describe LHS::Record do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
context 'for new record' do
|
15
|
-
|
15
|
+
context 'with a nil href' do
|
16
|
+
subject { Feedback.new }
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
it 'is false' do
|
19
|
+
expect(subject.persisted?).to be(false)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with an empty href' do
|
24
|
+
subject { Feedback.new(href: '') }
|
25
|
+
|
26
|
+
it 'is false' do
|
27
|
+
expect(subject.persisted?).to be(false)
|
28
|
+
end
|
19
29
|
end
|
20
30
|
end
|
21
31
|
|
data/spec/record/request_spec.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
3
|
describe LHS::Record do
|
4
|
+
before(:each) do
|
5
|
+
class Record < LHS::Record
|
6
|
+
endpoint 'http://datastore/feedbacks/:id'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
context 'url pattern' do
|
5
11
|
let(:datastore) { 'http://local.ch/v2' }
|
6
12
|
|
@@ -18,4 +24,65 @@ describe LHS::Record do
|
|
18
24
|
assert_requested(request)
|
19
25
|
end
|
20
26
|
end
|
27
|
+
|
28
|
+
context '#convert_options_to_endpoint' do
|
29
|
+
before(:each) do
|
30
|
+
class Record < LHS::Record
|
31
|
+
endpoint 'http://datastore/feedbacks/:id', params: { tracking: 123 }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'identifies endpoint by given url and merges back endpoint template parameters' do
|
36
|
+
options = LHS::Record.send(:convert_options_to_endpoints, url: 'http://datastore/feedbacks/1')
|
37
|
+
expect(options[:params][:id]).to eq '1'
|
38
|
+
expect(options[:url]).to eq 'http://datastore/feedbacks/:id'
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'identifies endpoint by given url and merges back endpoint template parameters into an array, if array was given' do
|
42
|
+
options = LHS::Record.send(:convert_options_to_endpoints, [{ url: 'http://datastore/feedbacks/1' }])
|
43
|
+
expect(options[0][:params][:id]).to eq '1'
|
44
|
+
expect(options[0][:url]).to eq 'http://datastore/feedbacks/:id'
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returnes nil if endpoint was not found for the given url' do
|
48
|
+
options = LHS::Record.send(:convert_options_to_endpoints, url: 'http://datastore/reviews/1')
|
49
|
+
expect(options).to eq nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context '#extend_with_reference' do
|
54
|
+
it 'extends given options with the one for the refernce' do
|
55
|
+
options = LHS::Record.send(:extend_with_reference, { url: 'http://datastore/feedbacks/1' }, { auth: { bearer: '123' } })
|
56
|
+
expect(options[:auth][:bearer]).to eq '123'
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'extends given list of options with the one for the refernce' do
|
60
|
+
options = LHS::Record.send(:extend_with_reference, [{ url: 'http://datastore/feedbacks/1' }], auth: { bearer: '123' })
|
61
|
+
expect(options[0][:auth][:bearer]).to eq '123'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context '#options_for_data' do
|
66
|
+
it 'extract request options from raw data' do
|
67
|
+
options = LHS::Record.send(:url_option_for, LHS::Data.new({ href: 'http://datastore/feedbacks/1' }, nil, Record))
|
68
|
+
expect(options[:url]).to eq 'http://datastore/feedbacks/1'
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'extract a list of request options from raw data if data is a collection' do
|
72
|
+
options = LHS::Record.send(:url_option_for, LHS::Data.new({ items: [{ href: 'http://datastore/feedbacks/1' }] }, nil, Record))
|
73
|
+
expect(options[0][:url]).to eq 'http://datastore/feedbacks/1'
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'extract request options from raw nested data' do
|
77
|
+
options = LHS::Record.send(:url_option_for, LHS::Data.new({ reviews: { href: 'http://datastore/reviews/1' } }, nil, Record), :reviews)
|
78
|
+
expect(options[:url]).to eq 'http://datastore/reviews/1'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context '#record_for_options' do
|
83
|
+
it 'identifies lhs record from given options, as all request have to be done through LHS Records' do
|
84
|
+
record = LHS::Record.send(:record_for_options, url: 'http://datastore/feedbacks/1')
|
85
|
+
expect(record).to eq Record
|
86
|
+
end
|
87
|
+
end
|
21
88
|
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: 11.0.
|
4
|
+
version: 11.0.1
|
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: 2017-
|
11
|
+
date: 2017-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lhc
|