xftp 0.2.0.pre.alpha → 0.2.1.pre.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 347ece5447998ac33bf75349479fb55391c9b7fe
4
- data.tar.gz: 7fa737d776c1bd974c7dfdaf444ae86410b02525
3
+ metadata.gz: d82f44266494fe12bc8cf104135f043b3689e2c1
4
+ data.tar.gz: 5f5ccac9192ec65a366bc958ee625b31fc582602
5
5
  SHA512:
6
- metadata.gz: 03049d13008de6b272594542c33632c5c99fe82eea58656f73c94743ea56a65f6a5b0e22cede36078731a50dd42dc8b28a3e599b39aae3a9f96f9260b9e91a19
7
- data.tar.gz: 6abf399fe37f1715f070b0a3005a6ef9252c42fec7e1796d84fcccac6798f3f6849d8c907dd6dc2b4a13b0600089b630f9b69d4a78c6a5d6e8d79ba6a86b5c54
6
+ metadata.gz: 1b8ed8dffdf2737832b99cb3849f3bf3c1340da21eb5b49f3385cacae2d0ade0cf3cfdb2e6dc387323d7a11bb40e6768aa8d80ff4b2e963c750e30576d55bbd9
7
+ data.tar.gz: 49778fb1e45dc2468e49de0ef63e410b5fe180764f24953631afc5a73ffcef2b37d1ff359e18e8fdaa6e024edd261df828ef033d5436e1603bf162bf5c7203a2
data/README.md CHANGED
@@ -23,9 +23,9 @@ XFTP.start('ftps://hostname', credentials: { login: 'login', password: 'pass' })
23
23
  x.mkdir 'new-remote-dir'
24
24
  x.rmdir 'dir-to-remove'
25
25
 
26
- x.glob '**/*.{xls,xlsx}' do |entry|
27
- # process file
28
- x.move entry.remote, to: File.join('remote-archive-path', entry.remote)
26
+ x.each_file do |file|
27
+ x.download file
28
+ x.move file, to: File.join('remote-archive-path', file)
29
29
  end
30
30
  end
