ddy_remote_resource 0.4.4 → 0.4.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: ccdea576090cd3a3332da5e68b203a6e2aeb3a6a
4
- data.tar.gz: 26504a0d4c77d806db2a956285db344cbe0773c9
3
+ metadata.gz: 81623623abfc2c02eca8ba86097669fe5228e691
4
+ data.tar.gz: d6d96b4787ab3c8fbbc9489025da6b8fa680c3b0
5
5
  SHA512:
6
- metadata.gz: d3453c43a446bdd4eb61e19524814a60fa3c0c4cd48ae69acc5a06b7968aa9303146ab7dfd7ac65be925708ef6cefa77e332aa7ed94067263d57dc3287df00cf
7
- data.tar.gz: 26d4188cc4f6aab90740074fe8e48c6dfc7c3b23785efb395878456077ca366d11e40f39bec4c4091aac16bc6158bc4d5bef23c20a2d9effb1ca919e94c084d6
6
+ metadata.gz: 5891d80cd394f2682b5df1f1962ac676d42966d50153637a9250c0e096ae3ddce3dd1fffd979224561669c6e02bfda14ddf2da50bd1ef86575e416c024e32257
7
+ data.tar.gz: 93d0f8606a690a56b8fe2f319beac338735810772ba4af8d6b9179947799dd12d06cdb6d645fdc1b1399c13575413d25ec9a4880ed0986bf647254231648321e
@@ -27,7 +27,7 @@ module RemoteResource
27
27
  private
28
28
 
29
29
  def response_hash(response_object)
30
- { _response: response_object }
30
+ { _response: response_object, meta: response_object.sanitized_response_meta }
31
31
  end
32
32
  end
33
33
 
@@ -4,18 +4,28 @@ module RemoteResource
4
4
 
5
5
  delegate :[], :at, :reverse, :size, to: :to_a
6
6
 
7
- attr_reader :resource_klass, :resources_collection, :_response
7
+ attr_reader :resource_klass, :resources_collection, :meta, :_response
8
8
 
9
9
  def initialize(resource_klass, resources_collection, response_hash)
10
10
  @resource_klass = resource_klass
11
11
  @resources_collection = resources_collection
12
12
  @response_hash = response_hash
13
+ @meta = response_hash[:meta] || {}
13
14
  @_response = response_hash[:_response]
14
15
  end
15
16
 
16
- def each
17
+ def each(&block)
17
18
  if resources_collection.is_a? Array
18
- resources_collection.each { |element| yield resource_klass.new element.merge(@response_hash) }
19
+ if defined?(@collection)
20
+ @collection.each(&block)
21
+ else
22
+ @collection = []
23
+ resources_collection.each do |element|
24
+ record = resource_klass.new element.merge(@response_hash)
25
+ @collection << record
26
+ yield(record)
27
+ end
28
+ end
19
29
  end
20
30
  end
21
31
 
@@ -33,6 +33,15 @@ module RemoteResource
33
33
  unpacked_parsed_response_body
34
34
  end
35
35
 
36
+ def sanitized_response_meta
37
+ return empty_hash if response_body.blank?
38
+ return empty_hash if parsed_response_body.blank?
39
+
40
+ return parsed_response_body['meta'] if parsed_response_body.try :has_key?, 'meta'
41
+
42
+ empty_hash
43
+ end
44
+
36
45
  def error_messages_response_body
37
46
  return empty_hash if response_body.blank?
38
47
  return empty_hash if parsed_response_body.blank?
@@ -1,3 +1,3 @@
1
1
  module RemoteResource
2
- VERSION = '0.4.4'
2
+ VERSION = '0.4.5'
3
3
  end
@@ -21,11 +21,17 @@ describe RemoteResource::Builder do
21
21
  let(:sanitized_response_body) do
22
22
  { "id" => "12", "username" => "foobar" }
23
23
  end
24
+ let(:sanitized_response_meta) do
25
+ { 'total' => '1'}
26
+ end
24
27
 
25
- before { allow(response).to receive(:sanitized_response_body) { sanitized_response_body } }
28
+ before do
29
+ allow(response).to receive(:sanitized_response_body) { sanitized_response_body }
30
+ allow(response).to receive(:sanitized_response_meta) { sanitized_response_meta }
31
+ end
26
32
 
27
33
  it 'calls the .build_resource' do
28
- expect(dummy_class).to receive(:build_resource).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response) }
34
+ expect(dummy_class).to receive(:build_resource).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response), meta: sanitized_response_meta }
29
35
  dummy_class.build_resource_from_response response
30
36
  end
31
37
  end
@@ -80,11 +86,17 @@ describe RemoteResource::Builder do
80
86
  { "id" => "12", "username" => "aapmies" }
81
87
  ]
82
88
  end
89
+ let(:sanitized_response_meta) do
90
+ { 'total' => '3'}
91
+ end
83
92
 
84
- before { allow(response).to receive(:sanitized_response_body) { sanitized_response_body } }
93
+ before do
94
+ allow(response).to receive(:sanitized_response_body) { sanitized_response_body }
95
+ allow(response).to receive(:sanitized_response_meta) { sanitized_response_meta }
96
+ end
85
97
 
