Module: Protobuf::ActiveRecord::Serialization
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/protobuf/active_record/serialization.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#_filter_field_attributes(options = {}) ⇒ Object
:nodoc:.
-
#_filtered_fields(options = {}) ⇒ Object
:nodoc:.
-
#_normalize_options(options) ⇒ Object
:nodoc:.
-
#_protobuf_convert_attributes_to_fields(field, value) ⇒ Object
:nodoc:.
-
#_protobuf_field_symbol_transformers ⇒ Object
:nodoc:.
-
#_protobuf_field_transformers ⇒ Object
:nodoc:.
-
#_protobuf_message ⇒ Object
:nodoc:.
-
#fields_from_record(options = {}) ⇒ Object
Extracts attributes that correspond to fields on the specified protobuf message, performing any necessary column conversions on them.
-
#to_proto(options = {}) ⇒ Object
:nodoc:.
Instance Method Details
#_filter_field_attributes(options = {}) ⇒ Object
:nodoc:
221 222 223 224 225 226 227 228 229 |
# File 'lib/protobuf/active_record/serialization.rb', line 221 def _filter_field_attributes( = {}) = () fields = _filtered_fields() fields &= [ [:only] ].flatten if [:only].present? fields -= [ [:except] ].flatten if [:except].present? fields end |
#_filtered_fields(options = {}) ⇒ Object
:nodoc:
232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'lib/protobuf/active_record/serialization.rb', line 232 def _filtered_fields( = {}) include_deprecated = .fetch(:deprecated, true) fields = [] fields.concat(self.class.) fields.concat(self.class.) if include_deprecated fields.concat([[:include]].flatten) if [:include].present? fields.compact! fields.uniq! fields end |
#_normalize_options(options) ⇒ Object
:nodoc:
246 247 248 249 250 251 252 |
# File 'lib/protobuf/active_record/serialization.rb', line 246 def () ||= {} [:only] ||= [] if .fetch(:except, false) [:except] ||= [] if .fetch(:only, false) self.class..merge() end |
#_protobuf_convert_attributes_to_fields(field, value) ⇒ Object
:nodoc:
309 310 311 |
# File 'lib/protobuf/active_record/serialization.rb', line 309 def _protobuf_convert_attributes_to_fields(field, value) self.class._protobuf_convert_attributes_to_fields(field, value) end |
#_protobuf_field_symbol_transformers ⇒ Object
:nodoc:
314 315 316 |
# File 'lib/protobuf/active_record/serialization.rb', line 314 def _protobuf_field_symbol_transformers self.class._protobuf_field_symbol_transformers end |
#_protobuf_field_transformers ⇒ Object
:nodoc:
319 320 321 |
# File 'lib/protobuf/active_record/serialization.rb', line 319 def _protobuf_field_transformers self.class._protobuf_field_transformers end |
#_protobuf_message ⇒ Object
:nodoc:
324 325 326 |
# File 'lib/protobuf/active_record/serialization.rb', line 324 def self.class. end |
#fields_from_record(options = {}) ⇒ Object
Extracts attributes that correspond to fields on the specified protobuf message, performing any necessary column conversions on them. Accepts a hash of options for specifying which fields should be serialized.
Examples:
fields_from_record(:only => [ :guid, :name ])
fields_from_record(:except => :email_domain)
fields_from_record(:include => :email_domain)
fields_from_record(:except => :email_domain, :deprecated => false)
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'lib/protobuf/active_record/serialization.rb', line 264 def fields_from_record( = {}) hash = {} field_attributes = _filter_field_attributes() # Already flattened / compacted / uniqued ... unless we must include if [:include].present? field_attributes.concat([ [:include] ].flatten) field_attributes.compact! field_attributes.uniq! end attribute_number = 0 limit = field_attributes.size # One of the very few places the diff between each/while can make a difference # in terms of optimization (`while` is slightly faster as no block carried through) while attribute_number < limit field = field_attributes[attribute_number] begin hash[field] = __send__("_protobuf_active_record_serialize_#{field}") rescue NoMethodError => error raise unless error. =~ /_protobuf_active_record_serialize/i case when _protobuf_field_symbol_transformers.has_key?(field) then self.class._protobuf_write_symbol_transformer_method(field) when _protobuf_field_transformers.has_key?(field) then self.class._protobuf_write_field_transformer_method(field) when respond_to?(field) then self.class._protobuf_write_convert_to_fields_method(field) else self.class._protobuf_write_nil_method(field) end hash[field] = __send__("_protobuf_active_record_serialize_#{field}") end attribute_number += 1 end hash end |
#to_proto(options = {}) ⇒ Object
:nodoc:
329 330 331 332 333 334 |
# File 'lib/protobuf/active_record/serialization.rb', line 329 def to_proto( = {}) raise MessageNotDefined.new(self.class) if .nil? fields = self.fields_from_record() .new(fields) end |