module Volt::LifecycleCallbacks::ClassMethods

Public Instance Methods

setup_action_helpers_in_class(*callback_names) click to toggle source

Takes a list of callbacks (as symbols). A callback is typically used for before/after actions, but can be used anytime you have callbacks that may be filtered by action. The method will create an callback method for each callback name passed in.

# File lib/volt/utils/lifecycle_callbacks.rb, line 22
def setup_action_helpers_in_class(*callback_names)
  callback_names.each do |callback_name|
    # Setup a class attribute to track the
    callbacks_var_name = :"#{callback_name}_callbacks"
    class_attribute(callbacks_var_name)

    # Create the method on the class
    define_singleton_method(callback_name) do |*args, &block|
      # Add the block in place of the symbol
      args.unshift(block) if block

      fail 'No callback symbol or block provided' unless args[0]

      callbacks = send(callbacks_var_name)

      unless callbacks
        callbacks = []
        send(:"#{callbacks_var_name}=", callbacks)
      end

      if args.last.is_a?(Hash)
        options = args.pop
      else
        options = nil
      end

      args.each do |callback|
        callbacks << [callback, options]
      end
    end
  end
end