module Memorable::Controller

Private Instance Methods

extract_memorable_options() click to toggle source
# File lib/memorable/controller.rb, line 35
def extract_memorable_options
  options = ActiveSupport::HashWithIndifferentAccess.new ({
    user_id: current_user.try(:id),
    meta: {
      controller: controller_name,
      action:     action_name
    }
  })

  if memorable_resource
    resource_previous   = Hash[memorable_resource.previous_changes.map {|key, value| ["previous_#{key}", value[0]]}]
    resource_attributes = memorable_resource.attributes
    resource_options    = {
      resource_id:   memorable_resource.id,
      resource_type: memorable_resource.class.to_s
    }

    options[:meta].merge!(resource_previous).merge!(resource_attributes).merge!(resource_options)
    options.merge!(resource_options)
  end

  custom_method_name = "memorable_#{action_name}"

  if respond_to? custom_method_name, true
    custom_locals = self.send custom_method_name
    options[:meta].merge!(custom_locals) if custom_locals.is_a?(Hash)
  end

  options
end
memorable?() click to toggle source
# File lib/memorable/controller.rb, line 29
def memorable?
  Registration.registered?(controller_name, action_name) &&
    Registration.condition_matched?(self) &&
    response.successful?
end
memorable_resource() click to toggle source
# File lib/memorable/controller.rb, line 66
def memorable_resource
  @memorable_resource ||= self.instance_variable_get("@#{memorable_resource_name}") || self.send(:resource) rescue nil
end
memorable_resource_name() click to toggle source
# File lib/memorable/controller.rb, line 70
def memorable_resource_name
  Registration.resource_name(controller_name) || controller_name.singularize
end
memorize_callback() click to toggle source
# File lib/memorable/controller.rb, line 15
def memorize_callback
  return unless memorable?

  # prepare locals for action
  options = extract_memorable_options

  # write to database
  Memorable.config.journals_model.create_with_params!(options)

rescue Exception => e
  raise e if Rails.env.development? # for debug
  Rails.logger.error e.message
end