Skip to content

Instantly share code, notes, and snippets.

@lucasrenan
Created January 11, 2011 11:45
Show Gist options
  • Select an option

  • Save lucasrenan/774330 to your computer and use it in GitHub Desktop.

Select an option

Save lucasrenan/774330 to your computer and use it in GitHub Desktop.
ActsAsLogger 0.1
module ActsAsLogger
module Logger
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def acts_as_logger(options={})
include InstanceMethods
class_eval do
embeds_many :logs, :class_name => "ActsAsLogger::Log"
end
Log.class_eval do
embedded_in self.to_s.downcase.to_sym, :inverse_of => :logs
#receber options[:models] e deixar dinamico
references_one :user
end
#receber options[:models] e deixar dinamico
User.class_eval do
referenced_in :log, :class_name => "ActsAsLogger::Log"
end
end
end
module InstanceMethods
def created_by=(user)
raise "created by is not null" unless self.logs.where(:action => :create).empty?
self.logs << ActsAsLogger::Log.new(:action => :create, :user => user)
end
def created_by
self.logs.where(:action => :create).first
end
def updated_by=(user)
self.logs << ActsAsLogger::Log.new(:action => :update, :user => user)
end
def updated_by
self.logs.where(:action => :update).desc(:created_at).first
end
end
end
end
#### arquivo separado
module ActsAsLogger
class Log
include Mongoid::Document
include Mongoid::Timestamps
field :action
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment