module Memorable::Controller::ClassMethods

Public Instance Methods

memorize(options = {}, &block) click to toggle source
# File lib/memorable/controller.rb, line 75
def memorize(options = {}, &block)
  raise InvalidOptionsError, "if and unless cannot appear at the sametime" if options[:if] && options[:unless]

  if condition = (options[:if] || options[:unless])
    if_condition = !!options[:if]
    if condition.is_a?(Symbol)
      condition_proc = proc { |c| if_condition ? c.send(condition) : !c.send(condition) }
    elsif condition.is_a? Proc
      condition_proc = proc { |c| if_condition ? condition.call(c) : !condition.call(c) }
    else
      raise InvalidOptionsError, "#{condition} is not a valid Proc or controller method."
    end
  end

  raise InvalidOptionsError, "except and only cannot appear at the sametime" if options[:except] && options[:only]

  specified_actions = [options[:except] || options[:only]].flatten.compact.map(&:to_s)
  actions =
    if options.delete(:only)
      specified_actions
    elsif options.delete(:except)
      all_actions - specified_actions
    else
      all_actions
    end

  memorize_actions actions, options, condition_proc
end

Private Instance Methods

all_actions() click to toggle source
# File lib/memorable/controller.rb, line 110
def all_actions
  @all_actions ||= action_methods.map(&:to_s)
end
memorize_actions(action_names, options, condition_proc) click to toggle source
# File lib/memorable/controller.rb, line 106
def memorize_actions(action_names, options, condition_proc)
  Registration.register action_names, controller_name, options, condition_proc
end