protip 0.11.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/protip/messages/array.rb +1 -1
- data/lib/protip/wrapper.rb +30 -12
- data/test/functional/protip/resource_test.rb +3 -1
- data/test/unit/protip/resource_test.rb +1 -1
- data/test/unit/protip/wrapper_test.rb +63 -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: eacbefd07c48cf491c512855a68a820c48d44be6
|
4
|
+
data.tar.gz: f79accd3d4f140b5f7e6696d6c27c19e76726bce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3359ad844b26d2792f63e09254a6266810eb09e21915be9c5fe4fdfcc0752bb70bff905d107be4edba1acfad6911040ef13885b076a54767842d8b9f2e9fefe0
|
7
|
+
data.tar.gz: 574b9fab112f596088f28f66119a246efd64133a1732a3193b5556457857d8edee814eb5749f957ef1b5f6ff986351486770acacbe2b2405978f0fdb79272c0a
|
data/lib/protip/wrapper.rb
CHANGED
@@ -109,12 +109,23 @@ module Protip
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def as_json
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
112
|
+
to_h.as_json
|
113
|
+
end
|
114
|
+
|
115
|
+
# @return [Hash] A hash whose keys are the fields of our message, and whose values are the Ruby representations
|
116
|
+
# (either nested hashes or converted messages) of the field values.
|
117
|
+
def to_h
|
118
|
+
hash = {}
|
119
|
+
message.class.descriptor.each do |field|
|
120
|
+
value = public_send(field.name)
|
121
|
+
if field.label == :repeated
|
122
|
+
value.map!{|v| v.is_a?(self.class) ? v.to_h : v}
|
123
|
+
else
|
124
|
+
value = (value.is_a?(self.class) ? value.to_h : value)
|
125
|
+
end
|
126
|
+
hash[field.name.to_sym] = value
|
116
127
|
end
|
117
|
-
|
128
|
+
hash
|
118
129
|
end
|
119
130
|
|
120
131
|
def ==(wrapper)
|
@@ -127,18 +138,25 @@ module Protip
|
|
127
138
|
private
|
128
139
|
|
129
140
|
def get(field)
|
141
|
+
if field.label == :repeated
|
142
|
+
message[field.name].map{|value| to_ruby_value field, value}
|
143
|
+
else
|
144
|
+
to_ruby_value field, message[field.name]
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
# Helper for getting values - converts the value for the given field to one that we can return to the user
|
149
|
+
def to_ruby_value(field, value)
|
130
150
|
if field.type == :message
|
131
|
-
if nil ==
|
151
|
+
if nil == value
|
132
152
|
nil
|
153
|
+
elsif converter.convertible?(field.subtype.msgclass)
|
154
|
+
converter.to_object value
|
133
155
|
else
|
134
|
-
|
135
|
-
converter.to_object message[field.name]
|
136
|
-
else
|
137
|
-
self.class.new message[field.name], converter
|
138
|
-
end
|
156
|
+
self.class.new value, converter
|
139
157
|
end
|
140
158
|
else
|
141
|
-
|
159
|
+
value
|
142
160
|
end
|
143
161
|
end
|
144
162
|
|
@@ -92,9 +92,11 @@ describe 'Protip::Resource (functional)' do
|
|
92
92
|
describe '.all' do
|
93
93
|
describe 'with a successful server response' do
|
94
94
|
before do
|
95
|
+
# If this is erroring out, change :string to :bytes in array.rb - the Ruby compiler currently compiles
|
96
|
+
# incorrectly.
|
95
97
|
response = Protip::Messages::Array.new(messages: ['bilbo', 'baggins'].each_with_index.map do |name, index|
|
96
98
|
message = resource_message_class.new(id: int_message_class.new(value: index), ordered_tests: name, nested_int: int_message_class.new(value: index + 42))
|
97
|
-
message.class.encode(message)
|
99
|
+
message.class.encode(message)
|
98
100
|
end)
|
99
101
|
stub_request(:get, 'https://external.service/resources')
|
100
102
|
.to_return body: response.class.encode(response)
|
@@ -130,7 +130,7 @@ module Protip::ResourceTest # Namespace for internal constants
|
|
130
130
|
messages: [
|
131
131
|
resource_message_class.new(string: 'banjo', id: 1),
|
132
132
|
resource_message_class.new(string: 'kazooie', id: 2),
|
133
|
-
].map{|m| resource_message_class.encode(m)
|
133
|
+
].map{|m| resource_message_class.encode(m)}
|
134
134
|
})
|
135
135
|
end
|
136
136
|
|
@@ -215,6 +215,69 @@ module Protip::WrapperTest # namespace for internal constants
|
|
215
215
|
end
|
216
216
|
end
|
217
217
|
|
218
|
+
describe '#convert' do
|
219
|
+
let :wrapped_message do
|
220
|
+
m = message_class.new({
|
221
|
+
string: 'test',
|
222
|
+
inner: inner_message_class.new(value: 1),
|
223
|
+
})
|
224
|
+
m.strings += %w(test1 test2)
|
225
|
+
[2, 3].each do |i|
|
226
|
+
m.inners.push inner_message_class.new(value: i)
|
227
|
+
end
|
228
|
+
m
|
229
|
+
end
|
230
|
+
before do
|
231
|
+
converter.stubs(:convertible?).with(message_class).returns false
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'never checks the convertibility of the top-level message' do
|
235
|
+
converter.expects(:convertible?).with(message_class).never
|
236
|
+
converter.stubs(:convertible?).with(inner_message_class).returns false
|
237
|
+
assert_instance_of Hash, wrapper.to_h
|
238
|
+
end
|
239
|
+
|
240
|
+
describe 'with a nested convertible message' do
|
241
|
+
before do
|
242
|
+
converter.stubs(:convertible?).with(inner_message_class).returns true
|
243
|
+
[1, 2, 3].each{|i| converter.stubs(:to_object).with(inner_message_class.new(value: i)).returns(i)}
|
244
|
+
end
|
245
|
+
it 'returns a hash with the nested message converted' do
|
246
|
+
assert_equal 1, wrapper.to_h[:inner]
|
247
|
+
end
|
248
|
+
it 'converts a repeated instance of the nested message to an array' do
|
249
|
+
assert_equal [2, 3], wrapper.to_h[:inners]
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe 'with a nested inconvertible message' do
|
254
|
+
before do
|
255
|
+
converter.stubs(:convertible?).with(inner_message_class).returns false
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'contains keys for all fields of the parent message' do
|
259
|
+
assert_equal %i(string strings inner inners inner_blank).sort, wrapper.to_h.keys.sort
|
260
|
+
end
|
261
|
+
it 'assigns nil for missing nested messages' do
|
262
|
+
hash = wrapper.to_h
|
263
|
+
assert hash.has_key?(:inner_blank)
|
264
|
+
assert_nil hash[:inner_blank]
|
265
|
+
end
|
266
|
+
it 'assigns a hash for a scalar instance of the inconvertible message' do
|
267
|
+
assert_equal({value: 1, note: ''}, wrapper.to_h[:inner])
|
268
|
+
end
|
269
|
+
it 'assigns an array of hashes for a repeated instance of the inconvertible message' do
|
270
|
+
assert_equal([{value: 2, note: ''}, {value: 3, note: ''}], wrapper.to_h[:inners])
|
271
|
+
end
|
272
|
+
it 'assigns primitive fields directly' do
|
273
|
+
assert_equal 'test', wrapper.to_h[:string]
|
274
|
+
end
|
275
|
+
it 'assigns an array for repeated primitive fields' do
|
276
|
+
assert_equal %w(test1 test2), wrapper.to_h[:strings]
|
277
|
+
end
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
218
281
|
describe '#get' do
|
219
282
|
it 'does not convert simple fields' do
|
220
283
|
converter.expects(:convertible?).never
|
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.1
|
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-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|