xftp 0.1.0.pre.alpha → 0.2.0.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fadf37a688351959fd702257a6e2efb8e9600a8
4
- data.tar.gz: 0459bf1922cabbcc204bba768700a9148f483a3a
3
+ metadata.gz: 347ece5447998ac33bf75349479fb55391c9b7fe
4
+ data.tar.gz: 7fa737d776c1bd974c7dfdaf444ae86410b02525
5
5
  SHA512:
6
- metadata.gz: 3a758097ffcd936285221424b9bedf7c5c4906b97e3ad2f90073a7ad20963990053ab1b3065f2e8dd30d6ded38f0c94c96793cfcbb12e806ac963dae5904226f
7
- data.tar.gz: e48ed2864845c10837de4ae37999b765cee5ab9957eca157888267616bab73e1e9cec2ea77189d03e53b5026d79034c0fcc41824d5103f81ccfc0c95f27ddc80
6
+ metadata.gz: 03049d13008de6b272594542c33632c5c99fe82eea58656f73c94743ea56a65f6a5b0e22cede36078731a50dd42dc8b28a3e599b39aae3a9f96f9260b9e91a19
7
+ data.tar.gz: 6abf399fe37f1715f070b0a3005a6ef9252c42fec7e1796d84fcccac6798f3f6849d8c907dd6dc2b4a13b0600089b630f9b69d4a78c6a5d6e8d79ba6a86b5c54
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Vasiliy Yorkin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md CHANGED
@@ -18,18 +18,14 @@ $ gem install xftp
18
18
  ## Usage
19
19
 
20
20
  ```ruby
21
- XFTP.start('ftps://hostname', login: 'login', password: 'pass') do |x|
21
+ XFTP.start('ftps://hostname', credentials: { login: 'login', password: 'pass' }) do |x|
22
22
  x.chdir 'remote-src-path'
23
23
  x.mkdir 'new-remote-dir'
24
24
  x.rmdir 'dir-to-remove'
25
25
 
26
- x.glob '**/*.{xls,xlsx}' do |io|
27
- # process entry
28
- end
29
-
30
- x.download '**/*.{xls,xlsx}', to: 'local-dst-path' do |file|
26
+ x.glob '**/*.{xls,xlsx}' do |entry|
31
27
  # process file
32
- x.move file, to: 'remote-archive-path'
28
+ x.move entry.remote, to: File.join('remote-archive-path', entry.remote)
33
29
  end
34
30
  end
35
31
  ```
@@ -1,7 +1,11 @@
1
1
  module XFTP
2
2
  module Operations
3
3
  module FTP
4
+ # Provides a naive glob operation implementation, using (see FTP#nlst) method
4
5
  # @api private
6
+ # @see Net::FTP#nslt
7
+ # @note It isn't tested on Windows OS and chances are that it won't work,
8
+ # that's why it is implemented as a separate "command"
5
9
  class Glob
6
10
  def initialize(ftp)
7
11
  @ftp = ftp
@@ -11,12 +15,9 @@ module XFTP
11
15
  # as matches or as arguments given to the block
12
16
  # @param [String] pattern the search pattern
13
17
  # @param [Proc] callback
14
- # :reek:UnusedParameters
15
- # rubocop:disable Lint/UnusedMethodArgument
16
18
  def call(pattern, &callback)
17
- fail NotImplementedError
19
+ @ftp.nlst(pattern).each { |filename| callback.call(filename) }
18
20
  end
19
- # rubocop:enable Lint/UnusedMethodArgument
20
21
  end
21
22
  end
22
23
  end
@@ -29,6 +29,11 @@ module XFTP
29
29
  options.each { |key, val| @ftp.public_send("#{key}=", val) }
30
30
  end
31
31
 
32
+ # @return [Boolean] `true` if the argument refers to a directory on the remote host
33
+ def exists?(dirname)
34
+ entries.include? dirname
35
+ end
36
+
32
37
  # Renames (moves) a file on the server
33
38
  # @param [String] from the path to move from
34
39
  # @param [String] to the new path to move to
@@ -36,15 +41,42 @@ module XFTP
36
41
  @ftp.rename(from, to)
37
42
  end
38
43
 
