Module: Volt::LifecycleCallbacks::ClassMethods

Defined in:
lib/volt/utils/lifecycle_callbacks.rb

Instance Method Summary collapse

Instance Method Details

#setup_action_helpers_in_class(*callback_names) ⇒ Object

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.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 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