module ArProtobufStore::ClassMethods

Public Instance Methods

protobuf_store(store_attribute, pb_class, options=nil) click to toggle source
# File lib/ar_protobuf_store.rb, line 26
def protobuf_store(store_attribute, pb_class, options=nil)
  options ||= {}
  parser = ArProtobufStore.find_parser!(pb_class, options)
  serialize(store_attribute, parser)
  protobuf_store_accessor(store_attribute, parser.extract_fields(options[:accessors]))
end
protobuf_store_accessor(store_attribute, *keys) click to toggle source
# File lib/ar_protobuf_store.rb, line 33
    def protobuf_store_accessor(store_attribute, *keys)
      Array(keys).flatten.each do |key|
        name = key[:name]
        coercer = case key[:type]
                  when :int
                    "%s.to_i"
                  when :float
                    "%s.to_f"
                  when :string
                    "%s.to_s"
                  when :bool
                    "!!%s"
                  else
                    "%s"
                  end
        class_eval <<-"END_EVAL", __FILE__, __LINE__
          def #{name}=(value)
            self.#{store_attribute}_will_change!
            self.#{store_attribute}.#{name} = #{coercer % 'value'}
          end
          def #{name}
            self.#{store_attribute}.#{name}
          end
        END_EVAL
      end
    end