Module: EasyCallbacks

Extended by:
ActiveSupport::Concern
Defined in:
lib/easy_callbacks.rb,
lib/easy_callbacks/version.rb,
lib/easy_callbacks/models/callback.rb,
lib/easy_callbacks/utils/validator.rb,
lib/easy_callbacks/utils/serializer.rb,
lib/easy_callbacks/models/target_class.rb,
lib/easy_callbacks/dsls/target_classes_dsl.rb,
lib/easy_callbacks/repositories/base_repository.rb,
lib/easy_callbacks/repositories/callbacks_repository.rb,
lib/easy_callbacks/repositories/target_classes_repository.rb

Defined Under Namespace

Modules: Dsls, Models, Repositories, Utils

Constant Summary collapse

VERSION =
'1.0.1'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.target_classes_repository=(value) ⇒ Object

Sets the attribute target_classes_repository

Parameters:

  • value

    the value to set the attribute target_classes_repository to.



32
33
34
# File 'lib/easy_callbacks.rb', line 32

def target_classes_repository=(value)
  @target_classes_repository = value
end

Class Method Details

.configure(target_class, &cfg_block) ⇒ Object



34
35
36
37
# File 'lib/easy_callbacks.rb', line 34

def configure(target_class, &cfg_block)
  target_class_instance = target_classes_repository.find_or_add target_class
  Dsls::TargetClassesDsl.new(target_class_instance).instance_eval &cfg_block
end

.define_callback_details_method(additional_options, callback, target_class_instance) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/easy_callbacks.rb', line 48

def define_callback_details_method(additional_options, callback, target_class_instance)
  target_class_instance.target_class.send :define_method, :callback_details do
    callback_details = Utils::Serializer.to_h(
      callback, %w(callback_type target_method_name callback_method_name callback_block)
    ).merge(target_class: target_class_instance.target_class)
    additional_options ? callback_details.merge(additional_options) : callback_details
  end
end

.execute_callbacks(context, target_class_instance, callback_type, target_method_name, additional_options, call_args, &call_block) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/easy_callbacks.rb', line 39

def execute_callbacks(context, target_class_instance, callback_type, target_method_name, additional_options, call_args, &call_block)
  validate_target_class_instance target_class_instance
  target_class_instance.get_callbacks_for(callback_type, target_method_name).each do |callback|
    define_callback_details_method additional_options, callback, target_class_instance
    proc = callback.callback_block
    proc.nil? ? context.send(callback.callback_method_name, *call_args, &call_block) : context.instance_eval(&proc)
  end
end