Sha256: 9ab311a840ac8a6bf6c26802c115884cc41810a8cff33db78a675b69d9d2fea0

Contents?: true

Size: 1.09 KB

Versions: 5

Compression:

Stored size: 1.09 KB

Contents

require "config_hound/error"
require "config_hound/parser"
require "open-uri"
require "uri"

module ConfigHound

  LoadError = Class.new(ConfigHound::Error)

  # Represents a source of configuration data.
  #
  class Resource

    class << self

      def [](arg)
        return arg if arg.is_a?(Resource)
        new(uri_for(arg))
      end

      private(:new)

      private

      def uri_for(arg)
        case arg
        when URI
          arg
        when %r{^\w+:/}
          URI(arg)
        when %r{^/}
          URI("file:#{arg}")
        else
          URI("file:#{File.expand_path(arg)}")
        end
      end

    end

    def to_s
      uri.to_s
    end

    def resolve(path)
      Resource[uri + path]
    end

    def read
      open(uri.scheme == "file" ? uri.path : uri.to_s) do |io|
        io.read
      end
    rescue Errno::ENOENT
      raise LoadError, "can't load: #{uri}"
    end

    def format
      File.extname(uri.to_s)[1..-1]
    end

    def load
      Parser.parse(read, format)
    end

    private

    def initialize(uri)
      @uri = uri
    end

    attr_reader :uri

  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
config_hound-1.4.2 lib/config_hound/resource.rb
config_hound-1.4.1 lib/config_hound/resource.rb
config_hound-1.4.0 lib/config_hound/resource.rb
config_hound-1.3.2 lib/config_hound/resource.rb
config_hound-1.3.0 lib/config_hound/resource.rb