Sha256: aa49b15cb1b282ccba1f1f4d9a7b67270bba0ac2cc480b699096678513e02219

Contents?: true

Size: 999 Bytes

Versions: 1

Compression:

Stored size: 999 Bytes

Contents

require 'xftp/session/ftp'
require 'xftp/session/sftp'

module XFTP
  # The XFTP entry point
  # @api private
  class Client
    SCHEME_ADAPTERS = {
      ftp:  XFTP::Session::FTP,
      sftp: XFTP::Session::SFTP
    }

    def self.start(url, settings, &callback)
      new(SCHEME_ADAPTERS).call(url, settings, &callback)
    end

    def initialize(scheme_adapters)
      @scheme_adapters = scheme_adapters
    end

    # Initiates a new session
    # @see XFTP::Validator::Settings
    def call(url, settings, &block)
      uri = URI.parse(url)
      klass = adapter_class(uri.scheme)
      session = klass.new(uri, settings.deep_dup)
      session.start(&block)
    end

    private

    # Detects a session adapter class
    # @param [String, Symbol] scheme the uri scheme
    # @return [Class] session adapter class
    def adapter_class(scheme)
      @scheme_adapters.fetch(scheme.to_sym) do
        fail NotSupportedProtocol, "Not supported protocol '#{scheme}'"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
xftp-0.5.0 lib/xftp/client.rb