44
+ # Calls the block once for each entry in the current directory
45
+ # on the remote server and yields a filename to the block
46
+ def each_file
47
+ files.each { |filename| yield filename }
48
+ end
49
+
39
50
  # @see XFTP::Operations::FTP::Glob
40
51
  def glob(pattern, &callback)
41
52
  Operations::Glob.new(@ftp).call(pattern, &callback)
42
53
  end
43
54
 
55
+ # Initiates a download from remote to local, synchronously
56
+ # @param [String] from the source remote file name
57
+ # @param [String] to the target local file name
58
+ # @param [Integer] block_size the size of file chunk
59
+ # @see Net::FTP#get
60
+ def download(from, to: File.basename(from), block_size: Net::FTP::DEFAULT_BLOCKSIZE)
61
+ @ftp.get(from, to, block_size)
62
+ end
63
+
64
+ # @return [Array<String>] an array of filenames in the remote directory
65
+ def files
66
+ # FIXME: This won't work in case of file name without extension
67
+ entries '*.*'
68
+ end
69
+
70
+ # @param [String] pattern the wildcard search pattern
71
+ # @return [Array<String>] an array of entries (including directories)
72
+ # in the remote directory
73
+ def entries(pattern = nil)
74
+ @ftp.nlst pattern
75
+ end
76
+
44
77
  protected
45
78
 
46
- # Opens a new FTP connection and
47
- # authenticates on the remote server
79
+ # Opens a new FTP connection and authenticates on the remote server
48
80
  def open
49
81
  @ftp.connect(@uri.host, @port)
50
82
  @ftp.login(@credentials[:login], @credentials[:password])
@@ -20,13 +20,13 @@ module XFTP
20
20
  super
21
21
  @path = Pathname '.'
22
22
  @settings.merge!(password: @credentials[:password])
23
- @options = XFTP.config.sftp.deep_merge(@settings)
23
+ @ssh_options = XFTP.config.ssh.deep_merge(@settings)
24
24
  end
25
25
 
26
26
  # Changes the current (remote) working directory
27
27
  # @param [String] path the relative (remote) path
28
28
  def chdir(path)
29
- @path /= path
29
+ @path += path
30
30
  end
31
31
 
32
32
  # Creates a remote directory
@@ -35,20 +35,40 @@ module XFTP
35
35
  # @param [Hash] attrs the attributes of new directory
36
36
  # supported by the the version of SFTP protocol in use
37
37
  def mkdir(dirname, attrs = {})
38
- @sftp.mkdir! pathname(dirname), attrs
38
+ @sftp.mkdir!(remote_path(dirname), attrs)
39
+ end
40
+
41
+ # @return [Boolean] `true` if the file exists
42
+ # in a current working directory on the remote host
43
+ def exists?(filename)
44
+ entries.include? filename
45
+ end
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)
39
50
  end
40
51
 
41
52
  # Removes the remote directory
42
53
  # @param [String] dirname the name of directory to be removed
43
54
  def rmdir(dirname)
44
- @sftp.rmdir! pathname(dirname)
55
+ @sftp.rmdir! remote_path(dirname)
45
56
  end
46
57
 
47
58
  # Renames (moves) a file on the server
48
59
  # @param [String] from the path to move from
49
60
  # @param [String] to the path to move to
50
61
  def move(from, to:, flags: RENAME_OPERATION_FLAGS)
51
- @sftp.rename(from, to, flags)
62
+ @sftp.rename!(remote_path(from), remote_path(to), flags)
63
+ end
64
+
65
+ # Calls the block once for each entry in the current directory
66
+ # on the remote server and (asynchronously) yields a filename to the block
67
+ def each_file
68
+ @sftp.dir.foreach(@path.to_s) do |entry|
69
+ filename = entry.name
70
+ yield filename unless directory? filename
71
+ end
52
72
  end
53
73
 
54
74
  # For more info (see Dir#glob), it's almost of the same nature
@@ -57,7 +77,29 @@ module XFTP
57
77
  # @param [Integer] (see File.fnmatch) for the meaning of the flags parameter.
58
78
  # Default value is `File::FNM_EXTGLOB`
59
79
  def glob(pattern, flags: GLOB_OPERATION_FLAGS)
