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 +4 -4
- data/README.md +3 -3
- data/lib/xftp.rb +4 -32
- data/lib/xftp/client.rb +41 -0
- data/lib/xftp/errors.rb +1 -17
- data/lib/xftp/locale/en.yml +0 -3
- data/lib/xftp/locale/ru.yml +0 -3
- data/lib/xftp/session/ftp.rb +18 -3
- data/lib/xftp/session/sftp.rb +11 -4
- data/lib/xftp/version.rb +1 -1
- metadata +3 -23
- data/lib/xftp/validator/settings.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d82f44266494fe12bc8cf104135f043b3689e2c1
|
4
|
+
data.tar.gz: 5f5ccac9192ec65a366bc958ee625b31fc582602
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
27
|
-
|
28
|
-
x.move
|
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
|
```
|
data/lib/xftp.rb
CHANGED
@@ -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/
|
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
|
-
#
|
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
|
-
|
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
|
data/lib/xftp/client.rb
ADDED
@@ -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
|
data/lib/xftp/errors.rb
CHANGED
@@ -1,20 +1,4 @@
|
|
1
1
|
module XFTP
|
2
|
-
# Raises when the given
|
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
|
data/lib/xftp/locale/en.yml
CHANGED
data/lib/xftp/locale/ru.yml
CHANGED
data/lib/xftp/session/ftp.rb
CHANGED
@@ -22,7 +22,7 @@ module XFTP
|
|
22
22
|
super
|
23
23
|
|
24
24
|
@ftp = Net::FTP.new
|
25
|
-
@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
|
-
|
67
|
-
entries '*.*'
|
82
|
+
entries.select { |entry| file? entry }
|
68
83
|
end
|
69
84
|
|
70
85
|
# @param [String] pattern the wildcard search pattern
|
data/lib/xftp/session/sftp.rb
CHANGED
@@ -19,7 +19,7 @@ module XFTP
|
|
19
19
|
def initialize(uri, settings = {})
|
20
20
|
super
|
21
21
|
@path = Pathname '.'
|
22
|
-
@settings
|
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
|
48
|
-
|
49
|
-
|
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
|
data/lib/xftp/version.rb
CHANGED
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.
|
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.
|
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
|