module TrackChanges
module ActionController
# Sets up an around filter to assign the controller's current_user
# to the given model names that are already set as instance variables in a
# prior before_filter.
#
# Example:
#
# track_changes :post
# track_changes :post, :post_attribute
#
# Currently does not work if the instance variable is anything except
# an model that has current_user accessors.
def track_changes models, *args
models_to_track = []
models_to_track << models
if args.kind_of?(Array)
models_to_track << args
end
models_to_track.flatten!
define_method(:__track_changes_to_models) { models_to_track }
self.class_eval do
helper :audits
before_filter TrackChanges::CurrentUserFilter
end
end
end
end
ActionController::Base.extend TrackChanges::ActionController