60
- @sftp.dir.glob(@path.to_s, pattern, flags)
80
+ @sftp.dir.glob(@path.to_s, pattern, flags) { |entry| yield entry.name }
81
+ end
82
+
83
+ # Initiates a download from remote to local, synchronously
84
+ # @param [String] from the source remote file name
85
+ # @param [String] to the target local file name
86
+ # @param [Hash] options the download operation options
87
+ # @see Net::SFTP::Operations::Download
88
+ def download(from, to: File.basename(from), **options)
89
+ remote = remote_path(from)
90
+ local = (Pathname.pwd + to).to_s
91
+ @sftp.download!(remote, local, options)
92
+ end
93
+
94
+ # @return [Array<String>] an array of filenames in the remote directory
95
+ def files
96
+ entries.reject { |filename| directory? filename }
97
+ end
98
+
99
+ # @return [Array<String>] an array of entries (including directories)
100
+ # in the remote directory
101
+ def entries
102
+ @sftp.dir.entries(@path.to_s).map(&:name)
61
103
  end
62
104
 
63
105
  protected
@@ -83,14 +125,14 @@ module XFTP
83
125
  private
84
126
 
85
127
  def connect
86
- @ssh = Net::SSH.start(@uri.host, @credentials[:login], @options)
128
+ @ssh = Net::SSH.start(@uri.host, @credentials[:login], @ssh_options)
87
129
  @sftp = Net::SFTP::Session.new @ssh
88
130
  @sftp.connect!
89
131
  end
90
132
 
91
133
  # @return [String] a path name relative to the current working directory
92
- def pathname(relative)
93
- (@path / relative).to_s
134
+ def remote_path(relative)
135
+ (@path + relative).to_s
94
136
  end
95
137
  end
96
138
  end
data/lib/xftp/version.rb CHANGED
@@ -2,7 +2,7 @@ module XFTP
2
2
  # Gem version builder module
3
3
  module VERSION
4
4
  MAJOR = 0
5
- MINOR = 1
5
+ MINOR = 2
6
6
  PATCH = 0
7
7
  SUFFIX = 'alpha'
8
8
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xftp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.alpha
4
+ version: 0.2.0.pre.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasiliy Yorkin
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-20 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -43,6 +43,9 @@ dependencies:
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ - - ">="
46
49
  - !ruby/object:Gem::Version
47
50
  version: 0.8.7
48
51
  type: :development
@@ -50,6 +53,9 @@ dependencies:
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
55
  - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '0.8'
58
+ - - ">="
53
59
  - !ruby/object:Gem::Version
54
60
  version: 0.8.7
55
61
  - !ruby/object:Gem::Dependency
@@ -71,6 +77,9 @@ dependencies:
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.2'
82
+ - - ">="
74
83
  - !ruby/object:Gem::Version
75
84
  version: 3.2.0
76
85
  type: :development
@@ -78,6 +87,9 @@ dependencies:
78
87
  version_requirements: !ruby/object:Gem::Requirement
79
88
  requirements:
80
89
  - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '3.2'
92
+ - - ">="
81
93
  - !ruby/object:Gem::Version
82
94
  version: 3.2.0
83
95
  - !ruby/object:Gem::Dependency
@@ -85,6 +97,9 @@ dependencies:
85
97
  requirement: !ruby/object:Gem::Requirement
86
98
  requirements:
87
99
  - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '0.9'
102
+ - - ">="
88
103
  - !ruby/object:Gem::Version
89
104
  version: 0.9.2
90
105
  type: :development
@@ -92,6 +107,9 @@ dependencies:
92
107
  version_requirements: !ruby/object:Gem::Requirement
93
108
  requirements:
94
109
  - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.9'
112
+ - - ">="
95
113
  - !ruby/object:Gem::Version
96
114
  version: 0.9.2
97
115
  - !ruby/object:Gem::Dependency
@@ -99,6 +117,9 @@ dependencies:
99
117
  requirement: !ruby/object:Gem::Requirement
100
118
  requirements:
101
119
  - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '0.1'
122
+ - - ">="
102
123
  - !ruby/object:Gem::Version
103
124
  version: 0.1.1
104
125
  type: :development
@@ -106,6 +127,9 @@ dependencies:
106
127
  version_requirements: !ruby/object:Gem::Requirement