86
98
  it 'calls the .build_collection' do
87
- expect(dummy_class).to receive(:build_collection).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response) }
99
+ expect(dummy_class).to receive(:build_collection).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response), meta: sanitized_response_meta }
88
100
  dummy_class.build_collection_from_response response
89
101
  end
90
102
  end
@@ -141,11 +153,17 @@ describe RemoteResource::Builder do
141
153
  let(:sanitized_response_body) do
142
154
  { "id" => "12", "username" => "foobar" }
143
155
  end
156
+ let(:sanitized_response_meta) do
157
+ { 'total' => '1'}
158
+ end
144
159
 
145
- before { allow(response).to receive(:sanitized_response_body) { sanitized_response_body } }
160
+ before do
161
+ allow(response).to receive(:sanitized_response_body) { sanitized_response_body }
162
+ allow(response).to receive(:sanitized_response_meta) { sanitized_response_meta }
163
+ end
146
164
 
147
165
  it 'calls the #rebuild_resource' do
148
- expect(dummy).to receive(:rebuild_resource).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response) }
166
+ expect(dummy).to receive(:rebuild_resource).with sanitized_response_body, { _response: an_instance_of(RemoteResource::Response), meta: sanitized_response_meta }
149
167
  dummy.rebuild_resource_from_response response
150
168
  end
151
169
  end
@@ -16,8 +16,9 @@ describe RemoteResource::Collection do
16
16
  let(:dummy) { dummy_class.new }
17
17
 
18
18
  let(:response) { RemoteResource::Response.new double.as_null_object }
19
+ let(:response_meta) { { total: '1' } }
19
20
  let(:response_hash) do
20
- { _response: response }
21
+ { _response: response, meta: response_meta }
21
22
  end
22
23
 
23
24
  let(:resources_collection) do
@@ -91,6 +92,16 @@ describe RemoteResource::Collection do
91
92
  expect(collection[1]._response).to eql response
92
93
  end
93
94
  end
95
+
96
+ it 'returns the same objects each time' do
97
+ expected = collection.collect(&:object_id)
98
+ actual = collection.collect(&:object_id)
99
+
100
+ aggregate_failures do
101
+ expect(expected.length).to eq(2)
102
+ expect(expected).to eql(actual)
103
+ end
104
+ end
94
105
  end
95
106
 
96
107
  context 'when the resources_collection is NOT an Array' do
@@ -144,5 +155,10 @@ describe RemoteResource::Collection do
144
155
  end
145
156
  end
146
157
 
158
+ describe '#meta' do
159
+ it 'returns :meta' do
160
+ expect(collection.meta).to eql(response_meta)
161
+ end
162
+ end
147
163
 
148
164
  end
@@ -112,6 +112,59 @@ describe RemoteResource::Response do
112
112
  end
113
113
  end
114
114
 
115
+ describe '#sanitized_response_meta' do
116
+ let(:response) { described_class.new double.as_null_object }
117
+
118
+ before { allow(response).to receive(:response_body) { response_body } }
119
+
120
+ context 'when response_body is nil' do
121
+ let(:response_body) { nil }
122
+
123
+ it 'returns an empty Hash' do
124
+ expect(response.sanitized_response_meta).to eql({})
125
+ end
126
+ end
127
+
128
+ context 'when response_body is empty' do
129
+ let(:response_body) { '' }
130
+
131
+ it 'returns an empty Hash' do
132
+ expect(response.sanitized_response_meta).to eql({})
133
+ end
134
+ end
135
+
136
+ context 'when response_body is NOT parseable' do
137
+ let(:response_body) { 'foo' }
138
+
139
+ before { allow(JSON).to receive(:parse).and_raise JSON::ParserError }
140
+
141
+ it 'returns an empty Hash' do
142
+ expect(response.sanitized_response_meta).to eql({})
143
+ end
144
+ end
145
+
146
+ context 'when response_body is parseable' do
147
+ context 'and the connection_options contain a root_element' do
148
+ let(:connection_options) { { root_element: :foobar } }
149
+ let(:response) { described_class.new double.as_null_object, connection_options }
150
+
151
+ let(:response_body) { '{"foobar":{"id":"12"},"meta":{"total":"1"}}' }
152
+
153
+ it 'returns the parsed meta from root' do
154
+ expect(response.sanitized_response_meta).to match({ 'total' => '1' })
155
+ end
156
+ end
157
+
158
+ context 'and the connection_options do NOT contain a root_element' do
159
+ let(:response_body) { '{"id":"12","meta":{"total":"1"}}' }
160
+
161
+ it 'returns the parsed meta from root' do
162
+ expect(response.sanitized_response_meta).to match({ 'total' => '1' })
163
+ end
164
+ end
165
+ end
166
+ end
167
+
115
168
  describe '#error_messages_response_body' do
116
169
  let(:response) { described_class.new double.as_null_object }
117
170
 
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe RemoteResource::VERSION do
4
4
 
5
- it { should eql '0.4.4' }
5
+ it { should eql '0.4.5' }
6
6
  end
7
7
 
8
8
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddy_remote_resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan van der Pas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-30 00:00:00.000000000 Z
11
+ date: 2016-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler