lhs 9.0.1 → 9.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f5c5dde69a8e71e9f37d3b769c04b865ec6d97cf
4
- data.tar.gz: ceaf6a4a5c87d83448c317522d06b475aaf411ff
3
+ metadata.gz: 0073ba2cc1f6367f97cd507e4437aebb252f5f5b
4
+ data.tar.gz: 52687195c84cf5a5f5f122d41d8fb52389ff3b54
5
5
  SHA512:
6
- metadata.gz: 0d2adc8b42d6f832313537ae26e2c5228a77dbfa9f917b338e365f972e21a198c5b79f703ac0c7c14bc0282aa59d73499d322f4100861c31461c8dc8e0aae151
7
- data.tar.gz: 32a78f36ab5f8903386631cd84f005231f90453a0045f1d90045cb7a81e941cb2e49fbd8dbb85c14475582ac3db85998ff7854d2faf4d1116e5ce4832d9979c5
6
+ metadata.gz: 29226d8c8a1504a986321f5a25e0ff84358b50545404d5dfbb423af85dce4abeaeb9eaf0e68b19e64c1ce11e0b69df8b70e7fb45389bc051a9632520c5043747
7
+ data.tar.gz: 86a699cc56dad77686ed4e2b0428fd4ee56acb074d6dddde697001a61737b293242fdadb317f39662cd7b2e98d63e0ee59a92ebf825e7b770494a9fe34bce40f
data/README.md CHANGED
@@ -27,6 +27,8 @@ Please store all defined LHS::Records in `app/models` as they are not autoloaded
27
27
 
28
28
  You setup a LHS::Record by configuring one or multiple endpoints. You can also add request options for an endpoint (see following example).
29
29
 
30
+ The following example uses the `LHC::Caching` interceptor from [lhc-core-interceptors](https://github.com/local-ch/lhc-core-interceptors#cache-interceptor).
31
+
30
32
  ```ruby
31
33
  class Record < LHS::Record
32
34
 
@@ -61,7 +61,12 @@ class LHS::Record
61
61
  data.each_with_index do |item, i|
62
62
  item = item[i] if item.is_a? LHS::Collection
63
63
  link = item[key.to_sym]
64
- link.merge_raw!(addition[i]) if link.present?
64
+ next if link.blank?
65
+ link.merge_raw!(addition[i]) && next if !link.collection?
66
+
67
+ link.each_with_index do |item, j|
68
+ item.merge_raw!(addition[i + j]) if item.present?
69
+ end
65
70
  end
66
71
  end
67
72
 
@@ -175,7 +180,7 @@ class LHS::Record
175
180
  def load_and_merge_remaining_objects!(data, options)
176
181
  if paginated?(data._raw)
177
182
  load_and_merge_paginated_collection!(data, options)
178
- elsif data.collection? && paginated?(data.first._raw)
183
+ elsif data.collection? && paginated?(data.first.try(:_raw))
179
184
  load_and_merge_set_of_paginated_collections!(data, options)
180
185
  end
181
186
  end
@@ -320,13 +325,13 @@ class LHS::Record
320
325
  def options_for_multiple(data, key = nil)
321
326
  data.map do |item|
322
327
  url_option_for(item, key)
323
- end
328
+ end.flatten
324
329
  end
325
330
 
326
331
  def options_for_nested_items(data, key = nil)
327
332
  data[key].map do |item|
328
333
  url_option_for(item)
329
- end
334
+ end.flatten
330
335
  end
331
336
 
332
337
  def options_for_next_batch(record, pagination, options, parent_data = nil)
@@ -406,7 +411,12 @@ class LHS::Record
406
411
 
407
412
  def url_option_for(item, key = nil)
408
413
  link = key ? item[key] : item
409
- return { url: link.href } if link.present? && link.href.present?
414
+ return if link.blank?
415
+ return { url: link.href } if !link.collection?
416
+
417
+ link.map do |item|
418
+ { url: item.href } if item.present? && item.href.present?
419
+ end.compact
410
420
  end
411
421
  end
412
422
  end
data/lib/lhs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "9.0.1"
2
+ VERSION = "9.0.2"
3
3
  end
@@ -115,5 +115,26 @@ describe LHS::Record do
115
115
  expect(products_request_page_2).to have_been_requested.at_least_once
116
116
  expect(products_request_page_3).to have_been_requested.at_least_once
117
117
  end
118
+
119
+ context 'includes for an empty array' do
120
+ before(:each) do
121
+ class Contract < LHS::Record
122
+ endpoint 'http://datastore/contracts/:id'
123
+ end
124
+ stub_request(:get, "http://datastore/contracts/1")
125
+ .to_return(body: {
126
+ options: []
127
+ }.to_json)
128
+ end
129
+
130
+ it 'includes_all in case of an empty array' do
131
+ expect(lambda do
132
+ Contract
133
+ .includes(:product)
134
+ .includes_all(:options)
135
+ .find(1)
136
+ end).not_to raise_error
137
+ end
138
+ end
118
139
  end
119
140
  end
@@ -469,4 +469,30 @@ describe LHS::Record do
469
469
  expect(place.contracts.to_a).to eq([])
470
470
  end
471
471
  end
472
+
473
+ context 'include and merge arrays when calling find in parallel' do
474
+ before(:each) do
475
+ class Place < LHS::Record
476
+ endpoint 'http://datastore/places/:id'
477
+ end
478
+ stub_request(:get, 'http://datastore/places/1')
479
+ .to_return(body: {
480
+ category_relations: [{ href: 'http://datastore/category/1' }, { href: 'http://datastore/category/2' }]
481
+ }.to_json)
482
+ stub_request(:get, 'http://datastore/places/2')
483
+ .to_return(body: {
484
+ category_relations: [{ href: 'http://datastore/category/2' }, { href: 'http://datastore/category/1' }]
485
+ }.to_json)
486
+ stub_request(:get, "http://datastore/category/1").to_return(body: { name: 'Food' }.to_json)
487
+ stub_request(:get, "http://datastore/category/2").to_return(body: { name: 'Drinks' }.to_json)
488
+ end
489
+
490
+ it 'includes and merges linked resources in case of an array of links' do
491
+ places = Place
492
+ .includes(:category_relations)
493
+ .find(1, 2)
494
+ expect(places[0].category_relations[0].name).to eq 'Food'
495
+ expect(places[1].category_relations[0].name).to eq 'Drinks'
496
+ end
497
+ end
472
498
  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: 9.0.1
4
+ version: 9.0.2
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-02-07 00:00:00.000000000 Z
11
+ date: 2017-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc