Sha256: 78dd0931a0afc09c7ac0552ccef361231d74c2ac6481f4180e554bc103541554

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 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[@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

2 entries across 2 versions & 1 rubygems

Version Path
judge-3.1.0 lib/judge/validation.rb
judge-3.0.0 lib/judge/validation.rb