module AttrStatements::ErrorManager

Attributes

errors[W]

Public Class Methods

included(base) click to toggle source
# File lib/attr_statements/error_manager.rb, line 15
def included(base)
  base.class_eval do
    extend ActiveModel::Naming
    extend ActiveModel::Translation
  end
end

Public Instance Methods

errors() click to toggle source
# File lib/attr_statements/error_manager.rb, line 23
def errors
  @errors ||= ActiveModel::Errors.new(self)
end
valid?() click to toggle source
# File lib/attr_statements/error_manager.rb, line 27
def valid?
  errors.clear

  self.class.attr_statements.each do |statement_key|
    object = self.class.__send__(:get_statement_object, statement_key)
    value  = get_statement_value(statement_key)

    validate(object, value)
  end

  errors.empty?
end

Private Instance Methods

add_error(key, error) click to toggle source

:reek: FeatureEnvy

# File lib/attr_statements/error_manager.rb, line 60
def add_error(key, error)
  errors.add(key, error.message, error.options)
end
add_errors(key, arr_errors) click to toggle source
# File lib/attr_statements/error_manager.rb, line 55
def add_errors(key, arr_errors)
  arr_errors.each { |error| add_error(key, error) }
end
read_attribute_for_validation(attr) click to toggle source

The following method is needed to be minimally implemented for error management

# File lib/attr_statements/error_manager.rb, line 65
def read_attribute_for_validation(attr)
  get_statement_value(attr)
end
validate(object, value) click to toggle source

:reek: FeatureEnvy

# File lib/attr_statements/error_manager.rb, line 45
def validate(object, value)
  Validation::VALIDATORS.each do |error_type|
    class_type = "AttrStatements::Validations::#{error_type.classify}"
    validation_class = Object.const_get(class_type)
    validation = validation_class.new(object)

    add_errors(object.key, validation.errors) unless validation.valid?(value)
  end
end