protip 0.11.0 → 0.11.1
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/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
|