107
128
  requirements:
108
129
  - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.1'
132
+ - - ">="
109
133
  - !ruby/object:Gem::Version
110
134
  version: 0.1.1
111
135
  - !ruby/object:Gem::Dependency
@@ -113,6 +137,9 @@ dependencies:
113
137
  requirement: !ruby/object:Gem::Requirement
114
138
  requirements:
115
139
  - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: '0.6'
142
+ - - ">="
116
143
  - !ruby/object:Gem::Version
117
144
  version: 0.6.0
118
145
  type: :runtime
@@ -120,6 +147,9 @@ dependencies:
120
147
  version_requirements: !ruby/object:Gem::Requirement
121
148
  requirements:
122
149
  - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.6'
152
+ - - ">="
123
153
  - !ruby/object:Gem::Version
124
154
  version: 0.6.0
125
155
  - !ruby/object:Gem::Dependency
@@ -127,6 +157,9 @@ dependencies:
127
157
  requirement: !ruby/object:Gem::Requirement
128
158
  requirements:
129
159
  - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '2.1'
162
+ - - ">="
130
163
  - !ruby/object:Gem::Version
131
164
  version: 2.1.2
132
165
  type: :runtime
@@ -134,6 +167,9 @@ dependencies:
134
167
  version_requirements: !ruby/object:Gem::Requirement
135
168
  requirements:
136
169
  - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: '2.1'
172
+ - - ">="
137
173
  - !ruby/object:Gem::Version
138
174
  version: 2.1.2
139
175
  - !ruby/object:Gem::Dependency
@@ -141,6 +177,9 @@ dependencies:
141
177
  requirement: !ruby/object:Gem::Requirement
142
178
  requirements:
143
179
  - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '3.2'
182
+ - - ">="
144
183
  - !ruby/object:Gem::Version
145
184
  version: 3.2.21
146
185
  type: :runtime
@@ -148,31 +187,21 @@ dependencies:
148
187
  version_requirements: !ruby/object:Gem::Requirement
149
188
  requirements:
150
189
  - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: '3.2'
192
+ - - ">="
151
193
  - !ruby/object:Gem::Version
152
194
  version: 3.2.21
153
- description: Unified interface for ftp/sftp
195
+ description: Unified interface for ftp/sftp protocols, specific protocol is selected
196
+ by uri scheme
154
197
  email:
155
198
  - vasiliy.yorkin@gmail.com
156
- executables:
157
- - console
158
- - rspec
159
- - setup
199
+ executables: []
160
200
  extensions: []
161
201
  extra_rdoc_files: []
162
202
  files:
163
- - ".gitignore"
164
- - ".overcommit.yml"
165
- - ".reek"
166
- - ".rspec"
167
- - ".rubocop.yml"
168
- - ".ruby-version"
169
- - ".travis.yml"
170
- - Gemfile
203
+ - LICENSE.txt
171
204
  - README.md
172
- - Rakefile
173
- - bin/console
174
- - bin/rspec
175
- - bin/setup
176
205
  - lib/configuration.rb
177
206
  - lib/initializers/i18n.rb
178
207
  - lib/xftp.rb
@@ -186,9 +215,9 @@ files:
186
215
  - lib/xftp/session/sftp.rb
187
216
  - lib/xftp/validator/settings.rb
188
217
  - lib/xftp/version.rb
189
- - xftp.gemspec
190
218
  homepage: https://github.com/vyorkin/xftp
191
- licenses: []
219
+ licenses:
220
+ - MIT
192
221
  metadata: {}
193
222
  post_install_message:
194
223
  rdoc_options: []
@@ -209,6 +238,6 @@ rubyforge_project:
209
238
  rubygems_version: 2.2.2
210
239
  signing_key:
211
240
  specification_version: 4
212
- summary: Unified interface for ftp/sftp
241
+ summary: xftp-0.2.0-alpha
213
242
  test_files: []
