CDLUC3/resync-client

View on GitHub
lib/resync/client.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'resync'
require 'resync/client/mixins'

Dir.glob(File.expand_path('../client/*.rb', __FILE__)).sort.each(&method(:require))

module Resync

  # Utility class for retrieving HTTP content and parsing it as ResourceSync documents.
  class Client

    # ------------------------------------------------------------
    # Initializer

    # Creates a new +Client+
    # @param helper [HTTPHelper] the HTTP helper. Defaults to a new HTTP helper with
    #   +resync-client VERSION+ as the User-Agent string.
    def initialize(helper: HTTPHelper.new(user_agent: "resync-client #{VERSION}"))
      @helper = helper
    end

    # ------------------------------------------------------------
    # Public methods

    # Gets the content of the specified URI and parses it as a ResourceSync document.
    def get_and_parse(uri)
      uri = Resync::XML.to_uri(uri)
      raw_contents = get(uri)
      doc = XMLParser.parse(raw_contents)
      doc.client_delegate = self
      doc
    end

    # Gets the content of the specified URI as a string.
    # @param uri [URI, String] the URI to download
    # @return [String] the content of the URI
    def get(uri)
      uri = Resync::XML.to_uri(uri)
      @helper.fetch(uri: uri)
    end

    # Gets the content of the specified URI and saves it to a temporary file.
    # @param uri [URI, String] the URI to download
    # @return [String] the path to the downloaded file
    def download_to_temp_file(uri)
      uri = Resync::XML.to_uri(uri)
      @helper.fetch_to_file(uri: uri)
    end

    # Gets the content of the specified URI and saves it to the specified file,
    # overwriting it if it exists.
    # @param uri [URI, String] the URI to download
    # @param path [String] the path to save the download to
    # @return [String] the path to the downloaded file
    def download_to_file(uri:, path:)
      uri = Resync::XML.to_uri(uri)
      @helper.fetch_to_file(path: path, uri: uri)
    end

    # Allows a {Client} to act as a {Mixins::ClientDelegator} delegate.
    # @return [Client] this client
    def client
      self
    end

  end
end