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