class Depository::Serialize::Packer
Public Class Methods
new(config, model)
click to toggle source
# File lib/depository/serialize.rb, line 14 def initialize(config, model) self.config = config self.model = model end
Public Instance Methods
call()
click to toggle source
# File lib/depository/serialize.rb, line 19 def call attrs = normalize(model.to_hash) config.packer.call(attrs) set_timestamps(attrs, model) model.set(Serialize.unpack(config, attrs.dup)) attrs end
Private Instance Methods
columns()
click to toggle source
# File lib/depository/serialize.rb, line 53 def columns @columns ||= Depository::Database.db.schema(config.db) end
normalize(attrs)
click to toggle source
# File lib/depository/serialize.rb, line 39 def normalize(attrs) attrs = attrs.dup columns.select { |column, opts| !attrs[column].nil? && opts[:type] == :integer }.each { |column, opts| attrs[column] = attrs[column].to_i } columns.select { |column, opts| !attrs[column].nil? && opts[:type] == :boolean }.each { |column, opts| attrs[column] = attrs[column] ? 1 : 0 } attrs end
set_timestamps(attrs, model)
click to toggle source
# File lib/depository/serialize.rb, line 31 def set_timestamps(attrs, model) now = Time.now attrs[:updated_at] = now if model.respond_to?(:updated_at=) attrs[:created_at] = now if model.respond_to?(:created_at=) && !model.send(config.primary_key) end