Sha256: d643673274e8d0a283057ded07725bc4d830900d0dc3a0f12f32598a8aaa2a0c

Contents?: true

Size: 1.07 KB

Versions: 12

Compression:

Stored size: 1.07 KB

Contents

require "addressable/uri" unless defined?(Addressable::URI)

module Berkshelf
  class SourceURI < Addressable::URI
    class << self
      # Returns a URI object based on the parsed string.
      #
      # @param [String, Addressable::URI, #to_str] uri
      #   The URI string to parse.
      #   No parsing is performed if the object is already an
      #   <code>Addressable::URI</code>.
      #
      # @raise [Berkshelf::InvalidSourceURI]
      #
      # @return [Berkshelf::SourceURI]
      def parse(uri)
        parsed_uri = super(uri)
        parsed_uri.send(:validate)
        parsed_uri
      rescue TypeError, ArgumentError => ex
        raise InvalidSourceURI.new(uri, ex)
      end
    end

    VALID_SCHEMES = %w{http https file}.freeze

    # @raise [Berkshelf::InvalidSourceURI]
    def validate
      super

      unless VALID_SCHEMES.include?(scheme)
        raise InvalidSourceURI.new(self, "invalid URI scheme '#{scheme}'. Valid schemes: #{VALID_SCHEMES}")
      end
    rescue Addressable::URI::InvalidURIError => ex
      raise InvalidSourceURI.new(self, ex)
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
berkshelf-8.0.15 lib/berkshelf/source_uri.rb
berkshelf-8.0.13 lib/berkshelf/source_uri.rb
berkshelf-8.0.12 lib/berkshelf/source_uri.rb
berkshelf-8.0.9 lib/berkshelf/source_uri.rb
berkshelf-8.0.7 lib/berkshelf/source_uri.rb
berkshelf-8.0.5 lib/berkshelf/source_uri.rb
berkshelf-8.0.2 lib/berkshelf/source_uri.rb
berkshelf-8.0.1 lib/berkshelf/source_uri.rb
berkshelf-8.0.0 lib/berkshelf/source_uri.rb
berkshelf-7.2.2 lib/berkshelf/source_uri.rb
berkshelf-7.2.1 lib/berkshelf/source_uri.rb
berkshelf-7.2.0 lib/berkshelf/source_uri.rb