Sha256: bb58ad016b32fe3a19fa0d1239dedbdc5d6a29deea85146bbb200cc6800cc27f

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

require 'active_support/core_ext/object'
require 'active_support/core_ext/hash'

require 'configuration'
require 'xftp/version'
require 'xftp/errors'
require 'xftp/validator/settings'
require 'xftp/session/ftp'
require 'xftp/session/sftp'

require_relative 'initializers/i18n'

# The XFTP entry point (facade)
module XFTP
  include Errors

  SCHEME_ADAPTERS = {
    ftp:  XFTP::Session::FTP,
    ftps: XFTP::Session::SFTP
  }

  # Config accessor
  def self.config
    @configuration ||= Configuration.new
  end

  # For a block { |config| ... }
  # @yield the (see #config)
  def self.configure
    yield config
  end

  def self.validator
    @validator ||= Validator::Settings.new
  end

  # Initiates a new session
  #
  # @param [String] :url the remote host url
  # @param [Hash] settings the connection settings
  # @option settings [Hash<Symbol, String>] :credentials the authentication credentials
  #
  # @raise [URI::InvalidURIError] if url given is not a correct URI
  # @raise [XFTP::MissingArgument] if some of the required settings are missing
  # @raise [XFTP::NotSupportedProtocol] if protocol detected by schema is not supported
  #
  # @see Net::SSH
  # @see Net::FTP
  #
  # @see XFTP::Validator::Settings
  def self.start(url, settings = {}, &block)
    uri = URI.parse(url)
    validator.call!(uri, settings)
    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 self.adapter_class(scheme)
    SCHEME_ADAPTERS[scheme.to_sym] || not_supported_protocol!(scheme)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
xftp-0.2.0.pre.alpha lib/xftp.rb
xftp-0.1.0.pre.alpha lib/xftp.rb