Sha256: c06623705d87030fff05ed6eb35037d4cc09a2d84fbeab6939b63ead483921d2
Contents?: true
Size: 1.7 KB
Versions: 2
Compression:
Stored size: 1.7 KB
Contents
module Pupa module Refinements # A refinement for JSON Schema to validate "email" and "uri" formats. Using # Ruby's refinements doesn't seem to work, possibly because `refine` can't # be used with `prepend`. module FormatAttribute # @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 end end class JSON::Schema::FormatAttribute class << self prepend Pupa::Refinements::FormatAttribute end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
pupa-0.0.9 | lib/pupa/refinements/json-schema.rb |
pupa-0.0.8 | lib/pupa/refinements/json-schema.rb |