class ChainedValidation::Base

Public Class Methods

new(object) click to toggle source
# File lib/chained_validation/base.rb, line 3
def initialize(object)
  @object = object
  @validations = []
  set_rules
end

Public Instance Methods

validate() click to toggle source
# File lib/chained_validation/base.rb, line 9
def validate
  ChainedValidation::Validate.new(@validations).claim
end
validate!() click to toggle source
# File lib/chained_validation/base.rb, line 13
def validate!
end

Private Instance Methods

set_rules() click to toggle source
# File lib/chained_validation/base.rb, line 18
def set_rules
  class << self
    files = Dir["#{File.dirname(__FILE__)}/rules/**/*.rb"].map { |file| File.basename(file, ".rb") }
    rules = files.map { |file| file.split('_').map { |name| name.capitalize }.join('') }
    rules = Hash[rules.zip(files)]

    rules.each do |klasse, methode|
      define_method(:"#{methode}") do |*args|
        raise ArgumentError, "wrong number of arguments (given #{[*args].size}, expected 1)" if [*args].size > 1
        rule = ChainedValidation::Rules.const_get(klasse).new({ object: @object, input: [*args].first }).perform
        @validations.push(rule)
        self
      end
    end
  end
end