xftp 0.1.0.pre.alpha → 0.2.0.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: 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