module ActiveModel::BetterErrors::Emulation

Emulation The ActiveModel Emulation Layer

Constants

MESSAGE_REPORTER_METHODS
MODEL_METHODS

Public Class Methods

included(base) click to toggle source
# File lib/active_model/better_errors/emulation.rb, line 27
def self.included(base)
  base.class_eval do
    extend Forwardable
    def_delegators :error_collection, *MODEL_METHODS
    def_delegators :message_reporter, *MESSAGE_REPORTER_METHODS
    def_delegators :hash_reporter,    :to_hash
    def_delegators :array_reporter,   :to_a

    alias_method :blank?, :empty?
    alias_method :has_key?, :include?
  end
end

Public Instance Methods

add(attribute, message = nil, options = {}) click to toggle source
# File lib/active_model/better_errors/emulation.rb, line 55
def add(attribute, message = nil, options = {})
  if options[:strict]
    error   = ErrorMessage.build(attribute, message, options)
    message = ::ActiveModel::BetterErrors.format_message(@base, error)
    full_message = full_message(attribute, message)
    fail ActiveModel::StrictValidationFailed, full_message
  end
  error_collection.add attribute, message, options
end
add_on_blank(attributes, options = {}) click to toggle source
# File lib/active_model/better_errors/emulation.rb, line 48
def add_on_blank(attributes, options = {})
  [attributes].flatten.each do |attribute|
    value = @base.send(:read_attribute_for_validation, attribute)
    add(attribute, :blank, options) if value.blank?
  end
end
add_on_empty(attributes, options = {}) click to toggle source
# File lib/active_model/better_errors/emulation.rb, line 40
def add_on_empty(attributes, options = {})
  [attributes].flatten.each do |attribute|
    value = @base.send(:read_attribute_for_validation, attribute)
    is_empty = value.respond_to?(:empty?) ? value.empty? : false
    add(attribute, :empty, options) if value.nil? || is_empty
  end
end
as_json(options = nil) click to toggle source
# File lib/active_model/better_errors/emulation.rb, line 69
def as_json(options = nil)
  to_hash
end
to_xml(options = {}) click to toggle source
# File lib/active_model/better_errors/emulation.rb, line 65
def to_xml(options = {})
  to_a.to_xml options.reverse_merge(root: 'errors', skip_types: true)
end