class Plyushkin::Persistence

Public Class Methods

new(model) click to toggle source
# File lib/plyushkin/persistence.rb, line 3
def initialize(model)
  @model = model
  @callbacks = {}
  @filters = {}
end

Public Instance Methods

load(id) click to toggle source
# File lib/plyushkin/persistence.rb, line 26
def load(id)
  @properties = {}
  cached(id).each do |name, values|
    property = Plyushkin::Property.load(name, model.registered_types[name.to_sym], values,
                                        :callbacks               => @callbacks[name.to_sym],
                                        :ignore_unchanged_values => model.ignore_unchanged_values[name.to_sym],
                                        :filter                  => @filters[name.to_sym])
    @properties[name.to_sym] = property
  end if id
  add_missing_properties
end
properties() click to toggle source
# File lib/plyushkin/persistence.rb, line 9
def properties
  @properties
end
register_callback(name, callback, &block) click to toggle source
# File lib/plyushkin/persistence.rb, line 38
def register_callback(name, callback, &block)
  @callbacks[name] = { callback => block }
end
register_filter(name, &block) click to toggle source
# File lib/plyushkin/persistence.rb, line 42
def register_filter(name, &block)
  @filters[name] = block
end
save(id) click to toggle source
# File lib/plyushkin/persistence.rb, line 13
def save(id)
  hash = {}
  props = @properties || {}

  props.each do |name, property|
    hash[name] = property.value_hashes
  end
  model.service.put(model.name, id, hash)
  model.cache.write(get_key(model.name, id), hash)

  props.values.each(&:mark_persisted)
end

Private Instance Methods

add_missing_properties() click to toggle source
# File lib/plyushkin/persistence.rb, line 64
def add_missing_properties
  (model.registered_types.keys - @properties.keys).each do |name|
    property = Plyushkin::Property.new(name, 
                                       :type                    => model.registered_types[name],
                                       :callbacks               => @callbacks[name],
                                       :ignore_unchanged_values => model.ignore_unchanged_values[name],
                                       :filter                  => @filters[name])
    @properties[name] = property
  end
end
cached(id) click to toggle source
# File lib/plyushkin/persistence.rb, line 51
def cached(id)
  data = model.cache.read(get_key(model.name, id))
  unless data
    data = model.service.get(model.name, id)
    model.cache.write(get_key(model.name, id), data) if data
  end
  data
end
get_key(name, id) click to toggle source
# File lib/plyushkin/persistence.rb, line 60
def get_key(name, id)
  "plyushkin.#{name}.#{id}"
end
model() click to toggle source
# File lib/plyushkin/persistence.rb, line 47
def model
  @model
end