Module: ExtendIt::Callbacks::ClassMethods

Defined in:
lib/extend_it/callbacks.rb

Instance Method Summary collapse

Instance Method Details

#define_callbacks(*names, callbacks: [:before, :after]) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/extend_it/callbacks.rb', line 82

def define_callbacks(*names, callbacks: [:before, :after])
  callbacks = [:before, :after] unless callbacks.is_a?(Array)
  callbacks.select! { |cb| CALLBACKS.include?(cb) }
  names.each do |name|
    name = name.ensure_symbol || next
    callbacks.each do |cb|
      cb_name = "#{cb}_#{name}".to_sym
      var_name = "@#{cb_name}".to_sym
      define_singleton_method cb_name do |&block|
        return if block.nil?
        arr =
          if instance_variable_defined?(var_name)
            instance_variable_get(var_name)
          else
            instance_variable_set(var_name, [])
          end
        arr << block
      end
    end
  end
end