lhs 15.2.4 → 15.2.5

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
  SHA1:
3
- metadata.gz: 065d4f6623803cb198313fad6600902190ee982a
4
- data.tar.gz: f93e91649e7f464da69cdddb63e2ddd11f9ca204
3
+ metadata.gz: 74a7df6c84bd30e35e9a0d4fe14bd0d4023c71e0
4
+ data.tar.gz: 899c8e3029fbee1bc9f42b68022eb0fd38d4fc5a
5
5
  SHA512:
6
- metadata.gz: b3f6b6026982ef4b1582395758e536e2c01b0e7e987063ce1872a493466999d341bbe664717c41fea6c5de031c6731c29ce6c57b4f0cd68fce7ea2e0bdfc013d
7
- data.tar.gz: 22c1b2e5d8b62fa1b570143ee8e532b523e38f7e425a0aca5dd5d14a3a2e5c61b207bab261d376ff0b0b75f6b82ec3b43bb63ff89c6e4b17f67088d191d30f0a
6
+ metadata.gz: 2dba61e4adcd12cd589c585bdf3d4fc96647b015c331d3b8ff55a681089019fe3f19f4f68860fb2b4a224332a3af447b701c1f05de7b59ead1f4459cc8cc60a5
7
+ data.tar.gz: 94e90e2cb651d2518b138cf76691f6dbc8c544ab14e619cb23c1dd1fc67e29680d3b93ac16e8471ce019ff4457de5fd1e4d60b2fa29fd2fa0fe392bec20f1bee
@@ -105,10 +105,19 @@ class LHS::Record
105
105
  .each_with_index do |item, index|
106
106
  item_addition = addition[index]
107
107
  next if item_addition.nil? || item.nil?
108
- item.merge! item_addition._raw
108
+ if item_addition._raw.is_a?(Array)
109
+ extend_base_collection_with_array!(item, item_addition._raw)
110
+ else
111
+ item.merge! item_addition._raw
112
+ end
109
113
  end
110
114
  end
111
115
 
116
+ def extend_base_collection_with_array!(item, addition)
117
+ item[items_key] ||= []
118
+ item[items_key].concat(addition)
119
+ end
120
+
112
121
  def extend_base_array!(data, addition, key)
113
122
  data[key].zip(addition) do |item, additional_item|
114
123
  item._raw.merge!(additional_item._raw) if additional_item.present?
@@ -190,7 +199,14 @@ class LHS::Record
190
199
  if addition.item?
191
200
  (addition._raw.keys - [:href]).empty?
192
201
  elsif addition.collection?
193
- addition.all? { |item| item && (item._raw.keys - [:href]).empty? }
202
+ addition.all? do |item|
203
+ next if item.blank?
204
+ if item._raw.is_a?(Hash)
205
+ (item._raw.keys - [:href]).empty?
206
+ elsif item._raw.is_a?(Array)
207
+ item.any? { |item| (item._raw.keys - [:href]).empty? }
208
+ end
209
+ end
194
210
  end
195
211
  end
196
212
 
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = '15.2.4'
2
+ VERSION = '15.2.5'
3
3
  end
@@ -560,4 +560,48 @@ describe LHS::Record do
560
560
  expect(places[1].category_relations[0].name).to eq 'Drinks'
561
561
  end
562
562
  end
563
+
564
+ context 'single href with array response' do
565
+ it 'extends base items with arrays' do
566
+ class Sector < LHS::Record
567
+ endpoint '{+datastore}/sectors'
568
+ endpoint '{+datastore}/sectors/{id}'
569
+ end
570
+
571
+ stub_request(:get, "#{datastore}/sectors")
572
+ .with(query: hash_including(key: 'my_service'))
573
+ .to_return(body: [
574
+ {
575
+ href: "#{datastore}/sectors/1",
576
+ services: {
577
+ href: "#{datastore}/sectors/1/services"
578
+ },
579
+ keys: [
580
+ {
581
+ key: 'my_service',
582
+ language: 'de'
583
+ }
584
+ ]
585
+ }
586
+ ].to_json)
587
+
588
+ stub_request(:get, "#{datastore}/sectors/1/services")
589
+ .to_return(body: [
590
+ {
591
+ href: "#{datastore}/services/s1",
592
+ price_in_cents: 9900,
593
+ key: 'my_service_service_1'
594
+ },
595
+ {
596
+ href: "#{datastore}/services/s2",
597
+ price_in_cents: 19900,
598
+ key: 'my_service_service_2'
599
+ }
600
+ ].to_json)
601
+
602
+ sector = Sector.includes(:services).find_by(key: 'my_service')
603
+ expect(sector.services.length).to eq 2
604
+ expect(sector.services.first.key).to eq 'my_service_service_1'
605
+ end
606
+ end
563
607
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.2.4
4
+ version: 15.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhs/graphs/contributors
@@ -437,7 +437,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
437
437
  requirements:
438
438
  - Ruby >= 2.3.0
439
439
  rubyforge_project:
440
- rubygems_version: 2.6.14
440
+ rubygems_version: 2.6.12
441
441
  signing_key:
442
442
  specification_version: 4
443
443
  summary: Rails gem providing an easy, active-record-like interface for http json services