lhs 2.0.0 → 2.0.1
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 +4 -4
- data/lib/lhs/collection.rb +5 -5
- data/lib/lhs/concerns/item/validation.rb +2 -1
- data/lib/lhs/concerns/service/all.rb +4 -4
- data/lib/lhs/concerns/service/batch.rb +2 -2
- data/lib/lhs/concerns/service/request.rb +3 -2
- data/lib/lhs/data.rb +12 -6
- data/lib/lhs/item.rb +1 -1
- data/lib/lhs/proxy.rb +1 -0
- data/lib/lhs/version.rb +1 -1
- data/spec/item/internal_data_structure_spec.rb +31 -0
- data/spec/item/setter_spec.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4429a4da605c0b11565e5e005771dd9be52411a3
|
4
|
+
data.tar.gz: 5071611c0b36c7162ad4aac13172dba6d4c86f67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c52dcb465ba7b0a881811fc3d71eb83140c5057872aa30c3c83004cce75e392c9bd47abffa201d8201e3116aa6dfa359c05e890a2d1b66c144b61787de45eb2
|
7
|
+
data.tar.gz: 7ff5aa130cfb6fffcf07a8651b07b6ea82bf48ff8927f1a9015c5ededed930dcf07a6e8372a035f339e549da6eca8551fa92bbfabf95825f483d905abfbc940a
|
data/lib/lhs/collection.rb
CHANGED
@@ -5,24 +5,24 @@ require File.join(__dir__, 'proxy.rb')
|
|
5
5
|
class LHS::Collection < LHS::Proxy
|
6
6
|
|
7
7
|
def total
|
8
|
-
_data._raw[
|
8
|
+
_data._raw[:total]
|
9
9
|
end
|
10
10
|
|
11
11
|
def limit
|
12
|
-
_data._raw[
|
12
|
+
_data._raw[:limit]
|
13
13
|
end
|
14
14
|
|
15
15
|
def offset
|
16
|
-
_data._raw[
|
16
|
+
_data._raw[:offset]
|
17
17
|
end
|
18
18
|
|
19
19
|
def href
|
20
|
-
_data._raw[
|
20
|
+
_data._raw[:href]
|
21
21
|
end
|
22
22
|
|
23
23
|
def _collection
|
24
24
|
raw = _data._raw if _data._raw.is_a?(Array)
|
25
|
-
raw ||= _data._raw[
|
25
|
+
raw ||= _data._raw[:items]
|
26
26
|
Collection.new(raw, _data, _data._service)
|
27
27
|
end
|
28
28
|
|
@@ -9,11 +9,12 @@ class LHS::Item < LHS::Proxy
|
|
9
9
|
self.errors = nil
|
10
10
|
fail 'No validation endpoint found!' unless validation_endpoint
|
11
11
|
service = LHS::Service.for_url(validation_endpoint.url)
|
12
|
+
params = validation_endpoint.options.fetch(:params, {}).merge(persist: false)
|
12
13
|
begin
|
13
14
|
service.request(
|
14
15
|
url: validation_endpoint.url,
|
15
16
|
method: :post,
|
16
|
-
params:
|
17
|
+
params: params,
|
17
18
|
body: _data.to_json,
|
18
19
|
headers: {'Content-Type' => 'application/json'}
|
19
20
|
)
|
@@ -16,14 +16,14 @@ class LHS::Service
|
|
16
16
|
all = []
|
17
17
|
default_max_limit = 100
|
18
18
|
data = instance.request(params: params.merge(limit: default_max_limit))
|
19
|
-
all.concat(data._raw[
|
20
|
-
total_left = data._raw[
|
21
|
-
limit = data._raw[
|
19
|
+
all.concat(data._raw[:items])
|
20
|
+
total_left = data._raw[:total] - data.count
|
21
|
+
limit = data._raw[:limit] || data.count
|
22
22
|
if limit > 0
|
23
23
|
requests = total_left / limit
|
24
24
|
requests.times do |i|
|
25
25
|
offset = limit * (i+1) + 1
|
26
|
-
all.concat instance.request(params: params.merge(limit: limit, offset: offset))._raw[
|
26
|
+
all.concat instance.request(params: params.merge(limit: limit, offset: offset))._raw[:items]
|
27
27
|
end
|
28
28
|
end
|
29
29
|
LHS::Data.new(all, nil, self)
|
@@ -25,8 +25,8 @@ class LHS::Service
|
|
25
25
|
params = options[:params] || {}
|
26
26
|
loop do # as suggested by Matz
|
27
27
|
data = instance.request(params: params.merge(limit: batch_size, offset: start))
|
28
|
-
batch_size = data._raw[
|
29
|
-
left = data._raw[
|
28
|
+
batch_size = data._raw[:limit]
|
29
|
+
left = data._raw[:total].to_i - data._raw[:offset].to_i - data._raw[:limit].to_i
|
30
30
|
yield data
|
31
31
|
break if left <= 0
|
32
32
|
start += batch_size
|
@@ -38,10 +38,10 @@ class LHS::Service
|
|
38
38
|
if data._proxy.is_a? LHS::Collection
|
39
39
|
data.each_with_index do |item, i|
|
40
40
|
item = item[i] if item.is_a? LHS::Collection
|
41
|
-
item._raw[key.
|
41
|
+
item._raw[key.to_sym].merge!(addition[i]._raw)
|
42
42
|
end
|
43
43
|
elsif data._proxy.is_a? LHS::Item
|
44
|
-
data._raw[key.
|
44
|
+
data._raw[key.to_sym].merge!(addition._raw)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -108,6 +108,7 @@ class LHS::Service
|
|
108
108
|
def process_options(options)
|
109
109
|
options ||= {}
|
110
110
|
options = options.dup
|
111
|
+
options[:params].deep_symbolize_keys! if options[:params]
|
111
112
|
endpoint = find_endpoint(options[:params])
|
112
113
|
options = (endpoint.options || {}).merge(options)
|
113
114
|
options[:url] = compute_url!(options[:params]) unless options.key?(:url)
|
data/lib/lhs/data.rb
CHANGED
@@ -33,6 +33,12 @@ class LHS::Data
|
|
33
33
|
_root._service
|
34
34
|
end
|
35
35
|
|
36
|
+
# enforce internal data structure to have deep symbolized keys
|
37
|
+
def _raw=(raw)
|
38
|
+
raw.to_hash.deep_symbolize_keys! if raw && raw.respond_to?(:to_hash)
|
39
|
+
@_raw = raw
|
40
|
+
end
|
41
|
+
|
36
42
|
protected
|
37
43
|
|
38
44
|
# Use existing mapping to provide data
|
@@ -53,13 +59,12 @@ class LHS::Data
|
|
53
59
|
private
|
54
60
|
|
55
61
|
def collection_proxy?(input)
|
56
|
-
(
|
57
|
-
input.is_a?(Array) || _raw.is_a?(Array)
|
62
|
+
!! (input.is_a?(Hash) && input[:items]) || input.is_a?(Array) || _raw.is_a?(Array)
|
58
63
|
end
|
59
64
|
|
60
65
|
def mapping_for(name)
|
61
|
-
service_instance = LHS::Service.for_url(_raw[
|
62
|
-
service_instance ||= _root._service.instance if root_item?
|
66
|
+
service_instance = LHS::Service.for_url(_raw[:href]) if _raw.is_a?(Hash)
|
67
|
+
service_instance ||= _root._service.instance if root_item? && _root._service
|
63
68
|
return unless service_instance
|
64
69
|
service_instance.mapping[name]
|
65
70
|
end
|
@@ -89,7 +94,7 @@ class LHS::Data
|
|
89
94
|
def proxy_from_input(input)
|
90
95
|
if input.is_a? LHS::Proxy
|
91
96
|
input
|
92
|
-
elsif collection_proxy?(input)
|
97
|
+
elsif collection_proxy?(raw_from_input(input))
|
93
98
|
LHS::Collection.new(self)
|
94
99
|
else
|
95
100
|
LHS::Item.new(self)
|
@@ -98,12 +103,13 @@ class LHS::Data
|
|
98
103
|
|
99
104
|
def raw_from_input(input)
|
100
105
|
if input.is_a?(String) && input.length > 0
|
101
|
-
JSON.parse(input)
|
106
|
+
JSON.parse(input).deep_symbolize_keys
|
102
107
|
elsif defined?(input._raw)
|
103
108
|
input._raw
|
104
109
|
elsif defined?(input._data)
|
105
110
|
input._data._raw
|
106
111
|
else
|
112
|
+
input.deep_symbolize_keys! if input.is_a?(Hash)
|
107
113
|
input
|
108
114
|
end
|
109
115
|
end
|
data/lib/lhs/item.rb
CHANGED
data/lib/lhs/proxy.rb
CHANGED
data/lib/lhs/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe LHS::Item do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
class Feedback < LHS::Service
|
7
|
+
endpoint ':datastore/v2/feedbacks'
|
8
|
+
endpoint ':datastore/v2/feedbacks/:id'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:hash) do
|
13
|
+
{'addresses' => [{'businesses' => {'identities' => [{'name' => 'Löwenzorn'}]}}]}
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:data) do
|
17
|
+
LHS::Data.new(hash, nil, Feedback)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'deep symbolizes keys internaly when new data is initalized' do
|
21
|
+
expect(data._raw[:addresses].first[:businesses][:identities].first[:name]).to eq 'Löwenzorn'
|
22
|
+
data.id = 'YZ12'
|
23
|
+
expect(data._raw.keys).to include(:id)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'deep symbolizes internal data' do
|
27
|
+
feedback = Feedback.build(hash)
|
28
|
+
expect(feedback._raw.keys).to include(:addresses)
|
29
|
+
expect(feedback._raw[:addresses].first[:businesses][:identities].first[:name]).to eq 'Löwenzorn'
|
30
|
+
end
|
31
|
+
end
|
data/spec/item/setter_spec.rb
CHANGED
@@ -26,7 +26,7 @@ describe LHS::Item do
|
|
26
26
|
it 'sets the value for an existing attribute' do
|
27
27
|
expect(item.name = 'Steve').to eq 'Steve'
|
28
28
|
expect(item.name).to eq 'Steve'
|
29
|
-
expect(item._raw[
|
29
|
+
expect(item._raw[:name]).to eq 'Steve'
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'sets things to nil' do
|
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: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- local.ch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lhc
|
@@ -215,6 +215,7 @@ files:
|
|
215
215
|
- spec/item/destroy_spec.rb
|
216
216
|
- spec/item/errors_spec.rb
|
217
217
|
- spec/item/getter_spec.rb
|
218
|
+
- spec/item/internal_data_structure_spec.rb
|
218
219
|
- spec/item/respond_to_spec.rb
|
219
220
|
- spec/item/save_spec.rb
|
220
221
|
- spec/item/setter_spec.rb
|
@@ -327,6 +328,7 @@ test_files:
|
|
327
328
|
- spec/item/destroy_spec.rb
|
328
329
|
- spec/item/errors_spec.rb
|
329
330
|
- spec/item/getter_spec.rb
|
331
|
+
- spec/item/internal_data_structure_spec.rb
|
330
332
|
- spec/item/respond_to_spec.rb
|
331
333
|
- spec/item/save_spec.rb
|
332
334
|
- spec/item/setter_spec.rb
|