protip 0.19.0 → 0.19.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 476db8dfd984fed8f163c6bb7c1fbd90263edf66
4
- data.tar.gz: 38baca64b99c979275fdc99c42d9d0465bb3be3c
3
+ metadata.gz: c710d883e4cf3fb67e30f0038db21c584a17bacb
4
+ data.tar.gz: ae3837edd3f0c189bdc6e7d913b6fef0b545d303
5
5
  SHA512:
6
- metadata.gz: b5d0986cd5e3467ec7f73990b26a6e53cc13a848348d4e679fa8624c2427194d09033a6d95416db8204724663ebccd140ea09401ed681c1017be86c5cdb5b0e9
7
- data.tar.gz: 203784715d0d75c2a5a9f7d933e2e836a85e837a4dd68277f42f98a827698e18d829d92533e7bed254e6cd429729f6b1148bd0c58d6097d6ef8a379fcfac331f
6
+ metadata.gz: 01c9c0534123cc276cf12ccfcb20fb43901ae947091168d726797ea1a8951bbff0b437168fef560fd69f74077baac8e0063ac1edc958ca567c5c5760e094d67b
7
+ data.tar.gz: 2f30d7481ba416358e644b0073653b2af239c1e911483e758104a60df7f6779c8993486244061b17c5dc14b40ed39d0257ea5ce185089ff4ed2582b2cdab5c59
@@ -0,0 +1,39 @@
1
+ syntax = "proto3";
2
+
3
+ package protip.messages;
4
+
5
+ message RepeatedDouble {
6
+ repeated double values = 1;
7
+ }
8
+
9
+ message RepeatedFloat {
10
+ repeated float values = 1;
11
+ }
12
+
13
+ message RepeatedInt64 {
14
+ repeated int64 values = 1;
15
+ }
16
+
17
+ message RepeatedUInt64 {
18
+ repeated uint64 values = 1;
19
+ }
20
+
21
+ message RepeatedInt32 {
22
+ repeated int32 values = 1;
23
+ }
24
+
25
+ message RepeatedUInt32 {
26
+ repeated uint32 values = 1;
27
+ }
28
+
29
+ message RepeatedBool {
30
+ repeated bool values = 1;
31
+ }
32
+
33
+ message RepeatedString {
34
+ repeated string values = 1;
35
+ }
36
+
37
+ message RepeatedBytes {
38
+ repeated bytes values = 1;
39
+ }
@@ -0,0 +1,48 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: protip/messages/repeated.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ Google::Protobuf::DescriptorPool.generated_pool.build do
7
+ add_message "protip.messages.RepeatedDouble" do
8
+ repeated :values, :double, 1
9
+ end
10
+ add_message "protip.messages.RepeatedFloat" do
11
+ repeated :values, :float, 1
12
+ end
13
+ add_message "protip.messages.RepeatedInt64" do
14
+ repeated :values, :int64, 1
15
+ end
16
+ add_message "protip.messages.RepeatedUInt64" do
17
+ repeated :values, :uint64, 1
18
+ end
19
+ add_message "protip.messages.RepeatedInt32" do
20
+ repeated :values, :int32, 1
21
+ end
22
+ add_message "protip.messages.RepeatedUInt32" do
23
+ repeated :values, :uint32, 1
24
+ end
25
+ add_message "protip.messages.RepeatedBool" do
26
+ repeated :values, :bool, 1
27
+ end
28
+ add_message "protip.messages.RepeatedString" do
29
+ repeated :values, :string, 1
30
+ end
31
+ add_message "protip.messages.RepeatedBytes" do
32
+ repeated :values, :bytes, 1
33
+ end
34
+ end
35
+
36
+ module Protip
37
+ module Messages
38
+ RepeatedDouble = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedDouble").msgclass
39
+ RepeatedFloat = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedFloat").msgclass
40
+ RepeatedInt64 = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedInt64").msgclass
41
+ RepeatedUInt64 = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedUInt64").msgclass
42
+ RepeatedInt32 = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedInt32").msgclass
43
+ RepeatedUInt32 = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedUInt32").msgclass
44
+ RepeatedBool = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedBool").msgclass
45
+ RepeatedString = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedString").msgclass
46
+ RepeatedBytes = Google::Protobuf::DescriptorPool.generated_pool.lookup("protip.messages.RepeatedBytes").msgclass
47
+ end
48
+ end
@@ -7,6 +7,7 @@ require 'protip/converter'
7
7
  require 'protip/messages/currency'
8
8
  require 'protip/messages/money'
9
9
  require 'protip/messages/range'
10
+ require 'protip/messages/repeated'
10
11
  require 'protip/messages/types'
