Sha256: a8d7ff7d7aac7f0bd0a6d862b2019c8d40263145cc68652c5f506cc65a637055

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

require 'simple_validate/version'
require 'simple_validate/validates_presence_of'
require 'simple_validate/validates_format_of'
require 'simple_validate/validates_numericality_of'
require 'simple_validate/errors'
require 'active_support/all'

module SimpleValidate
  def self.included(klass)
    klass.extend ClassMethods
  end

  def valid?
    self.class.validate(self)
  end

  def invalid?
    !valid?
  end

  def errors
    @errors ||= Errors.new
  end

  module ClassMethods
    def method_missing(method, *args, &block)
      if "#{method}" =~ /(validates_(format_of|presence_of|numericality_of))/
        add_validations(args, const_get($1.classify))
      else
        super
      end
    end

    def respond_to_missing?(method, include_private = false)
      "#{method}" =~ /validates_(format_of|presence_of|numericality_of)/ || super
    end

    def add_validations(args, klass)
      options = args.extract_options!
      args.each do |attr|
        validations << klass.new(attr, options)
      end
    end

    def validations
      @validations ||= []
    end

    def validate(instance)
      validations.each do |validation|
        unless validation.valid?(instance)
          instance.errors.add(validation.attribute, validation.message)
        end
      end
      instance.errors.empty?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_validate-0.1.0 lib/simple_validate.rb