lhc 6.4.0 → 6.5.0
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/lhc/response/data.rb +17 -27
- data/lib/lhc/response/data/base.rb +20 -0
- data/lib/lhc/response/data/collection.rb +14 -0
- data/lib/lhc/response/data/item.rb +27 -0
- data/lib/lhc/version.rb +1 -1
- data/spec/response/data_spec.rb +41 -15
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1870e7f765bd88ab8d601bf98828dec1dad3578
|
4
|
+
data.tar.gz: 2ee4018796f6db877e144888e3211c7cae3cd72c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8868211d499b67b58d67abbeadfd4fd12aabbf61d2a99f18a7f4e06ff5f51856b0203997e914e43143503c02315448913253b914b87c51c830ecbc1955b95aec
|
7
|
+
data.tar.gz: 8f558506283ca904cda4c0db565f24f1728dd9976778523dcd7b74ed155aa82dce6eb4a28a5156dd4bcaea5f9b301dd2d4ee720beae1fca6a8aeee2ad615251c
|
data/lib/lhc/response/data.rb
CHANGED
@@ -1,36 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
class LHC::Response::Data
|
2
|
+
autoload :Base, 'lhc/response/data/base'
|
3
|
+
autoload :Item, 'lhc/response/data/item'
|
4
|
+
autoload :Collection, 'lhc/response/data/collection'
|
5
5
|
|
6
|
-
|
7
|
-
@response = response
|
8
|
-
set_dynamic_accessor_methods
|
9
|
-
super(as_json)
|
10
|
-
end
|
6
|
+
include LHC::Response::Data::Base
|
11
7
|
|
12
|
-
def
|
13
|
-
response
|
14
|
-
|
8
|
+
def initialize(response, data: nil)
|
9
|
+
@response = response
|
10
|
+
@data = data
|
15
11
|
|
16
|
-
|
17
|
-
|
12
|
+
if as_json.is_a?(Hash)
|
13
|
+
@base = LHC::Response::Data::Item.new(response, data: data)
|
14
|
+
elsif as_json.is_a?(Array)
|
15
|
+
@base = LHC::Response::Data::Collection.new(response, data: data)
|
16
|
+
end
|
18
17
|
end
|
19
18
|
|
20
|
-
def
|
21
|
-
@
|
22
|
-
@hash[key]
|
19
|
+
def method_missing(method, *args, &block)
|
20
|
+
@base.send(method, *args, &block)
|
23
21
|
end
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
attr_reader :response
|
28
|
-
|
29
|
-
def set_dynamic_accessor_methods
|
30
|
-
as_json.keys.each do |key|
|
31
|
-
define_singleton_method key do |*args|
|
32
|
-
as_open_struct.send key, *args
|
33
|
-
end
|
34
|
-
end
|
23
|
+
def respond_to_missing?(method_name, include_private = false)
|
24
|
+
@base.respond_to?(method_name, include_private) || super
|
35
25
|
end
|
36
26
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Response data is data provided through the response body
|
2
|
+
# but made accssible in the ruby world
|
3
|
+
module LHC::Response::Data::Base
|
4
|
+
def as_json
|
5
|
+
@json ||= (@data || response.format.as_json(response))
|
6
|
+
end
|
7
|
+
|
8
|
+
def as_open_struct
|
9
|
+
@open_struct ||=
|
10
|
+
if @data
|
11
|
+
JSON.parse(@data.to_json, object_class: OpenStruct)
|
12
|
+
else
|
13
|
+
response.format.as_open_struct(response)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :response
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class LHC::Response::Data::Collection < Array
|
2
|
+
include LHC::Response::Data::Base
|
3
|
+
|
4
|
+
def initialize(response, data: nil)
|
5
|
+
@response = response
|
6
|
+
@data = data
|
7
|
+
|
8
|
+
super(
|
9
|
+
as_json.map do |i|
|
10
|
+
LHC::Response::Data.new(response, data: i)
|
11
|
+
end
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class LHC::Response::Data::Item < OpenStruct
|
2
|
+
include LHC::Response::Data::Base
|
3
|
+
|
4
|
+
def initialize(response, data: nil)
|
5
|
+
@response = response
|
6
|
+
@data = data
|
7
|
+
|
8
|
+
set_dynamic_accessor_methods
|
9
|
+
|
10
|
+
super(as_json)
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](key)
|
14
|
+
@hash ||= as_json.with_indifferent_access
|
15
|
+
@hash[key]
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def set_dynamic_accessor_methods
|
21
|
+
as_json.keys.each do |key|
|
22
|
+
define_singleton_method key do |*args|
|
23
|
+
as_open_struct.send key, *args
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/lhc/version.rb
CHANGED
data/spec/response/data_spec.rb
CHANGED
@@ -4,30 +4,56 @@ describe LHC::Response do
|
|
4
4
|
context 'data' do
|
5
5
|
let(:value) { 'some_value' }
|
6
6
|
|
7
|
-
let(:body) { { some_key: { nested: value } } }
|
8
|
-
|
9
7
|
let(:raw_response) { OpenStruct.new(body: body.to_json) }
|
10
8
|
|
11
9
|
let(:response) { LHC::Response.new(raw_response, nil) }
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
end
|
11
|
+
context 'for item' do
|
12
|
+
let(:body) { { some_key: { nested: value } } }
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
it 'makes data from response body available' do
|
15
|
+
expect(response.data.some_key.nested).to eq value
|
16
|
+
end
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
it 'makes data from response body available with hash bracket notation' do
|
19
|
+
expect(response.data[:some_key][:nested]).to eq value
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'can be converted to json with the as_json method' do
|
23
|
+
expect(response.data.as_json).to eq body.as_json
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'can be converted to an open struct with the as_open_struct method' do
|
27
|
+
expect(response.data.as_open_struct).to eq JSON.parse(response.body, object_class: OpenStruct)
|
28
|
+
end
|
24
29
|
|
25
|
-
|
26
|
-
|
30
|
+
it 'returns nil when data is not available' do
|
31
|
+
expect(response.data.something).to be_nil
|
32
|
+
end
|
27
33
|
end
|
28
34
|
|
29
|
-
|
30
|
-
|
35
|
+
context 'for collection' do
|
36
|
+
let(:body) { [{ some_key: { nested: value } }] }
|
37
|
+
|
38
|
+
it 'can be converted to json with the as_json method' do
|
39
|
+
expect(response.data.as_json).to eq body.as_json
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'can be converted to an open struct with the as_open_struct method' do
|
43
|
+
expect(response.data.as_open_struct).to eq JSON.parse(response.body, object_class: OpenStruct)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'is a collection of items' do
|
47
|
+
expect(response.data.size).to eq(1)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'makes item data from response body available' do
|
51
|
+
expect(response.data.first.some_key.nested).to eq value
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'makes item data from response body available with hash bracket notation' do
|
55
|
+
expect(response.data.first[:some_key][:nested]).to eq value
|
56
|
+
end
|
31
57
|
end
|
32
58
|
end
|
33
59
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lhc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- https://github.com/local-ch/lhc/contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -195,6 +195,9 @@ files:
|
|
195
195
|
- lib/lhc/request.rb
|
196
196
|
- lib/lhc/response.rb
|
197
197
|
- lib/lhc/response/data.rb
|
198
|
+
- lib/lhc/response/data/base.rb
|
199
|
+
- lib/lhc/response/data/collection.rb
|
200
|
+
- lib/lhc/response/data/item.rb
|
198
201
|
- lib/lhc/test/cache_helper.rb
|
199
202
|
- lib/lhc/version.rb
|
200
203
|
- script/ci/build.sh
|
@@ -321,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
321
324
|
requirements:
|
322
325
|
- Ruby >= 2.0.0
|
323
326
|
rubyforge_project:
|
324
|
-
rubygems_version: 2.6.
|
327
|
+
rubygems_version: 2.6.12
|
325
328
|
signing_key:
|
326
329
|
specification_version: 4
|
327
330
|
summary: LocalHttpClient
|