module Datamappify::Repository::QueryMethod::Callbacks

Public Class Methods

included(klass) click to toggle source
# File lib/datamappify/repository/query_method/callbacks.rb, line 7
def self.included(klass)
  klass.class_eval do
    include Hooks

    define_hooks :before_create,  :after_create,
                 :before_update,  :after_update,
                 :before_save,    :after_save,
                 :before_destroy, :after_destroy,
                 :halts_on_falsey => true
  end
end

Public Instance Methods

run_callbacks(entity, *types, &block) click to toggle source

@param entity [Entity]

@param types [Symbol]

e.g. :create, :update, :save or :destroy

@yield callback

@return [void]

# File lib/datamappify/repository/query_method/callbacks.rb, line 27
def run_callbacks(entity, *types, &block)
  run_hooks(types, :before, entity) &&
    (yield_value = block.call) &&
    run_hooks(types.reverse, :after, entity) &&
    yield_value
end

Private Instance Methods

hook_for(type, filter) click to toggle source

@param type [Symbol]

e.g. :create, :update, :save or :destroy

@param filter [Symbol]

e.g. :before or :after

@return [Symbol]

# File lib/datamappify/repository/query_method/callbacks.rb, line 58
def hook_for(type, filter)
  :"#{filter}_#{type}"
end
run_hooks(types, filter, entity) click to toggle source

@param types [Array<Symbol]

an array of types (e.g. :create, :update, :save or :destroy)

@param filter [Symbol]

e.g. :before or :after

@param entity [Entity]

@return [Boolean]

# File lib/datamappify/repository/query_method/callbacks.rb, line 45
def run_hooks(types, filter, entity)
  types.take_while do |type|
    run_hook(hook_for(type, filter), entity).not_halted?
  end.length == types.length
end