protip 0.11.1 → 0.11.2
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/protip/resource.rb +12 -4
- data/test/unit/protip/resource_test.rb +98 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ab7e84f6fd394d2b5cb52c67d1a5db5f245c36a
|
4
|
+
data.tar.gz: 4726d4e87f0453b0c2bd0bc55c2ac52ff23c58e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4721c4d9f10135735502dccfb105532d4b6b31a74dcda08b1298bb0cc9bec791897c90002997c826cf399fb3953018bfdab5f5e62710834ccf99a21d5a5c458f
|
7
|
+
data.tar.gz: cde835698f8a9feb4eb3743b7c3bfdd5ab2bb0e42d0963cb0ebd1849aa96640d6f2169db6302901ca1a4e4e33c5385ce16ae2e86efb674672dbbb5ff1114aa28
|
data/lib/protip/resource.rb
CHANGED
@@ -178,13 +178,17 @@ module Protip
|
|
178
178
|
if query
|
179
179
|
if actions.include?(:show)
|
180
180
|
define_singleton_method :find do |id, query_params = {}|
|
181
|
-
|
181
|
+
wrapper = ::Protip::Wrapper.new(query.new, converter)
|
182
|
+
wrapper.assign_attributes query_params
|
183
|
+
SearchMethods.show(self, id, wrapper.message)
|
182
184
|
end
|
183
185
|
end
|
184
186
|
|
185
187
|
if actions.include?(:index)
|
186
188
|
define_singleton_method :all do |query_params = {}|
|
187
|
-
|
189
|
+
wrapper = ::Protip::Wrapper.new(query.new, converter)
|
190
|
+
wrapper.assign_attributes query_params
|
191
|
+
SearchMethods.index(self, wrapper.message)
|
188
192
|
end
|
189
193
|
end
|
190
194
|
else
|
@@ -209,7 +213,9 @@ module Protip
|
|
209
213
|
def member(action:, method:, request: nil, response: nil)
|
210
214
|
if request
|
211
215
|
define_method action do |request_params = {}|
|
212
|
-
|
216
|
+
wrapper = ::Protip::Wrapper.new(request.new, self.class.converter)
|
217
|
+
wrapper.assign_attributes request_params
|
218
|
+
ExtraMethods.member self, action, method, wrapper.message, response
|
213
219
|
end
|
214
220
|
else
|
215
221
|
define_method action do
|
@@ -221,7 +227,9 @@ module Protip
|
|
221
227
|
def collection(action:, method:, request: nil, response: nil)
|
222
228
|
if request
|
223
229
|
define_singleton_method action do |request_params = {}|
|
224
|
-
|
230
|
+
wrapper = ::Protip::Wrapper.new(request.new, converter)
|
231
|
+
wrapper.assign_attributes request_params
|
232
|
+
ExtraMethods.collection self, action, method, wrapper.message, response
|
225
233
|
end
|
226
234
|
else
|
227
235
|
define_singleton_method action do
|
@@ -21,6 +21,7 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
21
21
|
|
22
22
|
add_message 'resource_query' do
|
23
23
|
optional :param, :string, 1
|
24
|
+
optional :nested_message, :message, 2, 'nested_message'
|
24
25
|
end
|
25
26
|
|
26
27
|
# Give these things a different structure than resource_query_class,
|
@@ -28,6 +29,7 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
28
29
|
# type but still yielding correct results.
|
29
30
|
add_message 'action_query' do
|
30
31
|
optional :param, :string, 4
|
32
|
+
optional :nested_message, :message, 5, 'nested_message'
|
31
33
|
end
|
32
34
|
add_message 'action_response' do
|
33
35
|
optional :response, :string, 3
|
@@ -124,6 +126,73 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
124
126
|
end
|
125
127
|
end
|
126
128
|
|
129
|
+
# index/find/member/collection actions should all convert more complex Ruby objects to submessages in their
|
130
|
+
# queries
|
131
|
+
def self.it_converts_query_parameters
|
132
|
+
before do
|
133
|
+
# Sanity check - the user should specify all these variables in "let" statements
|
134
|
+
# http_method, path, query_class, and response specify the expected call to the client
|
135
|
+
# nested_message_field specifies the field on the query class that may or may not be convertible, and should
|
136
|
+
# refer to a submessage field of type nested_message_class
|
137
|
+
# invoke_method! should call the desired method, assuming that +parameters+ contains the query parameters to
|
138
|
+
# pass in (e.g. `resource_class.all(parameters)` or `resource_class.find('id', parameters)`)
|
139
|
+
%i(
|
140
|
+
http_method
|
141
|
+
path
|
142
|
+
query_class
|
143
|
+
response
|
144
|
+
nested_message_field
|
145
|
+
invoke_method!
|
146
|
+
).each do |name|
|
147
|
+
raise "Must define #{name} before invoking `it_converts_query_parameters`" unless respond_to?(name)
|
148
|
+
end
|
149
|
+
|
150
|
+
# All tests expect the same HTTP call
|
151
|
+
client.expects(:request)
|
152
|
+
.once
|
153
|
+
.with(method: http_method, path: path,
|
154
|
+
message: query_class.new(:"#{nested_message_field}" => nested_message_class.new(number: 43)),
|
155
|
+
response_type: (nil == response ? nil : response.class),
|
156
|
+
).returns(response)
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
describe 'with a convertible message' do
|
162
|
+
before do
|
163
|
+
resource_class.converter.stubs(:convertible?).with(nested_message_class).returns(true)
|
164
|
+
resource_class.converter.stubs(:to_message).with(42, nested_message_class).returns(nested_message_class.new(number: 43))
|
165
|
+
end
|
166
|
+
|
167
|
+
let(:parameters) { {"#{nested_message_field}" => 42} }
|
168
|
+
it 'converts query parameters' do
|
169
|
+
invoke_method!
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe 'with an inconvertible message' do
|
174
|
+
before do
|
175
|
+
resource_class.converter.stubs(:convertible?).with(nested_message_class).returns(false)
|
176
|
+
resource_class.converter.expects(:to_message).never
|
177
|
+
end
|
178
|
+
|
179
|
+
describe 'with a hash' do
|
180
|
+
let(:parameters) { {"#{nested_message_field}" => {number: 43}} }
|
181
|
+
it 'allows a hash to be provided for the nested message' do
|
182
|
+
invoke_method!
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe 'with a submessage' do
|
187
|
+
let(:parameters) { {"#{nested_message_field}" => nested_message_class.new(number: 43)} }
|
188
|
+
it 'allows a submessage to be provided directly' do
|
189
|
+
invoke_method!
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
|
127
196
|
describe '.all' do
|
128
197
|
let :response do
|
129
198
|
Protip::Messages::Array.new({
|
@@ -213,6 +282,15 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
213
282
|
.returns(response)
|
214
283
|
resource_class.all
|
215
284
|
end
|
285
|
+
|
286
|
+
describe '(convertibility)' do
|
287
|
+
let(:http_method) { Net::HTTP::Get }
|
288
|
+
let(:path) { 'base_path' }
|
289
|
+
let(:query_class) { resource_query_class }
|
290
|
+
let(:nested_message_field) { :nested_message }
|
291
|
+
let(:invoke_method!) { resource_class.all(parameters) }
|
292
|
+
it_converts_query_parameters
|
293
|
+
end
|
216
294
|
end
|
217
295
|
end
|
218
296
|
|
@@ -288,6 +366,15 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
288
366
|
.returns(response)
|
289
367
|
resource_class.find 6
|
290
368
|
end
|
369
|
+
|
370
|
+
describe '(convertibility)' do
|
371
|
+
let(:http_method) { Net::HTTP::Get }
|
372
|
+
let(:path) { 'base_path/5' }
|
373
|
+
let(:query_class) { resource_query_class }
|
374
|
+
let(:nested_message_field) { :nested_message }
|
375
|
+
let(:invoke_method!) { resource_class.find 5, parameters }
|
376
|
+
it_converts_query_parameters
|
377
|
+
end
|
291
378
|
end
|
292
379
|
end
|
293
380
|
|
@@ -537,6 +624,8 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
537
624
|
end
|
538
625
|
end
|
539
626
|
|
627
|
+
let(:response) { nil }
|
628
|
+
|
540
629
|
it 'sends a request with a body to the expected endpoint' do
|
541
630
|
client.expects(:request)
|
542
631
|
.once
|
@@ -554,6 +643,15 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
554
643
|
.returns(nil)
|
555
644
|
target.action
|
556
645
|
end
|
646
|
+
|
647
|
+
describe '(convertibility)' do
|
648
|
+
let(:http_method) { Net::HTTP::Post }
|
649
|
+
let(:path) { path }
|
650
|
+
let(:query_class) { action_query_class }
|
651
|
+
let(:nested_message_field) { :nested_message }
|
652
|
+
let(:invoke_method!) { target.action(parameters) }
|
653
|
+
it_converts_query_parameters
|
654
|
+
end
|
557
655
|
end
|
558
656
|
|
559
657
|
describe 'with a response type' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AngelList
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|