lhs 11.0.2 → 11.0.3

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: 43edcbb95ff9fac3487269d82e907074ebd34c77
4
- data.tar.gz: 4c0b1606d84502bcbf2868cf0bacef57d6d189d3
3
+ metadata.gz: dc9d93456e8c4ad57a3883f582dd868169272980
4
+ data.tar.gz: d741c6a54fcdbe5c7b72a8f226fd290485d5e218
5
5
  SHA512:
6
- metadata.gz: c2a9cd34ef7a3cb2967590b19e950e9925c71d1d9f9208d72a9a032bc2cdca061ce787ca2ab8447bfe5f3ea31fc971eed87f91fa24e1880b486b0016e897a57e
7
- data.tar.gz: c1b547a13121304b67706163dbb5124cee91d9e4107e16e1dd1bf57abe55fc05c1a35e243b8fd0c9c401d3d92ae34f5baeb57c01e0a3bfac10676a1637ff1c3b
6
+ metadata.gz: a1dbba4cf7b6d320d0a16ff0582159a50565d6f5e5ba037e0c0bbebc3c708d3e50403df9846a35b26879dc48f116349ec961cd4c418c3a97ac6302c916280c91
7
+ data.tar.gz: d6d14efc2d3558dd996aba3bcc9da903e8a19ca118dd8d2b760a3bab415b13807512740ae947524f0894984f1e373c7e9d96cfa49e0cb29de6d95c3fd30b2156
@@ -291,9 +291,15 @@ class LHS::Record
291
291
  # When including all resources on one level, don't forward :includes & :references
292
292
  # as we have to fetch all resources on this level first, before we continue_including
293
293
  def prepare_option_for_include_all_request!(option)
294
- return option unless option.present?
294
+ return option if option.empty? || option[:url].nil?
295
+ uri = URI.parse(option[:url])
296
+ get_params = Rack::Utils.parse_nested_query(uri.query)
297
+ .symbolize_keys
298
+ .except(limit_key, pagination_key)
295
299
  option[:params] ||= {}
296
- option[:params].merge!(limit_key => option.fetch(:params, {}).fetch(limit_key, LHS::Pagination::Base::DEFAULT_LIMIT))
300
+ option[:params].reverse_merge!(get_params)
301
+ option[:params][limit_key] ||= LHS::Pagination::Base::DEFAULT_LIMIT
302
+ option[:url] = option[:url].gsub("?#{uri.query}", '')
297
303
  option.delete(:including)
298
304
  option.delete(:referencing)
299
305
  option
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "11.0.2"
2
+ VERSION = "11.0.3"
3
3
  end
@@ -0,0 +1,76 @@
1
+ require 'rails_helper'
2
+
3
+ describe LHS::Record::Request do
4
+ subject do
5
+ Class.new do
6
+ include LHS::Record::Configuration
7
+ include LHS::Record::Request
8
+ end
9
+ end
10
+
11
+ describe 'prepare_options_for_include_all_request' do
12
+ it 'calls correct prepare method for nil' do
13
+ expect(subject).to receive(:prepare_option_for_include_all_request!)
14
+ .with(nil).and_return('ignore')
15
+ expect(subject.send(:prepare_options_for_include_all_request!, nil)).to be_nil
16
+ end
17
+
18
+ it 'calls correct prepare method for a Hash' do
19
+ expect(subject).to receive(:prepare_option_for_include_all_request!)
20
+ .with(abc: 'def').and_return('ignore')
21
+ expect(subject.send(:prepare_options_for_include_all_request!, abc: 'def')).to eq(abc: 'def')
22
+ end
23
+
24
+ it 'calls correct prepare method for a Hash' do
25
+ expect(subject).to receive(:prepare_option_for_include_all_request!)
26
+ .with(abc: 'def').and_return('ignore')
27
+ expect(subject).to receive(:prepare_option_for_include_all_request!)
28
+ .with(hij: 'kel').and_return('ignore')
29
+ expect(subject.send(:prepare_options_for_include_all_request!, [{ abc: 'def' }, { hij: 'kel' }]))
30
+ .to eq([{ abc: 'def' }, { hij: 'kel' }])
31
+ end
32
+ end
33
+
34
+ describe 'prepare_option_for_incldue_all_request' do
35
+ it 'removes all limit and offset parameters' do
36
+ option = { url: 'http://localhost:3000/test/resource?abc=def&limit=1&offset=3&test=2' }
37
+ expect(subject.send(:prepare_option_for_include_all_request!, option))
38
+ .to eq(option)
39
+ expect(option).to eq(url: 'http://localhost:3000/test/resource',
40
+ params: { limit: 100, abc: 'def', test: '2' })
41
+ end
42
+
43
+ it 'do nothing without url' do
44
+ option = { param: { abc: 'def' } }
45
+ expect(subject.send(:prepare_option_for_include_all_request!, option))
46
+ .to eq(option)
47
+ expect(option).to eq(param: { abc: 'def' })
48
+ end
49
+
50
+ it 'raises an exception when url invalid' do
51
+ option = { param: { abc: 'def' }, url: 'http://ab de.com/resource' }
52
+ expect { subject.send(:prepare_option_for_include_all_request!, option) }
53
+ .to raise_exception(URI::InvalidURIError)
54
+ expect(option).to eq(param: { abc: 'def' }, url: 'http://ab de.com/resource')
55
+ end
56
+
57
+ it 'keeps current params over url params' do
58
+ option = { url: 'http://localhost:3000/test/resource?abc=def&limit=1&offset=3&test=2',
59
+ params: { abc: '123' } }
60
+ expect(subject.send(:prepare_option_for_include_all_request!, option))
61
+ .to eq(option)
62
+ expect(option).to eq(url: 'http://localhost:3000/test/resource',
63
+ params: { limit: 100, abc: '123', test: '2' })
64
+ end
65
+
66
+ it 'removes including and referening options' do
67
+ option = { url: 'http://localhost:3000/test/resource',
68
+ including: 'all',
69
+ referencing: 'nothing' }
70
+ expect(subject.send(:prepare_option_for_include_all_request!, option))
71
+ .to eq(option)
72
+ expect(option).to eq(url: 'http://localhost:3000/test/resource',
73
+ params: { limit: 100 })
74
+ end
75
+ end
76
+ end
@@ -116,6 +116,59 @@ describe LHS::Record do
116
116
  expect(products_request_page_3).to have_been_requested.at_least_once