11
12
  require 'google/protobuf'
12
13
  module Protip
@@ -57,13 +58,19 @@ module Protip
57
58
  }
58
59
 
59
60
  ## Standard wrappers
60
- %w(Int64 Int32 UInt64 UInt32 Double Float String Bytes).map{|type| "google.protobuf.#{type}Value"}.each do |name|
61
- @conversions[name] = {
61
+ %w(Int64 Int32 UInt64 UInt32 Double Float String Bytes).each do |type|
62
+ @conversions["google.protobuf.#{type}Value"] = {
62
63
  to_object: ->(message) { message.value },
63
64
  to_message: lambda do |value, message_class|
64
65
  message_class.new value: value
65
66
  end
66
67
  }
68
+ @conversions["protip.messages.Repeated#{type}"] = {
69
+ to_object: ->(message) { message.values.to_a.freeze },
70
+ to_message: lambda do |value, message_class|
71
+ message_class.new values: (value.is_a?(Enumerable) ? value : [value])
72
+ end
73
+ }
67
74
  end
68
75
 
69
76
  conversions['google.protobuf.BoolValue'] = {
@@ -73,6 +80,14 @@ module Protip
73
80
  end
74
81
  }
75
82
 
83
+ conversions['protip.messages.RepeatedBool'] = {
84
+ to_object: ->(message) { message.values.to_a.freeze },
85
+ to_message: lambda do |value, message_class|
86
+ message_class.new values: (value.is_a?(Enumerable) ? value : [value]).map{|v| value_to_boolean(v)}
87
+ end
88
+
89
+ }
90
+
76
91
  ## ActiveSupport objects
77
92
  conversions['protip.messages.ActiveSupport.TimeWithZone'] = {
78
93
  to_object: ->(message) {
@@ -17,6 +17,15 @@ describe Protip::StandardConverter do
17
17
  ]
18
18
  end
19
19
 
20
+ let(:repeated_integer_types) do
21
+ [
22
+ Protip::Messages::RepeatedInt64,
23
+ Protip::Messages::RepeatedInt32,
24
+ Protip::Messages::RepeatedUInt64,
25
+ Protip::Messages::RepeatedUInt32,
26
+ ]
27
+ end
28
+
20
29
  let(:float_types) do
21
30
  [
22
31
  Google::Protobuf::FloatValue,
@@ -24,18 +33,37 @@ describe Protip::StandardConverter do
24
33
  ]
25
34
  end
26
35
 
36
+ let(:repeated_float_types) do
37
+ [
38
+ Protip::Messages::RepeatedFloat,
39
+ Protip::Messages::RepeatedDouble,
40
+ ]
41
+ end
42
+
27
43
  let(:bool_types) do
28
44
  [Google::Protobuf::BoolValue]
29
45
  end
30
46
 
47
+ let(:repeated_bool_types) do
48
+ [Protip::Messages::RepeatedBool]
49
+ end
50
+
31
51
  let(:string_types) do
32
52
  [Google::Protobuf::StringValue]
33
53
  end
34
54
 
55
+ let(:repeated_string_types) do
56
+ [Protip::Messages::RepeatedString]
57
+ end
58
+
35
59
  let(:bytes_types) do
36
60
  [Google::Protobuf::BytesValue]
37
61
  end
38
62
 
63
+ let(:repeated_bytes_types) do
64
+ [Protip::Messages::RepeatedBytes]
65
+ end
66
+
39
67
  let(:protip_types) do
40
68
  [
41
69
  Protip::Messages::Range,
@@ -45,9 +73,16 @@ describe Protip::StandardConverter do
45
73
  ]
46
74
  end
47
75
 
76
+ let(:integer_value) { 6 }
77
+ let(:float_value) { 5.5 }
78
+ let(:bool_value) { true }
79
+ let(:string_value) { 'asdf' }
80
+ let(:bytes_value) { Base64.decode64("U2VuZCByZWluZm9yY2VtZW50cw==\n") }
81
+
48
82
  describe '#convertible?' do
49
83
  it 'converts all standard types' do
50
- (integer_types + float_types + string_types + bool_types + protip_types).each do |message_class|
84
+ (integer_types + float_types + string_types + bool_types + protip_types + repeated_integer_types +
85
+ repeated_float_types + repeated_string_types + repeated_bool_types).each do |message_class|
51
86
  assert converter.convertible?(message_class), "expected type #{message_class.descriptor.name} not convertible"
52
87
  end
53
88
  end
@@ -62,11 +97,11 @@ describe Protip::StandardConverter do
62
97
  describe '#to_object' do
63
98
  it 'converts wrapper types' do
64
99
  {
65
- 6 => integer_types,
66
- 5.5 => float_types,
67
- false => bool_types,
68
- 'asdf' => string_types,
69
- Base64.decode64("U2VuZCByZWluZm9yY2VtZW50cw==\n") => bytes_types,
100
+ integer_value => integer_types,
101
+ float_value => float_types,
102
+ bool_value => bool_types,
103
+ string_value => string_types,
104
+ bytes_value => bytes_types,
70
105
  }.each do |value, message_types|
71
106
  message_types.each do |message_class|
72
107
  assert_equal value, converter.to_object(message_class.new value: value)
@@ -74,6 +109,25 @@ describe Protip::StandardConverter do
74
109
  end
75
110
  end
76
111
 
112
+ it 'converts repeated types to an immutable array' do
113
+ {
114
+ integer_value => repeated_integer_types,
115
+ float_value => repeated_float_types,
116
+ bool_value => repeated_bool_types,
117
+ string_value => repeated_string_types,
118
+ bytes_value => repeated_bytes_types,
119
+ }.each do |value, message_types|
120
+ message_types.each do |message_class|
121
+ result = converter.to_object(message_class.new values: [value])
122
+ assert_equal [value], result
123
+ exception = assert_raises RuntimeError do
124
+ result << value
125
+ end
126
+ assert_equal 'can\'t modify frozen Array', exception.message
127
+ end
128
+ end
129
+ end
130
+
77
131
  it 'converts dates' do
78
132
  date = converter.to_object(::Protip::Messages::Date.new year: 2015, month: 2, day: 9)
79
133
  assert_instance_of ::Date, date
@@ -114,11 +168,11 @@ describe Protip::StandardConverter do
114
168
  describe '#to_message' do
115
169
  it 'converts wrapper types' do
116
170
  {
117
- 6 => integer_types,
118
- 5.5 => float_types,
119
- false => bool_types,
120
- 'asdf' => string_types,
121
- Base64.decode64("U2VuZCByZWluZm9yY2VtZW50cw==\n") => bytes_types,
171
+ integer_value => integer_types,
172
+ float_value => float_types,
173
+ bool_value => bool_types,
174
+ string_value => string_types,
175
+ bytes_value => bytes_types,
122
176
  }.each do |value, message_types|
123
177
  message_types.each do |message_class|
124
178
  assert_equal message_class.new(value: value), converter.to_message(value, message_class)
@@ -126,6 +180,34 @@ describe Protip::StandardConverter do
126
180
  end
127
181
  end
128
182
 
183
+ it 'converts repeated types when set with a scalar value' do
184
+ {
185
+ integer_value => repeated_integer_types,
186
+ float_value => repeated_float_types,
187
+ bool_value => repeated_bool_types,
188
+ string_value => repeated_string_types,
189
+ bytes_value => repeated_bytes_types,
190
+ }.each do |value, message_types|
191
+ message_types.each do |message_class|
192
+ assert_equal message_class.new(values: [value]), converter.to_message(value, message_class)
193
+ end
194
+ end
195
+ end
196
+
197
+ it 'converts repeated types when set with an enumerable value' do
198
+ {
199
+ integer_value => repeated_integer_types,
200
+ float_value => repeated_float_types,
201
+ bool_value => repeated_bool_types,
202
+ string_value => repeated_string_types,
203
+ bytes_value => repeated_bytes_types,
204
+ }.each do |value, message_types|
205
+ message_types.each do |message_class|
206
+ assert_equal message_class.new(values: [value, value]), converter.to_message([value, value], message_class)
207
+ end
208
+ end
209
+ end
210
+
129
211
  it 'converts dates' do
130
212
  date = ::Date.new(2012, 5, 7)
131
213
  assert_equal 7, date.day # Sanity check argument order
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.19.0
4
+ version: 0.19.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AngelList
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-04 00:00:00.000000000 Z
11
+ date: 2016-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -199,6 +199,7 @@ files:
199
199
  - definitions/protip/messages/errors.proto
200
200
  - definitions/protip/messages/money.proto
201
201
  - definitions/protip/messages/range.proto
202
+ - definitions/protip/messages/repeated.proto
202
203
  - definitions/protip/messages/types.proto
203
204
  - lib/google/protobuf/wrappers.rb
204
205
  - lib/protip.rb
@@ -211,6 +212,7 @@ files:
211
212
  - lib/protip/messages/errors.rb
212
213
  - lib/protip/messages/money.rb
213
214
  - lib/protip/messages/range.rb
215
+ - lib/protip/messages/repeated.rb
214
216
  - lib/protip/messages/types.rb
215
217
  - lib/protip/resource.rb
216
218
  - lib/protip/resource/associations/association.rb