protobuf-activerecord 3.2.2 → 3.3.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 199e64b43cb1b81008ac6b34da4141f4657bfcd9
|
4
|
+
data.tar.gz: 2e8291702c65ade44ad9eb2e8ff5b056d5e03b97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e26afd09e666fcbcbe940c576e0fb2ba5205eb1ca37def8a8eed16d15db3c1f556ced283bc4496b6f4572ddc226b7f815f821c3c67cd98f65f437c28269ab03a
|
7
|
+
data.tar.gz: 26290cb0c1b2a2781206966c171e754bd4260a799083f636544f8baee1525dc045010e0d5c5f0d90df4414a8a0a314688a0cbca4c7ddc08bc6f692ed4dedf2a4
|
@@ -1,4 +1,5 @@
|
|
1
|
-
'
|
1
|
+
require 'set'
|
2
|
+
require 'active_support/concern'
|
2
3
|
|
3
4
|
module Protobuf
|
4
5
|
module ActiveRecord
|
@@ -20,22 +21,20 @@ module Protobuf
|
|
20
21
|
module ClassMethods
|
21
22
|
# :nodoc:
|
22
23
|
def _protobuf_convert_attributes_to_fields(key, value)
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
return value
|
24
|
+
case
|
25
|
+
when value.nil? then
|
26
|
+
value
|
27
|
+
when _protobuf_date_column?(key) then
|
28
|
+
value.to_time.to_i
|
29
|
+
when _protobuf_datetime_column?(key) then
|
30
|
+
value.to_i
|
31
|
+
when _protobuf_time_column?(key) then
|
32
|
+
value.to_i
|
33
|
+
when _protobuf_timestamp_column?(key) then
|
34
|
+
value.to_i
|
35
|
+
else
|
36
|
+
value
|
37
|
+
end
|
39
38
|
end
|
40
39
|
|
41
40
|
def _protobuf_field_options
|
@@ -46,6 +45,36 @@ module Protobuf
|
|
46
45
|
@_protobuf_field_transformers ||= {}
|
47
46
|
end
|
48
47
|
|
48
|
+
def _protobuf_instance_respond_to_from_cache?(key)
|
49
|
+
_protobuf_respond_to_cache.include?(key)
|
50
|
+
end
|
51
|
+
|
52
|
+
def _protobuf_message_deprecated_fields
|
53
|
+
@_protobuf_message_deprecated_fields ||= begin
|
54
|
+
self.protobuf_message.all_fields.map do |field|
|
55
|
+
next if field.nil?
|
56
|
+
next unless field.deprecated?
|
57
|
+
|
58
|
+
field.name.to_sym
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def _protobuf_message_non_deprecated_fields
|
64
|
+
@_protobuf_message_non_deprecated_fields ||= begin
|
65
|
+
self.protobuf_message.all_fields.map do |field|
|
66
|
+
next if field.nil?
|
67
|
+
next if field.deprecated?
|
68
|
+
|
69
|
+
field.name.to_sym
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def _protobuf_respond_to_cache
|
75
|
+
@_protobuf_respond_to_cache ||= ::Set.new
|
76
|
+
end
|
77
|
+
|
49
78
|
# Define a field transformation from a record. Accepts a Symbol,
|
50
79
|
# callable, or block that is called with the record being serialized.
|
51
80
|
#
|
@@ -146,16 +175,12 @@ module Protobuf
|
|
146
175
|
|
147
176
|
# :nodoc:
|
148
177
|
def _filtered_fields(options = {})
|
149
|
-
|
178
|
+
include_deprecated = options.fetch(:deprecated, true)
|
150
179
|
|
151
|
-
fields =
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
field.name.to_sym
|
156
|
-
end
|
157
|
-
fields += [ options.fetch(:include, nil) ]
|
158
|
-
fields.flatten!
|
180
|
+
fields = []
|
181
|
+
fields.concat(self.class._protobuf_message_non_deprecated_fields)
|
182
|
+
fields.concat(self.class._protobuf_message_deprecated_fields) if include_deprecated
|
183
|
+
fields.concat([options[:include]].flatten) if options[:include].present?
|
159
184
|
fields.compact!
|
160
185
|
fields.uniq!
|
161
186
|
|
@@ -182,23 +207,39 @@ module Protobuf
|
|
182
207
|
# fields_from_record(:except => :email_domain, :deprecated => false)
|
183
208
|
#
|
184
209
|
def fields_from_record(options = {})
|
210
|
+
hash = {}
|
185
211
|
field_attributes = _filter_field_attributes(options)
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
212
|
+
|
213
|
+
# Already flattened / compacted / uniqued ... unless we must include
|
214
|
+
if options[:include].present?
|
215
|
+
field_attributes.concat([ options[:include] ].flatten)
|
216
|
+
field_attributes.compact!
|
217
|
+
field_attributes.uniq!
|
218
|
+
end
|
219
|
+
|
220
|
+
attribute_number = 0
|
221
|
+
limit = field_attributes.size
|
222
|
+
|
223
|
+
# One of the very few places the diff between each/while can make a difference
|
224
|
+
# in terms of optimization (`while` is slightly faster as no block carried through)
|
225
|
+
while attribute_number < limit
|
226
|
+
field = field_attributes[attribute_number]
|
227
|
+
hash[field] = case
|
228
|
+
when _protobuf_field_transformers.has_key?(field) then
|
229
|
+
_protobuf_field_transformers[field].call(self)
|
230
|
+
when self.class._protobuf_instance_respond_to_from_cache?(field) then
|
231
|
+
_protobuf_convert_attributes_to_fields(field, __send__(field))
|
232
|
+
when respond_to?(field) then
|
233
|
+
self.class._protobuf_respond_to_cache << field
|
234
|
+
_protobuf_convert_attributes_to_fields(field, __send__(field))
|
235
|
+
else
|
236
|
+
nil
|
237
|
+
end
|
238
|
+
|
239
|
+
attribute_number += 1
|
199
240
|
end
|
200
241
|
|
201
|
-
|
242
|
+
hash
|
202
243
|
end
|
203
244
|
|
204
245
|
# :nodoc:
|
@@ -135,20 +135,20 @@ describe Protobuf::ActiveRecord::Serialization do
|
|
135
135
|
context "when options has :except" do
|
136
136
|
it "returns all except the given field(s)" do
|
137
137
|
fields = user._filter_field_attributes(:except => :name)
|
138
|
-
expect(fields).to
|
138
|
+
expect(fields).to match_array([ :guid, :email, :email_domain, :password, :nullify ])
|
139
139
|
end
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
143
|
describe "#_filtered_fields" do
|
144
144
|
it "returns protobuf fields" do
|
145
|
-
expect(user._filtered_fields).to
|
145
|
+
expect(user._filtered_fields).to match_array([ :guid, :name, :email, :email_domain, :password, :nullify ])
|
146
146
|
end
|
147
147
|
|
148
148
|
context "given :deprecated => false" do
|
149
149
|
it "filters all deprecated fields" do
|
150
150
|
fields = user._filtered_fields(:deprecated => false)
|
151
|
-
expect(fields).to
|
151
|
+
expect(fields).to match_array([ :guid, :name, :email, :password, :nullify ])
|
152
152
|
end
|
153
153
|
|
154
154
|
context 'and :include => :email_domain' do
|
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.3.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: 2015-10-
|
11
|
+
date: 2015-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -234,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
234
234
|
version: '0'
|
235
235
|
requirements: []
|
236
236
|
rubyforge_project:
|
237
|
-
rubygems_version: 2.
|
237
|
+
rubygems_version: 2.4.8
|
238
238
|
signing_key:
|
239
239
|
specification_version: 4
|
240
240
|
summary: Google Protocol Buffers integration for Active Record
|