Sha256: bbf035f139da6fcf7bd2e50a73e4b248df6d605b3dc8ae6fe478639cc9512195

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

module Pupa
  class Refinements
    # A refinement for JSON Schema to validate "email" and "uri" formats.
    module Format
      # @see http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
      def validate(current_schema, data, fragments, processor, validator, options = {})
        case current_schema.schema['format']
        when 'email'
          error_message = "The property '#{build_fragment(fragments)}' must be a valid email address"
          validation_error(processor, error_message, fragments, current_schema, self, options[:record_errors]) and return if !data.is_a?(String)
          address = Mail::Address.new(data)
          unless (address.address == data && address.domain && address.__send__(:tree).domain.dot_atom_text.elements.size > 1 rescue false)
            validation_error(processor, error_message, fragments, current_schema, self, options[:record_errors])
            return
          end
        when 'uri'
          error_message = "The property '#{build_fragment(fragments)}' must be a valid URI"
          validation_error(processor, error_message, fragments, current_schema, self, options[:record_errors]) and return if !data.is_a?(String)
          r = URI::DEFAULT_PARSER.regexp[:ABS_URI]
          unless r.match(data)
            validation_error(processor, error_message, fragments, current_schema, self, options[:record_errors])
            return
          end
        else
          super
        end
      end
    end

    class ::JSON::Schema::FormatAttribute
      class << self
        prepend Pupa::Refinements::Format
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pupa-0.0.1 lib/pupa/refinements/json-schema.rb