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