214
243
  has_rdoc:
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
data/.overcommit.yml DELETED
@@ -1,42 +0,0 @@
1
- # Use this file to configure the Overcommit hooks you wish to use. This will
2
- # extend the default configuration defined in:
3
- # https://github.com/brigade/overcommit/blob/master/config/default.yml
4
- #
5
- # At the topmost level of this YAML file is a key representing type of hook
6
- # being run (e.g. pre-commit, commit-msg, etc.). Within each type you can
7
- # customize each hook, such as whether to only run it on certain files (via
8
- # `include`), whether to only display output if it fails (via `quiet`), etc.
9
- #
10
- # For a complete list of hooks, see:
11
- # https://github.com/brigade/overcommit/tree/master/lib/overcommit/hook
12
- #
13
- # For a complete list of options that you can use to customize hooks, see:
14
- # https://github.com/brigade/overcommit#configuration
15
- #
16
- # Uncomment the following lines to make the configuration take effect.
17
-
18
- CommitMsg:
19
- HardTabs:
20
- enabled: true
21
-
22
- PreCommit:
23
- Rubocop:
24
- enabled: true
25
- on_warn: fail
26
- HardTabs:
27
- enabled: true
28
- Reek:
29
- enabled: true
30
- LocalPathsInGemfile:
31
- enabled: true
32
- TrailingWhitespace:
33
- enabled: true
34
- BundleCheck:
35
- enabled: true
36
-
37
- PostCheckout:
38
- SubmoduleStatus:
39
- enabled: true
40
- GitGuilt:
41
- enabled: true
42
-
data/.reek DELETED
@@ -1,3 +0,0 @@
1
- ---
2
- PrimaDonnaMethod:
3
- enabled: false
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --require spec_helper
data/.rubocop.yml DELETED
@@ -1,2 +0,0 @@
1
- Metrics/LineLength:
2
- Max: 120
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.1.5
data/.travis.yml DELETED
@@ -1,3 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.2.1
data/Gemfile DELETED
@@ -1,19 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
4
-
5
- group :development, :test do
6
- gem 'pry-byebug'
7
- end
8
-
9
- group :development do
10
- gem 'reek', require: false
11
- gem 'brakeman', require: false
12
- gem 'rubocop', require: false
13
- gem 'overcommit'
14
- end
15
-
16
- group :test do
17
- gem 'mutant'
18
- gem 'mutant-rspec'
19
- end
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require 'bundler/gem_tasks'
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "xftp"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
data/bin/rspec DELETED
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # This file was generated by Bundler.
4
- #
5
- # The application 'rspec' is installed as part of a gem, and
6
- # this file is here to facilitate running it.
7
- #
8
-
9
- require 'pathname'
10
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
- Pathname.new(__FILE__).realpath)
12
-
13
- require 'rubygems'
14
- require 'bundler/setup'
15
-
16
- load Gem.bin_path('rspec-core', 'rspec')
data/bin/setup DELETED
@@ -1,7 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
- bundle install
6
-
7
- # Do any other automated setup that you need to do here
data/xftp.gemspec DELETED
@@ -1,35 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'xftp/version'
5
-
6
- TEST_FILES = %r{^(test|spec|features)/}
7
-
8
- Gem::Specification.new do |spec|
9
- spec.name = 'xftp'
10
- spec.version = XFTP::VERSION::STRING
11
- spec.authors = ['Vasiliy Yorkin']
12
- spec.email = ['vasiliy.yorkin@gmail.com']
13
-
14
- spec.summary = 'Unified interface for ftp/sftp'
15
- spec.description = spec.summary
16
- spec.homepage = 'https://github.com/vyorkin/xftp'
17
-
18
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match TEST_FILES }
19
- spec.bindir = 'bin'
20
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
- spec.test_files = spec.files.grep(TEST_FILES)
22
- spec.require_paths = ['lib']
23
-
24
- spec.add_development_dependency 'bundler', '~> 1.8'
25
- spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'yard', '~> 0.8.7'
27
- spec.add_development_dependency 'yard-rspec', '~> 0.1'
28
- spec.add_development_dependency 'rspec', '~> 3.2.0'
29
- spec.add_development_dependency 'simplecov', '~> 0.9.2'
30
- spec.add_development_dependency 'fake_ftp', '~> 0.1.1'
31
-
32
- spec.add_runtime_dependency 'i18n', '~> 0.6.0'
33
- spec.add_runtime_dependency 'net-sftp', '~> 2.1.2'
34
- spec.add_runtime_dependency 'activesupport', '~> 3.2.21'
35
- end