Sha256: 33303bfa9afb901ed23d1598f044edde997c9700985749c822c5cfd00f27c944
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
require 'active_record' module Memento class ErrorOnRewind < StandardError;end class << self # For backwards compatibility (was a Singleton) def instance self end def watch(user_or_id) start(user_or_id) yield session && !session.new_record? && session.states.any? ? session : false ensure stop end def start(user_or_id) user = user_or_id.is_a?(User) ? user_or_id : User.where(:id => user_or_id).first self.session = user ? Memento::Session.new({:user => user}, :without_protection => true) : nil end def stop session.destroy if session && session.states.count.zero? self.session = nil end def add_state(action_type, record) return unless save_session session.add_state(action_type, record) end def active? !!session && !ignore? end def ignore Thread.current[:memento_ignore] = true yield ensure Thread.current[:memento_ignore] = false end def serializer=(serializer) @serializer = serializer end def serializer @serializer ||= YAML end private def session Thread.current[:memento_session] end def session=(session) Thread.current[:memento_session] = session end def ignore? !!Thread.current[:memento_ignore] end def save_session active? && (!session.changed? || session.save) end end end def Memento(user_or_id, &block) Memento.watch(user_or_id, &block) end require 'memento/result' require 'memento/action' require 'memento/active_record_methods' require 'memento/action_controller_methods' require 'memento/state' require 'memento/session'
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
memento-0.4.2 | lib/memento.rb |