Sha256: 384a920ea5a9d15789ae8aed2ee6896b772b3c5c6842cc75472e3376caf222a1

Contents?: true

Size: 1.47 KB

Versions: 12

Compression:

Stored size: 1.47 KB

Contents

# Enforces a type on a field.  Typically setup from ```field :name, Type```
module Volt
  # Volt::Boolean can be used if you want a boolean type
  class Boolean
  end

  class TypeValidator
    def self.validate(model, field_name, args)
      errors = {}
      value  = model.get(field_name)

      type_restriction = args.is_a?(Hash) ? (args[:type] || args[:types]) : args

      # Make into an array of 1 if its not already an array.
      type_restrictions = [type_restriction].flatten

      valid_type = false
      type_restrictions.each do |type_rest|
        if value.is_a?(type_rest)
          valid_type = true
          break
        end
      end

      unless valid_type
        if args.is_a?(Hash) && args[:message]
          message = args[:message]
        else
          type_msgs = type_restrictions.map do |type_rest|
            if [Fixnum, Float, Numeric].include?(type_rest)
              "a number"
            elsif type_rest == NilClass
              # we don't mention the nil restriction
              nil
            elsif type_rest == Volt::Boolean
              ['true', 'false']
            elsif type_rest == TrueClass
              'true'
            elsif type_rest == FalseClass
              'false'
            else
              "a #{type_rest.to_s}"
            end
          end.flatten

          message = "must be #{type_msgs.compact.to_sentence(conjunction: 'or')}"
        end

        errors[field_name] = [message]
      end

      errors
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
volt-0.9.6 lib/volt/models/validators/type_validator.rb
volt-0.9.6.pre3 lib/volt/models/validators/type_validator.rb
volt-0.9.6.pre2 lib/volt/models/validators/type_validator.rb
volt-0.9.6.pre1 lib/volt/models/validators/type_validator.rb
volt-0.9.5 lib/volt/models/validators/type_validator.rb
volt-0.9.5.pre12 lib/volt/models/validators/type_validator.rb
volt-0.9.5.pre11 lib/volt/models/validators/type_validator.rb
volt-0.9.5.pre9 lib/volt/models/validators/type_validator.rb
volt-0.9.5.pre8 lib/volt/models/validators/type_validator.rb
volt-0.9.5.pre7 lib/volt/models/validators/type_validator.rb
volt-0.9.5.pre6 lib/volt/models/validators/type_validator.rb
volt-0.9.5.pre5 lib/volt/models/validators/type_validator.rb