Module: SequelSimpleCallbacks

Defined in:
lib/sequel_simple_callbacks.rb

Defined Under Namespace

Modules: ClassMethods, DatasetMethods, InstanceMethods

Constant Summary collapse

SPECIAL_HOOKS =
[
  :before_validation,
  :after_validation
].freeze
ADDITIONAL_HOOKS =
[
  :before_validation_on_create,
  :before_validation_on_update,
  :after_validation_on_create,
  :after_validation_on_update
].freeze
STANDARD_HOOKS =
(Sequel::Model::HOOKS - SPECIAL_HOOKS).freeze
INSTALLABLE_HOOKS =
(Sequel::Model::HOOKS + ADDITIONAL_HOOKS).freeze

Class Method Summary collapse

Class Method Details

.apply(model_class) ⇒ Object



17
18
# File 'lib/sequel_simple_callbacks.rb', line 17

def self.apply(model_class)
end

.configure(model_class, *arguments, &block) ⇒ Object



20
21
22
# File 'lib/sequel_simple_callbacks.rb', line 20

def self.configure(model_class, *arguments, &block)
  self.define_callback_hooks(model_class)
end

.define_callback_hooks(model_class) ⇒ Object



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
# File 'lib/sequel_simple_callbacks.rb', line 24

def self.define_callback_hooks(model_class)
  STANDARD_HOOKS.each do |hook|
    pre_hook = nil

    if (model_class.instance_methods.include?(hook))
      pre_hook = :"_internal_#{hook}"

      model_class.send(:alias_method, pre_hook, hook)
    end

    model_class.send(:define_method, hook) do
      self.class.run_callbacks(self, hook)

      self.send(pre_hook) if (pre_hook)
    end
  end

  SPECIAL_HOOKS.each do |hook|
    model_class.send(:define_method, hook) do
      self.class.run_callbacks(self, hook)

      if (new?)
        self.class.run_callbacks(self, :"#{hook}_on_create")
      else
        self.class.run_callbacks(self, :"#{hook}_on_update")
      end
    end
  end
end