31
31
  ```
@@ -4,21 +4,12 @@ require 'active_support/core_ext/hash'
4
4
  require 'configuration'
5
5
  require 'xftp/version'
6
6
  require 'xftp/errors'
7
- require 'xftp/validator/settings'
8
- require 'xftp/session/ftp'
9
- require 'xftp/session/sftp'
7
+ require 'xftp/client'
10
8
 
11
9
  require_relative 'initializers/i18n'
12
10
 
13
- # The XFTP entry point (facade)
11
+ # Interface unification for FTP/SFTP protocols
14
12
  module XFTP
15
- include Errors
16
-
17
- SCHEME_ADAPTERS = {
18
- ftp: XFTP::Session::FTP,
19
- ftps: XFTP::Session::SFTP
20
- }
21
-
22
13
  # Config accessor
23
14
  def self.config
24
15
  @configuration ||= Configuration.new
@@ -30,10 +21,6 @@ module XFTP
30
21
  yield config
31
22
  end
32
23
 
33
- def self.validator
34
- @validator ||= Validator::Settings.new
35
- end
36
-
37
24
  # Initiates a new session
38
25
  #
39
26
  # @param [String] :url the remote host url
@@ -46,22 +33,7 @@ module XFTP
46
33
  #
47
34
  # @see Net::SSH
48
35
  # @see Net::FTP
49
- #
50
- # @see XFTP::Validator::Settings
51
- def self.start(url, settings = {}, &block)
52
- uri = URI.parse(url)
53
- validator.call!(uri, settings)
54
- klass = adapter_class(uri.scheme)
55
- session = klass.new(uri, settings.deep_dup)
56
- session.start(&block)
57
- end
58
-
59
- private
60
-
61
- # Detects a session adapter class
62
- # @param [String, Symbol] scheme the uri scheme
63
- # @return [Class] session adapter class
64
- def self.adapter_class(scheme)
65
- SCHEME_ADAPTERS[scheme.to_sym] || not_supported_protocol!(scheme)
36
+ def self.start(url, settings = {}, &callback)
37
+ Client.start(url, settings, &callback)
66
38
  end
67
39
  end
@@ -0,0 +1,41 @@
1
+ require 'xftp/session/ftp'
2
+ require 'xftp/session/sftp'
3
+
4
+ module XFTP
5
+ # The XFTP entry point
6
+ # @api private
7
+ class Client
8
+ SCHEME_ADAPTERS = {
9
+ ftp: XFTP::Session::FTP,
10
+ ftps: XFTP::Session::SFTP
11
+ }
12
+
13
+ def self.start(url, settings, &callback)
14
+ new(SCHEME_ADAPTERS).call(url, settings, &callback)
15
+ end
16
+
17
+ def initialize(scheme_adapters)
18
+ @scheme_adapters = scheme_adapters
19
+ end
20
+
21
+ # Initiates a new session
22
+ # @see XFTP::Validator::Settings
23
+ def call(url, settings, &block)
24
+ uri = URI.parse(url)
25
+ klass = adapter_class(uri.scheme)
26
+ session = klass.new(uri, settings.deep_dup)
27
+ session.start(&block)
28
+ end
29
+
30
+ private
31
+
32
+ # Detects a session adapter class
33
+ # @param [String, Symbol] scheme the uri scheme
34
+ # @return [Class] session adapter class
35
+ def adapter_class(scheme)
36
+ @scheme_adapters.fetch(scheme.to_sym) do
37
+ fail NotSupportedProtocol, "Not supported protocol '#{scheme}'"
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,20 +1,4 @@
1
1
  module XFTP
2
- # Raises when the given argument does not match required format
3
- class InvalidArgument < ArgumentError; end
4
- # Raises when required argument is missing or blank
5
- class MissingArgument < ArgumentError; end
6
- # Raise when the given protocol is not supported
2
+ # Raises when the given protocol is not supported
7
3
  class NotSupportedProtocol < ArgumentError; end
8
-
9
- # Shortcut method to fail
10
- # with a localized error message
11
- module Errors
12
- def missing_setting!(setting)
13
- fail MissingArgument, I18n.t('errors.missing_setting', key: setting)
14
- end
15
-
16
- def not_supported_protocol!(protocol)
17
- fail NotSupportedProtocol, I18n.t('errors.not_supported_protocol', protocol: protocol)
18
- end
19
- end
20
4
  end
@@ -1,5 +1,2 @@
1
1
  ---
2
2
  en:
3
- errors:
4
- missing_setting: 'missing setting %{key}'
5
- not_supported_protocol: 'protocol %{protocol} is not supported'
@@ -1,5 +1,2 @@
1
1
  ---
2
2
  ru:
3
- errors:
4
- missed_config_option: 'не указан параметр подключения %{key}'
5
- not_supported_protocol: 'протокол %{protocol} не поддерживается'
@@ -22,7 +22,7 @@ module XFTP
22
22
  super
23
23
 
24
24
  @ftp = Net::FTP.new
25
- @port = uri.port || settings.delete(:port) || Net::FTP::FTP_PORT
25
+ @port = settings.delete(:port) || uri.port || Net::FTP::FTP_PORT
26
26
  @credentials[:login] ||= 'anonymous'
27
27
 
28
28
  options = XFTP.config.ftp.deep_merge(@settings)
@@ -34,6 +34,22 @@ module XFTP
34
34
  entries.include? dirname
35
35
  end
36
36
 
37
+ # @return [Boolean] `true` if the argument refers to
38
+ # a directory on the remote host
39
+ def directory?(path)
40
+ chdir path
41
+ chdir '..'
42
+ true
43
+ rescue
44
+ false
45
+ end
46
+
47
+ # @return [Boolean] `true` if the argument refers to
48
+ # a file on the remote host
49
+ def file?(path)
50
+ !directory?(path)
51
+ end
52
+
37
53
  # Renames (moves) a file on the server
38
54
  # @param [String] from the path to move from
39
55
  # @param [String] to the new path to move to
@@ -63,8 +79,7 @@ module XFTP
63
79
 
64
80
  # @return [Array<String>] an array of filenames in the remote directory
65
81
  def files
66
- # FIXME: This won't work in case of file name without extension
67
- entries '*.*'
82
+ entries.select { |entry| file? entry }
68
83
  end
69
84
 
70
85
  # @param [String] pattern the wildcard search pattern
@@ -19,7 +19,7 @@ module XFTP
19
19
  def initialize(uri, settings = {})
20
20
  super
21
21
  @path = Pathname '.'
22
- @settings.merge!(password: @credentials[:password])
22
+ @settings[:password] = @credentials[:password]
23
23
  @ssh_options = XFTP.config.ssh.deep_merge(@settings)
24
24
  end
25
25
 
@@ -44,9 +44,16 @@ module XFTP
44
44
  entries.include? filename
45
45
  end
46
46
 
47
- # @return [Boolean] `true` if the argument refers to a directory on the remote host
48
- def directory?(dirname)
49
- @sftp.file.directory? remote_path(dirname)
47
+ # @return [Boolean] `true` if the argument refers to
48
+ # a directory on the remote host
49
+ def directory?(path)
50
+ @sftp.file.directory? remote_path(path)
51
+ end
52
+
53
+ # @return [Boolean] `true` if the argument refers to
54
+ # a file on the remote host
55
+ def file?(path)
56
+ !directory?(path)
50
57
  end
51
58
 
52
59
  # Removes the remote directory
@@ -3,7 +3,7 @@ module XFTP
3
3
  module VERSION
4
4
  MAJOR = 0
5
5
  MINOR = 2
6
- PATCH = 0
6
+ PATCH = 1
7
7
  SUFFIX = 'alpha'
8
8
 
9
9
  NUMBER = [MAJOR, MINOR, PATCH].compact.join('.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xftp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.pre.alpha
4
+ version: 0.2.1.pre.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasiliy Yorkin
@@ -112,26 +112,6 @@ dependencies:
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
114
  version: 0.9.2
115
- - !ruby/object:Gem::Dependency
116
- name: fake_ftp
117
- requirement: !ruby/object:Gem::Requirement
118
- requirements:
119
- - - "~>"
120
- - !ruby/object:Gem::Version
121
- version: '0.1'
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: 0.1.1
125
- type: :development
126
- prerelease: false
127
- version_requirements: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.1'
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- version: 0.1.1
135
115
  - !ruby/object:Gem::Dependency
136
116
  name: i18n
137
117
  requirement: !ruby/object:Gem::Requirement
@@ -205,6 +185,7 @@ files:
205
185
  - lib/configuration.rb
206
186
  - lib/initializers/i18n.rb
207
187
  - lib/xftp.rb
188
+ - lib/xftp/client.rb
208
189
  - lib/xftp/dsl/block_evaluator.rb
209
190
  - lib/xftp/errors.rb
210
191
  - lib/xftp/locale/en.yml
@@ -213,7 +194,6 @@ files:
213
194
  - lib/xftp/session/base.rb
214
195
  - lib/xftp/session/ftp.rb
215
196
  - lib/xftp/session/sftp.rb
216
- - lib/xftp/validator/settings.rb
217
197
  - lib/xftp/version.rb
218
198
  homepage: https://github.com/vyorkin/xftp
219
199
  licenses:
@@ -238,6 +218,6 @@ rubyforge_project:
238
218
  rubygems_version: 2.2.2
239
219
  signing_key:
240
220
  specification_version: 4
241
- summary: xftp-0.2.0-alpha
221
+ summary: xftp-0.2.1-alpha
242
222
  test_files: []
243
223
  has_rdoc:
@@ -1,25 +0,0 @@
1
- module XFTP
2
- module Validator
3
- # Connection settings validator
4
- # @api private
5
- class Settings
6
- include Errors
7
-
8
- # Validates the given connection settings
9
- # @param [URI] uri the remote uri
10
- # @param [Hash] settings the session connection settings
11
- # @raise [XFTP::MissingArgument] if some of the required settings are missing
12
- def call!(uri, settings)
13
- validate_credentials!(settings[:credentials]) if uri.scheme == 'ftps'
14
- end
15
-
16
- private
17
-
18
- def validate_credentials!(credentials)
19
- missing_setting!(:credentials) unless credentials.present?
20
- missing_setting!(:login) unless credentials[:login].present?
21
- missing_setting!(:password) unless credentials[:password].present?
22
- end
23
- end
24
- end
25
- end