protobuf-activerecord 3.5.1 → 3.6.0
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 +5 -5
- data/lib/protobuf/active_record/serialization.rb +113 -92
- data/lib/protobuf/active_record/version.rb +1 -1
- data/protobuf-activerecord.gemspec +1 -0
- metadata +17 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b0baf0983fc1d7f24b7269e151478bea798a8f1193037541df17a8818b2ba455
|
4
|
+
data.tar.gz: d5f4537f6c7d8967d268435f88872f5f1632ba6ca1fdfd318917a349aaef1879
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d20b5632121f432b90ab19b52bee9ccd75c39ad8473e3b8f97ecbf87bf8d84297581b64a5b6831050f9dea1a4b7b553e30431049cb186dd8be35f12b045fdcc
|
7
|
+
data.tar.gz: a32ced82a52061de22ac52f236df76f35c38870edf8b28693d2a4ae2d093274684a3224fcc181b893a0bf214f65319fe29a73410caf2316b2357694b05052cb9
|
@@ -20,6 +20,10 @@ module Protobuf
|
|
20
20
|
end
|
21
21
|
|
22
22
|
module ClassMethods
|
23
|
+
def _protobuf_field_objects
|
24
|
+
@_protobuf_field_objects ||= {}
|
25
|
+
end
|
26
|
+
|
23
27
|
def _protobuf_field_options
|
24
28
|
@_protobuf_field_options ||= {}
|
25
29
|
end
|
@@ -139,96 +143,115 @@ module Protobuf
|
|
139
143
|
@protobuf_message
|
140
144
|
end
|
141
145
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
146
|
+
class CollectionAssociationCaller
|
147
|
+
def initialize(method_name)
|
148
|
+
@method_name = method_name
|
149
|
+
end
|
150
|
+
|
151
|
+
def call(selph)
|
152
|
+
selph.__send__(@method_name).to_a
|
153
|
+
rescue NameError # Has happened when field is not on model or ignored from db
|
154
|
+
return nil
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def _protobuf_collection_association_object(field)
|
159
|
+
CollectionAssociationCaller.new(field)
|
160
|
+
end
|
161
|
+
|
162
|
+
class DateCaller
|
163
|
+
def initialize(field)
|
164
|
+
@field = field
|
165
|
+
end
|
166
|
+
|
167
|
+
def call(selph)
|
168
|
+
value = selph.__send__(@field)
|
169
|
+
|
170
|
+
if value
|
171
|
+
value.to_time(:utc).to_i
|
172
|
+
else
|
173
|
+
nil
|
148
174
|
end
|
149
|
-
|
175
|
+
rescue NameError # Has happened when field is not on model or ignored from db
|
176
|
+
return nil
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
class DateTimeCaller
|
181
|
+
def initialize(field)
|
182
|
+
@field = field
|
183
|
+
end
|
184
|
+
|
185
|
+
def call(selph)
|
186
|
+
value = selph.__send__(@field)
|
187
|
+
|
188
|
+
if value
|
189
|
+
value.to_i
|
190
|
+
else
|
191
|
+
nil
|
192
|
+
end
|
193
|
+
rescue NameError # Has happened when field is not on model or ignored from db
|
194
|
+
return nil
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
class NoConversionCaller
|
199
|
+
def initialize(field)
|
200
|
+
@field = field
|
201
|
+
end
|
202
|
+
|
203
|
+
def call(selph)
|
204
|
+
selph.__send__(@field)
|
205
|
+
rescue NameError # Has happened when field is not on model or ignored from db
|
206
|
+
return nil
|
207
|
+
end
|
150
208
|
end
|
151
209
|
|
152
|
-
def
|
210
|
+
def _protobuf_convert_to_fields_object(field)
|
153
211
|
is_datetime_time_or_timestamp_column = _protobuf_date_datetime_time_or_timestamp_column?(field)
|
154
212
|
is_date_column = _protobuf_date_column?(field)
|
155
213
|
|
156
214
|
if is_datetime_time_or_timestamp_column
|
157
215
|
if is_date_column
|
158
|
-
|
159
|
-
def _protobuf_active_record_serialize_#{field}
|
160
|
-
value = #{field}
|
161
|
-
return nil if value.nil?
|
162
|
-
|
163
|
-
value.to_time(:utc).to_i
|
164
|
-
rescue NameError # Has happened when field is not on model or ignored from db
|
165
|
-
return nil
|
166
|
-
end
|
167
|
-
RUBY
|
216
|
+
DateCaller.new(field)
|
168
217
|
else
|
169
|
-
|
170
|
-
def _protobuf_active_record_serialize_#{field}
|
171
|
-
value = #{field}
|
172
|
-
return nil if value.nil?
|
173
|
-
|
174
|
-
value.to_i
|
175
|
-
rescue NameError # Has happened when field is not on model or ignored from db
|
176
|
-
return nil
|
177
|
-
end
|
178
|
-
RUBY
|
218
|
+
DateTimeCaller.new(field)
|
179
219
|
end
|
180
220
|
else
|
181
|
-
|
182
|
-
def _protobuf_active_record_serialize_#{field}
|
183
|
-
#{field}
|
184
|
-
rescue NameError # Has happened when field is not on model or ignored from db
|
185
|
-
return nil
|
186
|
-
end
|
187
|
-
RUBY
|
221
|
+
NoConversionCaller.new(field)
|
188
222
|
end
|
189
223
|
end
|
190
224
|
|
191
|
-
def
|
192
|
-
|
193
|
-
def _protobuf_active_record_serialize_#{field}
|
194
|
-
self.class._protobuf_field_transformers[:#{field}].call(self)
|
195
|
-
end
|
196
|
-
RUBY
|
225
|
+
def _protobuf_field_transformer_object(field)
|
226
|
+
_protobuf_field_transformers[field]
|
197
227
|
end
|
198
228
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
229
|
+
class NilMethodCaller
|
230
|
+
def initialize; end
|
231
|
+
|
232
|
+
def call(selph)
|
233
|
+
nil
|
234
|
+
end
|
205
235
|
end
|
206
236
|
|
207
|
-
def
|
208
|
-
|
237
|
+
def _protobuf_nil_object(field)
|
238
|
+
NilMethodCaller.new
|
239
|
+
end
|
209
240
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
219
|
-
def _protobuf_active_record_serialize_#{field}
|
220
|
-
self.class.__send__(:#{transformer_method}, self)
|
221
|
-
end
|
222
|
-
RUBY
|
223
|
-
end
|
224
|
-
else
|
225
|
-
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
226
|
-
def _protobuf_active_record_serialize_#{field}
|
227
|
-
#{transformer_method}
|
228
|
-
end
|
229
|
-
RUBY
|
241
|
+
class FieldSymbolTransformerCaller
|
242
|
+
def initialize(instance_class, method_name)
|
243
|
+
@instance_class = instance_class
|
244
|
+
@method_name = method_name
|
245
|
+
end
|
246
|
+
|
247
|
+
def call(selph)
|
248
|
+
@instance_class.__send__(@method_name, selph)
|
230
249
|
end
|
231
250
|
end
|
251
|
+
|
252
|
+
def _protobuf_symbol_transformer_object(field)
|
253
|
+
FieldSymbolTransformerCaller.new(self, _protobuf_symbol_transformer_object[field])
|
254
|
+
end
|
232
255
|
end
|
233
256
|
|
234
257
|
# :nodoc:
|
@@ -301,34 +324,32 @@ module Protobuf
|
|
301
324
|
# in terms of optimization (`while` is slightly faster as no block carried through)
|
302
325
|
while attribute_number < limit
|
303
326
|
field = field_attributes[attribute_number]
|
327
|
+
field_object = _protobuf_field_objects(field)
|
328
|
+
hash[field] = field_object.call(self)
|
329
|
+
attribute_number += 1
|
330
|
+
end
|
304
331
|
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
self.class._protobuf_write_convert_to_fields_method(field)
|
320
|
-
end
|
332
|
+
hash
|
333
|
+
end
|
334
|
+
|
335
|
+
# :nodoc:
|
336
|
+
def _protobuf_field_objects(field)
|
337
|
+
self.class._protobuf_field_objects[field] ||= begin
|
338
|
+
case
|
339
|
+
when _protobuf_field_symbol_transformers.has_key?(field) then
|
340
|
+
self.class._protobuf_symbol_transformer_object(field)
|
341
|
+
when _protobuf_field_transformers.has_key?(field) then
|
342
|
+
self.class._protobuf_field_transformer_object(field)
|
343
|
+
when respond_to?(field) then
|
344
|
+
if _is_collection_association?(field)
|
345
|
+
self.class._protobuf_collection_association_object(field)
|
321
346
|
else
|
322
|
-
self.class.
|
347
|
+
self.class._protobuf_convert_to_fields_object(field)
|
323
348
|
end
|
324
|
-
|
325
|
-
|
349
|
+
else
|
350
|
+
self.class._protobuf_nil_object(field)
|
326
351
|
end
|
327
|
-
|
328
|
-
attribute_number += 1
|
329
352
|
end
|
330
|
-
|
331
|
-
hash
|
332
353
|
end
|
333
354
|
|
334
355
|
# :nodoc:
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
##
|
31
31
|
# Development dependencies
|
32
32
|
#
|
33
|
+
spec.add_development_dependency "benchmark-ips"
|
33
34
|
spec.add_development_dependency "rake"
|
34
35
|
spec.add_development_dependency "rspec", ">= 3.3.0"
|
35
36
|
spec.add_development_dependency "rspec-pride", ">= 3.1.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Hutchison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: benchmark-ips
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rake
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -249,8 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
263
|
- !ruby/object:Gem::Version
|
250
264
|
version: '0'
|
251
265
|
requirements: []
|
252
|
-
|
253
|
-
rubygems_version: 2.6.10
|
266
|
+
rubygems_version: 3.0.1
|
254
267
|
signing_key:
|
255
268
|
specification_version: 4
|
256
269
|
summary: Google Protocol Buffers integration for Active Record
|