Sha256: 01c76e530ad69eef6a189ff31adb1898c23b5be04633768489c692a830ca237f

Contents?: true

Size: 984 Bytes

Versions: 2

Compression:

Stored size: 984 Bytes

Contents

require 'valcro/error'
require 'valcro/error_list'
require 'valcro/runner'

module Valcro
  def self.included(base)
    base.extend ClassMethods
  end

  def errors
    @error_list ||= Valcro::ErrorList.new
  end

  def valid?
    !errors.any?
  end

  def error_messages
    errors.to_s
  end

  def validate
    errors.clear!
    self.class.validators.each do |validator_class|
      validation_runner.add_validator validator_class.new(self)
    end
    self.class.validation_blocks.each do |validation_block|
      instance_eval(&validation_block)
    end
    validation_runner.validate
  end

  def validation_runner
    @validation_runner ||= Valcro::Runner.new(errors)
  end

  module ClassMethods
    def validates_with(validator_class)
      validators << validator_class
    end

    def validators
      @validators ||= []
    end
    def validation_blocks
      @validation_blocks ||= []
    end

    def validate(&block)
      validation_blocks << block
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
valcro-0.1.1 lib/valcro.rb
valcro-0.1 lib/valcro.rb