lhs 2.0.3 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/services.md +14 -1
- data/lib/lhs/concerns/service/includes.rb +2 -2
- data/lib/lhs/concerns/service/request.rb +4 -2
- data/lib/lhs/version.rb +1 -1
- data/spec/service/includes_spec.rb +45 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 583ea8a5785e4d78e732150986bcb5a05f5f8397
|
4
|
+
data.tar.gz: a488798e7c906e0806d8d0d78ea3e4b5be8c87e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0251caac24d2fd88395ac78af1a0e044b6f887f3750ff84fe1ccc9aa43ca42bf4dd80cbc11c450a793b9ee902bfdc621b7e3dba84fc938de38495c24de37282
|
7
|
+
data.tar.gz: d7ca3bcc747f89051c5ad59294dc8046b5a2553ad50a6243110ecebf44d9e65ddb551a5a782da5025cda4cd16fec520a0258c0b70da82d07261e81b65361546c
|
data/docs/services.md
CHANGED
@@ -183,6 +183,19 @@ and you should read it to understand this feature in all its glory.
|
|
183
183
|
feedbacks.first.campaign.entry.name # 'Casa Ferlin'
|
184
184
|
```
|
185
185
|
|
186
|
+
### Multiple `includes`
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
# list of includes
|
190
|
+
claims = Claims.includes(:localch_account, :entry).where(place_id: 'huU90mB_6vAfUdVz_uDoyA')
|
191
|
+
|
192
|
+
# array of includes
|
193
|
+
claims = Claims.includes([:localch_account, :entry]).where(place_id: 'huU90mB_6vAfUdVz_uDoyA')
|
194
|
+
|
195
|
+
# Two-level with array of includes
|
196
|
+
feedbacks = Feedback.includes(campaign: [:entry, :user]).where(has_reviews: true)
|
197
|
+
```
|
198
|
+
|
186
199
|
### Known services are used to request linked resources
|
187
200
|
|
188
201
|
When including linked resources with `includes`, known/defined services and endpoints are used to make those requests.
|
@@ -244,4 +257,4 @@ favorite.place.name # local.ch AG
|
|
244
257
|
|
245
258
|
## Validation
|
246
259
|
|
247
|
-
See: [Item Validation](../item.md).
|
260
|
+
See: [Item Validation](../item.md).
|
@@ -9,11 +9,11 @@ class LHS::Service
|
|
9
9
|
|
10
10
|
module ClassMethods
|
11
11
|
|
12
|
-
def includes(args)
|
12
|
+
def includes(*args)
|
13
13
|
class_clone = clone
|
14
14
|
class_clone.instance.endpoints = instance.endpoints
|
15
15
|
class_clone.instance.mapping = instance.mapping
|
16
|
-
class_clone.instance.includes = args
|
16
|
+
class_clone.instance.includes = args.size == 1 ? args[0] : args
|
17
17
|
class_clone
|
18
18
|
end
|
19
19
|
end
|
@@ -48,6 +48,8 @@ class LHS::Service
|
|
48
48
|
def handle_includes(data)
|
49
49
|
if includes.is_a? Hash
|
50
50
|
includes.keys.each { |key| handle_include(data, key) }
|
51
|
+
elsif includes.is_a? Array
|
52
|
+
includes.each { |key| handle_include(data, key) }
|
51
53
|
else
|
52
54
|
handle_include(data, includes)
|
53
55
|
end
|
@@ -60,12 +62,12 @@ class LHS::Service
|
|
60
62
|
else
|
61
63
|
url_option_for(data, key)
|
62
64
|
end
|
63
|
-
addition =
|
65
|
+
addition = load_include(includes, options, key, data)
|
64
66
|
extend(data, addition, key)
|
65
67
|
end
|
66
68
|
|
67
69
|
# Load additional resources that are requested with include
|
68
|
-
def
|
70
|
+
def load_include(includes, options, key, data)
|
69
71
|
service = service_for_options(options) || self
|
70
72
|
options = convert_options_to_endpoints(options) if service_for_options(options)
|
71
73
|
further_keys = includes.fetch(key, nil) if includes.is_a? Hash
|
data/lib/lhs/version.rb
CHANGED
@@ -9,7 +9,8 @@ describe LHS::Service do
|
|
9
9
|
stub_request(:get, "#{datastore}/content-ads/51dfc5690cf271c375c5a12d")
|
10
10
|
.to_return(body: {
|
11
11
|
'href' => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d",
|
12
|
-
'entry' => { 'href' => "#{datastore}/local-entries/lakj35asdflkj1203va" }
|
12
|
+
'entry' => { 'href' => "#{datastore}/local-entries/lakj35asdflkj1203va" },
|
13
|
+
'user' => { 'href' => "#{datastore}/users/lakj35asdflkj1203va" }
|
13
14
|
}.to_json)
|
14
15
|
end
|
15
16
|
|
@@ -18,26 +19,52 @@ describe LHS::Service do
|
|
18
19
|
.to_return(body: { 'name' => 'Casa Ferlin' }.to_json)
|
19
20
|
end
|
20
21
|
|
22
|
+
let(:stub_user_request) do
|
23
|
+
stub_request(:get, "#{datastore}/users/lakj35asdflkj1203va")
|
24
|
+
.to_return(body: { 'name' => 'Mario' }.to_json)
|
25
|
+
end
|
26
|
+
|
21
27
|
context 'singlelevel includes' do
|
22
28
|
before(:each) do
|
23
|
-
|
29
|
+
class LocalEntry < LHS::Service
|
24
30
|
endpoint ':datastore/local-entries'
|
25
31
|
endpoint ':datastore/local-entries/:id'
|
26
32
|
end
|
33
|
+
class User < LHS::Service
|
34
|
+
endpoint ':datastore/users'
|
35
|
+
endpoint ':datastore/users/:id'
|
36
|
+
end
|
27
37
|
class Favorite < LHS::Service
|
28
38
|
endpoint ':datastore/favorites'
|
29
39
|
endpoint ':datastore/favorites/:id'
|
30
40
|
end
|
31
41
|
stub_request(:get, "#{datastore}/local-entries/1")
|
32
42
|
.to_return(body: {company_name: 'local.ch'}.to_json)
|
43
|
+
stub_request(:get, "#{datastore}/users/1")
|
44
|
+
.to_return(body: {name: 'Mario'}.to_json)
|
33
45
|
stub_request(:get, "#{datastore}/favorites/1")
|
34
|
-
.to_return(body: {
|
46
|
+
.to_return(body: {
|
47
|
+
local_entry: {href: "#{datastore}/local-entries/1"},
|
48
|
+
user: {href: "#{datastore}/users/1"}
|
49
|
+
}.to_json)
|
35
50
|
end
|
36
51
|
|
37
|
-
it '
|
52
|
+
it 'includes a resource' do
|
38
53
|
favorite = Favorite.includes(:local_entry).find(1)
|
39
54
|
expect(favorite.local_entry.company_name).to eq 'local.ch'
|
40
55
|
end
|
56
|
+
|
57
|
+
it 'includes a list of resources' do
|
58
|
+
favorite = Favorite.includes(:local_entry, :user).find(1)
|
59
|
+
expect(favorite.local_entry.company_name).to eq 'local.ch'
|
60
|
+
expect(favorite.user.name).to eq 'Mario'
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'includes an array of resources' do
|
64
|
+
favorite = Favorite.includes([:local_entry, :user]).find(1)
|
65
|
+
expect(favorite.local_entry.company_name).to eq 'local.ch'
|
66
|
+
expect(favorite.user.name).to eq 'Mario'
|
67
|
+
end
|
41
68
|
end
|
42
69
|
|
43
70
|
context 'multilevel includes' do
|
@@ -49,6 +76,7 @@ describe LHS::Service do
|
|
49
76
|
end
|
50
77
|
stub_campaign_request
|
51
78
|
stub_entry_request
|
79
|
+
stub_user_request
|
52
80
|
end
|
53
81
|
|
54
82
|
it 'includes linked resources while fetching multiple resources from one service' do
|
@@ -79,6 +107,19 @@ describe LHS::Service do
|
|
79
107
|
expect(feedbacks.campaign.entry.name).to eq 'Casa Ferlin'
|
80
108
|
end
|
81
109
|
|
110
|
+
it 'includes linked resources with array while fetching a single resource from one service' do
|
111
|
+
|
112
|
+
stub_request(:get, "#{datastore}/feedbacks/123")
|
113
|
+
.to_return(status: 200, body: {
|
114
|
+
'href' => "#{datastore}/feedbacks/-Sc4_pYNpqfsudzhtivfkA",
|
115
|
+
'campaign' => { 'href' => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d" }
|
116
|
+
}.to_json)
|
117
|
+
|
118
|
+
feedbacks = Feedback.includes(campaign: [:entry, :user]).find(123)
|
119
|
+
expect(feedbacks.campaign.entry.name).to eq 'Casa Ferlin'
|
120
|
+
expect(feedbacks.campaign.user.name).to eq 'Mario'
|
121
|
+
end
|
122
|
+
|
82
123
|
context 'include objects from known services' do
|
83
124
|
|
84
125
|
let(:stub_feedback_request) do
|