117
117
  end
118
118
 
119
+ context 'links already contain pagination parameters' do
120
+ let!(:customer_request) do
121
+ stub_request(:get, 'http://datastore/customers/1')
122
+ .to_return(
123
+ body: {
124
+ contracts: { href: 'http://datastore/customers/1/contracts?limit=5&offset=0' }
125
+ }.to_json
126
+ )
127
+ end
128
+
129
+ let!(:contracts_request) do
130
+ stub_request(:get, "http://datastore/customers/1/contracts?limit=100")
131
+ .to_return(
132
+ body: {
133
+ items: 10.times.map do
134
+ {
135
+ products: { href: 'http://datastore/products' }
136
+ }
137
+ end,
138
+ limit: 10,
139
+ offset: 0,
140
+ total: amount_of_contracts
141
+ }.to_json
142
+ )
143
+ end
144
+
145
+ it 'overwrites existing pagination paramters if they are already contained in a string' do
146
+ expect(LHC).to receive(:request)
147
+ .with(url: "http://datastore/customers/1").and_call_original
148
+
149
+ expect(LHC).to receive(:request)
150
+ .with(url: "http://datastore/customers/1/contracts",
151
+ all: true,
152
+ params: { limit: 100 }).and_call_original
153
+
154
+ expect(LHC).to receive(:request)
155
+ .with([{ url: "http://datastore/customers/1/contracts",
156
+ all: true,
157
+ params: { limit: 10, offset: 10 } },
158
+ { url: "http://datastore/customers/1/contracts",
159
+ all: true,
160
+ params: { limit: 10, offset: 20 } },
161
+ { url: "http://datastore/customers/1/contracts",
162
+ all: true,
163
+ params: { limit: 10, offset: 30 } }]).and_call_original
164
+
165
+ customer = Customer
166
+ .includes_all(:contracts)
167
+ .find(1)
168
+ expect(customer.contracts.length).to eq amount_of_contracts
169
+ end
170
+ end
171
+
119
172
  context 'includes for an empty array' do
120
173
  before(:each) do
121
174
  class Contract < LHS::Record
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.2
4
+ version: 11.0.3
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-05-16 00:00:00.000000000 Z
11
+ date: 2017-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc
@@ -239,6 +239,7 @@ files:
239
239
  - spec/collection/respond_to_spec.rb
240
240
  - spec/collection/without_object_items_spec.rb
241
241
  - spec/complex/reduce_spec.rb
242
+ - spec/concerns/record/request_spec.rb
242
243
  - spec/data/collection_spec.rb
243
244
  - spec/data/equality_spec.rb
244
245
  - spec/data/inspect_spec.rb
@@ -385,7 +386,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
385
386
  requirements:
386
387
  - Ruby >= 2.0.0
387
388
  rubyforge_project:
388
- rubygems_version: 2.6.8
389
+ rubygems_version: 2.5.1
389
390
  signing_key:
390
391
  specification_version: 4
391
392
  summary: Rails gem providing an easy, active-record-like interface for http json services
@@ -401,6 +402,7 @@ test_files:
401
402
  - spec/collection/respond_to_spec.rb
402
403
  - spec/collection/without_object_items_spec.rb
403
404
  - spec/complex/reduce_spec.rb
405
+ - spec/concerns/record/request_spec.rb
404
406
  - spec/data/collection_spec.rb
405
407
  - spec/data/equality_spec.rb
406
408
  - spec/data/inspect_spec.rb