Sha256: 98af7981be16223e801d0e0e130b1a866999f02a629e26eea843688fc40e3125

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

module Judge

  class Validation
    def initialize(params)
      @klass     = params[:klass]
      @attribute = params[:attribute]
      @value     = params[:value]
      @kind      = params[:kind]
      @original_value = params[:original_value]
      validate!
    end

    def amv
      @amv ||= begin
        validators = @klass.validators_on(@attribute)
        validators.keep_if { |amv| amv.kind == @kind }
        validators.first
      end
    end

    def record
      @record ||= begin
        rec = @klass.new
        rec[@attribute] = @value
        rec
      end
    end

    def validate!
      record.errors.delete(@attribute)
      amv.validate_each(record, @attribute, @value) unless amv.kind == :uniqueness && @value == @original_value && @original_value != ""
      self
    end

    def as_json(options = {})
      record.errors.get(@attribute) || []
    end
  end

  class NullValidation
    def initialize(params)
      @params = params
    end

    def as_json(options = {})
      ["Judge validation for #{@params[:klass]}##{@params[:attribute]} not allowed"]
    end

    def method_missing(*args)
      self
    end
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
judge-2.1.1 lib/judge/validation.rb
judge-2.1.0 lib/judge/validation.rb
judge-2.0.6 lib/judge/validation.rb