Sha256: f53edf027b58a5f55fa451a64b3c8fe0d33ad6370d51d5b86e08547180203935

Contents?: true

Size: 1.13 KB

Versions: 16

Compression:

Stored size: 1.13 KB

Contents

module RsrGroup
  class Base

    def self.connect(options = {})
      requires!(options, :username, :password)

      Net::FTP.open(RsrGroup.config.ftp_host, options[:username], options[:password]) do |ftp|
        ftp.passive = true
        yield ftp
      end
    end

    protected

    def self.requires!(hash, *params)
      params.each do |param|
        if param.is_a?(Array)
          raise ArgumentError.new("Missing required parameter: #{param.first}") unless hash.has_key?(param.first)

          valid_options = param[1..-1]
          raise ArgumentError.new("Parameter: #{param.first} must be one of: #{valid_options.join(', ')}") unless valid_options.include?(hash[param.first])
        else
          raise ArgumentError.new("Missing required parameter: #{param}") unless hash.has_key?(param)
        end
      end
    end

    # Wrapper to `self.requires!` that can be used as an instance method.
    def requires!(*args)
      self.class.requires!(*args)
    end

    # Instance methods become class methods through inheritance
    def connect(options)
      self.class.connect(options) do |ftp|
        yield ftp
      end
    end

  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
rsr_group-1.7.2 lib/rsr_group/base.rb
rsr_group-1.7.1 lib/rsr_group/base.rb
rsr_group-1.7.0 lib/rsr_group/base.rb
rsr_group-1.6.2 lib/rsr_group/base.rb
rsr_group-1.6.1 lib/rsr_group/base.rb
rsr_group-1.6.0 lib/rsr_group/base.rb
rsr_group-1.5.2 lib/rsr_group/base.rb
rsr_group-1.5.1 lib/rsr_group/base.rb
rsr_group-1.5.0 lib/rsr_group/base.rb
rsr_group-1.4.0 lib/rsr_group/base.rb
rsr_group-1.3.0 lib/rsr_group/base.rb
rsr_group-1.2.0 lib/rsr_group/base.rb
rsr_group-1.1.1 lib/rsr_group/base.rb
rsr_group-1.1.0 lib/rsr_group/base.rb
rsr_group-1.0.1 lib/rsr_group/base.rb
rsr_group-1.0.0 lib/rsr_group/base.rb