class Mimi::DB::Model

Public Class Methods

before_validation(method = nil, &block) click to toggle source

Defines a hook the ActiveRecord way

Example:

class A < Mimi::DB::Model
  before_validation :set_detaults

  def set_defaults
    self.name = "John Doe"
  end
end
# File lib/mimi/db/model.rb, line 38
def self.before_validation(method = nil, &block)
  if method && block
    raise ArgumentError, '.before_validation() cannot accept both method and a block'
  end
  block = -> { send(method) } if method
  register_hook(:before_validation, block)
end

Private Class Methods

register_hook(name, block) click to toggle source
# File lib/mimi/db/model.rb, line 53
def self.register_hook(name, block)
  registered_hooks(name) << block
end
registered_hooks(name) click to toggle source
# File lib/mimi/db/model.rb, line 48
def self.registered_hooks(name)
  @registered_hooks ||= {}
  @registered_hooks[name] ||= []
end

Public Instance Methods

before_validation() click to toggle source
Calls superclass method
# File lib/mimi/db/model.rb, line 21
def before_validation
  super
  call_hooks(:before_validation)
end
default_validation_helpers_options(type) click to toggle source

Keeps messages as error types, not human readable strings

# File lib/mimi/db/model.rb, line 17
def default_validation_helpers_options(type)
  { message: type }
end

Private Instance Methods

call_hooks(name) click to toggle source
# File lib/mimi/db/model.rb, line 57
def call_hooks(name)
  self.class.registered_hooks(name).each do |block|
    instance_eval(&block)
  end
end