lhc 3.6.1 → 3.7.0.pre1

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: 9ca2e1026c3f06a4352d9dbe01bfe2c43b37ae80
4
- data.tar.gz: cee1ead64c10ddb0148657cbb5aa195eb87cab1b
3
+ metadata.gz: 9ba7b312631cdd807ba15789447528102d6c6c65
4
+ data.tar.gz: 7ac5531c6deecaa7a9ec73c9422443acffdcffd8
5
5
  SHA512:
6
- metadata.gz: 5e439fc2091bdca5ee4a9f3f3ef984e4dcefefa508366cf613300b12c1f53a2308e72f018b15403de09cf33c34b6a11a50eb13b9d140a4fda484182269070ebe
7
- data.tar.gz: cc8281cbc6e3440bc77113626ae9526e1ba30be0fefd6a547a282440ceb4dae14d1e7e766c5a2d1a6ed8c32728c02b4ab87d9efc6320e5d7fc5356ecbfd2923d
6
+ metadata.gz: ccb2e358ec64e1a396e6e05b1e024a0af8d846bf579e78ff01bc42d69f1877de713594386cd33cfda97ad2b17d7ffa9a936d5903f67c585a1d97cd4e04e48e6c
7
+ data.tar.gz: 524a3e8fc64058a97594ff4b5ebd3bf80e4e2853a3bd24288c3a7970f345f08c6d0f80863722c62457875608b6ea048daa05f8acaffaf4caa38c64284148bc32
data/README.md CHANGED
@@ -45,6 +45,18 @@ Currently supported formats: `json`
45
45
 
46
46
  → [Read more about the response object](docs/response.md)
47
47
 
48
+ ## Accessing data
49
+
50
+ The response data can be access with dot-notation and square-bracket notation. You can convert response data to open structs or json (if the response format is json).
51
+
52
+ ```ruby
53
+ response = LHC.request(url: 'http://datastore/entry/1')
54
+ response.data.as_open_struct #<OpenStruct name='local.ch'>
55
+ response.data.as_json # { name: 'local.ch' }
56
+ response.data.name # 'local.ch'
57
+ response.data[:name] # 'local.ch'
58
+ ```
59
+
48
60
  ## Parallel requests
49
61
 
50
62
  If you pass an array of requests to `LHC.request`, it will perform those requests in parallel.
@@ -9,10 +9,12 @@ class JsonFormat
9
9
  super(options)
10
10
  end
11
11
 
12
- def parse(response)
13
- JSON.parse(response.body, object_class: OpenStruct)
14
- rescue JSON::ParserError => e
15
- raise LHC::ParserError.new(e.message, response)
12
+ def as_json(response)
13
+ parse(response, Hash)
14
+ end
15
+
16
+ def as_open_struct(response)
17
+ parse(response, OpenStruct)
16
18
  end
17
19
 
18
20
  def to_s
@@ -22,4 +24,12 @@ class JsonFormat
22
24
  def to_sym
23
25
  to_s.to_sym
24
26
  end
27
+
28
+ private
29
+
30
+ def parse(response, object_class)
31
+ JSON.parse(response.body, object_class: object_class)
32
+ rescue JSON::ParserError => e
33
+ raise LHC::ParserError.new(e.message, response)
34
+ end
25
35
  end
data/lib/lhc/response.rb CHANGED
@@ -13,11 +13,8 @@ class LHC::Response
13
13
  self.raw = raw
14
14
  end
15
15
 
16
- # Access response data.
17
- # Cache parsing.
18
16
  def data
19
- @data ||= format.parse(self)
20
- @data
17
+ @data ||= LHC::Response::Data.new(self)
21
18
  end
22
19
 
23
20
  def effective_url
@@ -53,13 +50,13 @@ class LHC::Response
53
50
  raw.success?
54
51
  end
55
52
 
56
- private
57
-
58
- attr_accessor :raw
59
-
60
53
  def format
61
54
  return JsonFormat.new if request.nil?
62
55
  request.format
63
56
  end
64
57
 
58
+ private
59
+
60
+ attr_accessor :raw
61
+
65
62
  end
@@ -0,0 +1,34 @@
1
+ # Response data is data provided through the response body
2
+ # but made accssible in the ruby world
3
+ class LHC::Response::Data
4
+
5
+ def initialize(response)
6
+ @response = response
7
+ set_dynamic_accessor_methods
8
+ end
9
+
10
+ def as_json
11
+ response.format.as_json(response)
12
+ end
13
+
14
+ def as_open_struct
15
+ response.format.as_open_struct(response)
16
+ end
17
+
18
+ def [](key)
19
+ @hash ||= as_json.with_indifferent_access
20
+ @hash[key]
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :response
26
+
27
+ def set_dynamic_accessor_methods
28
+ as_json.keys.each do |key|
29
+ define_singleton_method key do |*args|
30
+ as_open_struct.send key, *args
31
+ end
32
+ end
33
+ end
34
+ end
data/lib/lhc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module LHC
2
- VERSION = "3.6.1"
2
+ VERSION = "3.7.0.pre1"
3
3
  end
@@ -8,9 +8,22 @@ describe LHC::Response do
8
8
 
9
9
  let(:raw_response) { OpenStruct.new(body: body.to_json) }
10
10
 
11
+ let(:response) { LHC::Response.new(raw_response, nil) }
12
+
11
13
  it 'makes data from response body available' do
12
- response = LHC::Response.new(raw_response, nil)
13
14
  expect(response.data.some_key.nested).to eq value
14
15
  end
16
+
17
+ it 'makes data from response body available with hash bracket notation' do
18
+ expect(response.data[:some_key][:nested]).to eq value
19
+ end
20
+
21
+ it 'can be converted to json with the as_json method' do
22
+ expect(response.data.as_json).to eq body.as_json
23
+ end
24
+
25
+ it 'can be converted to an open struct with the as_open_struct method' do
26
+ expect(response.data.as_open_struct).to eq JSON.parse(response.body, object_class: OpenStruct)
27
+ end
15
28
  end
16
29
  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: 3.6.1
4
+ version: 3.7.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - local.ch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-30 00:00:00.000000000 Z
11
+ date: 2016-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -167,6 +167,7 @@ files:
167
167
  - lib/lhc/interceptor_processor.rb
168
168
  - lib/lhc/request.rb
169
169
  - lib/lhc/response.rb
170
+ - lib/lhc/response/data.rb
170
171
  - lib/lhc/version.rb
171
172
  - non_rails_spec/request/request_spec.rb
172
173
  - script/ci/build.sh
@@ -271,9 +272,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
271
272
  version: 1.9.2
272
273
  required_rubygems_version: !ruby/object:Gem::Requirement
273
274
  requirements:
274
- - - ">="
275
+ - - ">"
275
276
  - !ruby/object:Gem::Version
276
- version: '0'
277
+ version: 1.3.1
277
278
  requirements:
278
279
  - Ruby >= 1.9.2
279
280
  rubyforge_project: