module JSON::Util::URI

Constants

SUPPORTED_PROTOCOLS

Public Class Methods

absolutize_ref(ref, base) click to toggle source
# File lib/json-schema/util/uri.rb, line 26
def self.absolutize_ref(ref, base)
  ref_uri = strip_fragment(ref.dup)

  return ref_uri if ref_uri.absolute?
  return parse(base) if ref_uri.path.empty?

  uri = strip_fragment(base.dup).join(ref_uri.path)
  normalized_uri(uri)
end
clear_cache() click to toggle source
# File lib/json-schema/util/uri.rb, line 104
def self.clear_cache
  @parse_cache = {}
  @normalize_cache = {}
end
file_uri(uri) click to toggle source
# File lib/json-schema/util/uri.rb, line 88
def self.file_uri(uri)
  parsed_uri = parse(uri)

  Addressable::URI.convert_path(parsed_uri.path)
end
normalize_ref(ref, base) click to toggle source
# File lib/json-schema/util/uri.rb, line 36
def self.normalize_ref(ref, base)
  ref_uri = parse(ref)
  base_uri = parse(base)

  ref_uri.defer_validation do
    if ref_uri.relative?
      ref_uri.merge!(base_uri)

      # Check for absolute path
      path, fragment = ref.to_s.split("#")
      if path.nil? || path == ''
        ref_uri.path = base_uri.path
      elsif path[0,1] == "/"
        ref_uri.path = Pathname.new(path).cleanpath.to_s
      else
        ref_uri.join!(path)
      end

      ref_uri.fragment = fragment
    end

    ref_uri.fragment = "" if ref_uri.fragment.nil? || ref_uri.fragment.empty?
  end

  ref_uri
end
normalized_uri(uri, base_path = Dir.pwd) click to toggle source
# File lib/json-schema/util/uri.rb, line 8
def self.normalized_uri(uri, base_path = Dir.pwd)
  @normalize_cache ||= {}
  normalized_uri = @normalize_cache[uri]

  if !normalized_uri
    normalized_uri = parse(uri)
    # Check for absolute path
    if normalized_uri.relative?
      data = normalized_uri
      data = File.join(base_path, data) if data.path[0,1] != "/"
      normalized_uri = file_uri(data)
    end
    @normalize_cache[uri] = normalized_uri.freeze
  end

  normalized_uri
end
parse(uri) click to toggle source
# File lib/json-schema/util/uri.rb, line 63
def self.parse(uri)
  if uri.is_a?(Addressable::URI)
    return uri.dup
  else
    @parse_cache ||= {}
    parsed_uri = @parse_cache[uri]
    if parsed_uri
      parsed_uri.dup
    else
      @parse_cache[uri] = Addressable::URI.parse(uri)
    end
  end
rescue Addressable::URI::InvalidURIError => e
  raise JSON::Schema::UriError.new(e.message)
end
strip_fragment(uri) click to toggle source
# File lib/json-schema/util/uri.rb, line 79
def self.strip_fragment(uri)
  parsed_uri = parse(uri)
  if parsed_uri.fragment.nil? || parsed_uri.fragment.empty?
    parsed_uri
  else
    parsed_uri.merge(:fragment => "")
  end
end
unescape_uri(uri) click to toggle source
# File lib/json-schema/util/uri.rb, line 94
def self.unescape_uri(uri)
  Addressable::URI.unescape(uri)
end
unescaped_path(uri) click to toggle source
# File lib/json-schema/util/uri.rb, line 98
def self.unescaped_path(uri)
  parsed_uri = parse(uri)

  Addressable::URI.unescape(parsed_uri.path)
end