lhs 11.0.0 → 11.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|