class ArchivesSpaceSchema

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/aspace_client/archivesspace_json_schema.rb, line 158
def initialize
  super
  extend_schema_definition("http://json-schema.org/draft-03/schema#")
  @attributes["type"] = ArchivesSpaceTypeAttribute
  @attributes["subtype"] = ArchivesSpaceSubTypeAttribute
  @attributes["dynamic_enum"] = ArchivesSpaceDynamicEnumAttribute
  @attributes["properties"] = IfMissingAttribute
  @uri = URI.parse("http://www.archivesspace.org/archivesspace.json")
end

Public Instance Methods

already_failed?(fragments) click to toggle source
# File lib/aspace_client/archivesspace_json_schema.rb, line 169
def already_failed?(fragments)
  JSON::Validator.validation_errors.any? {|error|
    error.fragments == fragments
  }
end
validate(current_schema, data, fragments, options = {}) click to toggle source
Calls superclass method
# File lib/aspace_client/archivesspace_json_schema.rb, line 176
def validate(current_schema, data, fragments, options = {})
  super

  # Run any custom validations if we've made it this far with no errors
  if !already_failed?(fragments) && current_schema.schema.has_key?("validations")
    current_schema.schema["validations"].each do |level_and_name|
      level, name = level_and_name

      errors = JSONModel::custom_validations[name].call(data)

      errors.each do |error|
        error_string = nil

        if error.is_a? Symbol
          error_string = "Validation error code: #{error}"
        else
          field, msg = error
          prefix = level == :warning ? "Warning generated for" : "Validation failed for"
          error_string = "#{prefix} '#{field}': #{msg}"

        end

        err = JSON::Schema::ValidationError.new(error_string,
                                                fragments,
                                                "custom_validation",
                                                current_schema)

        JSON::Validator.validation_error(err)
      end
    end
  end
end