module ExtendIt::Callbacks
Constants
- CALLBACKS
Public Class Methods
extended(base)
click to toggle source
# File lib/extend_it/callbacks.rb, line 18 def self.extended(base) fail 'This module can\'t be extended' end
included(base)
click to toggle source
# File lib/extend_it/callbacks.rb, line 10 def self.included(base) fail 'Can be included in classes only' unless base.is_a?(Class) unless (class << base; self end).included_modules.include?(Base) fail "#{base.name} should extend ExtendIt::Base" end base.extend(ClassMethods) end
Public Instance Methods
run_callbacks(*names, arguments: [], original_context: false) { || ... }
click to toggle source
# File lib/extend_it/callbacks.rb, line 22 def run_callbacks(*names, arguments: [], original_context: false) # sanitize arguments arguments = arguments.ensure_array(make: true) parents = self.class.parents parents_rev = parents.reverse names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq) names.each do |name| around = [] around_name = "@around_#{name}".to_sym var_name = "@before_#{name}".to_sym parents_rev.each do |p| if p.instance_variable_defined?(around_name) arr = p.instance_variable_get(around_name) arr.each do |b| if original_context == true b.call(*arguments) else instance_exec(*arguments, &b) end end around.concat(arr) end if p.instance_variable_defined?(var_name) p.instance_variable_get(var_name).each do |b| if original_context == true b.call(*arguments) else instance_exec(*arguments, &b) end end end end yield if block_given? around.reverse.each do |b| if original_context == true b.call(*arguments) else instance_exec(*arguments, &b) end end var_name = "@after_#{name}".to_sym parents.each do |p| if p.instance_variable_defined?(var_name) p.instance_variable_get(var_name).each do |b| if original_context == true b.call(*arguments) else instance_exec(*arguments, &b) end end end end end end