module ProtoRecord
Constants
- VERSION
Public Class Methods
proto_message(message = nil, options = {})
click to toggle source
# File lib/proto_record/proto_record.rb, line 12 def proto_message(message = nil, options = {}) unless message.nil? @proto_message = message.to_s.classify.constantize @proto_options = options end @proto_message ||= superclass.proto_message if @proto_message.nil? && superclass.respond_to?(:proto_message) @proto_message end
proto_message_fields()
click to toggle source
# File lib/proto_record/proto_record.rb, line 27 def proto_message_fields @proto_message_fields = @proto_message.new.to_h.keys.map(&:to_s) end
proto_options()
click to toggle source
# File lib/proto_record/proto_record.rb, line 23 def proto_options @proto_options ||= {} end
Public Instance Methods
to_proto()
click to toggle source
# File lib/proto_record/proto_record.rb, line 33 def to_proto raise MissingProtoMessage, self.class.name if proto_message.nil? message_args = is_a?(ActiveRecord::Base) ? resolve_active_record_object : resolve_class_object proto_message.new(message_args) end
Private Instance Methods
collection?(field)
click to toggle source
# File lib/proto_record/proto_record.rb, line 83 def collection?(field) self.class.reflect_on_association(field).collection? end
collection_association?(field)
click to toggle source
# File lib/proto_record/proto_record.rb, line 94 def collection_association?(field) self.class.reflect_on_association(field).try(:collection?) end
handle_special_fields(value)
click to toggle source
# File lib/proto_record/proto_record.rb, line 87 def handle_special_fields(value) return value.to_proto if value.respond_to?(:to_proto) return value.to_time if value.respond_to?(:strftime) value end
proto_fields()
click to toggle source
# File lib/proto_record/proto_record.rb, line 51 def proto_fields self.class.proto_message_fields end
proto_message()
click to toggle source
# File lib/proto_record/proto_record.rb, line 47 def proto_message self.class.proto_message end
proto_options()
click to toggle source
# File lib/proto_record/proto_record.rb, line 43 def proto_options self.class.proto_options end
reflection?(field)
click to toggle source
# File lib/proto_record/proto_record.rb, line 79 def reflection?(field) self.class.reflections.keys.include?(field) end
resolve_active_record_object()
click to toggle source
# File lib/proto_record/proto_record.rb, line 63 def resolve_active_record_object proto_fields.map { |field| [field, resolve_field(field)] }.to_h end
resolve_class_object()
click to toggle source
# File lib/proto_record/proto_record.rb, line 55 def resolve_class_object resolver = self.class.proto_options[:fields_resolver] raise MissingFieldsResolver, self.class if resolver.nil? send(resolver) end
resolve_field(field)
click to toggle source
# File lib/proto_record/proto_record.rb, line 67 def resolve_field(field) value = try(field) || self[field] return value if value.nil? if reflection?(field) collection?(field) ? value.map(&:to_proto) : value.to_proto else handle_special_fields(value) end end