niftp 2.0.1 → 2.1.0
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 +7 -0
- data/.travis.yml +7 -0
- data/CONTRIBUTING.md +30 -0
- data/Guardfile +7 -0
- data/README.md +7 -4
- data/Rakefile +0 -10
- data/lib/niftp.rb +45 -15
- data/lib/niftp/version.rb +1 -1
- data/niftp.gemspec +9 -8
- data/test/niftp_test.rb +87 -87
- data/test/test_helper.rb +6 -5
- metadata +82 -56
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4ecdd6f91f41ec89d5f2f51e87d06aa829999a0b
|
4
|
+
data.tar.gz: def6a841b38631985ea3e1dd5203a034f55f822f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8661c3de51ddb34af10bb16982ef174c6d34a5d9a75f5717e4f47ab308733de1b3acef4359af4287c36043c64ee64c1b84e81f7be0d3aa2cb36b72f33431705a
|
7
|
+
data.tar.gz: aa51e846a3efae363e2e458193609d4701a6c192ef1b6351a6ed2f44beb9f54116a99000eaccdd75ac7b6034351c5c87cd5c8c428b0c160d2f8b76a149b41885
|
data/.travis.yml
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Pull requests are very welcome. Please follow these guidelines (modeled after
|
2
|
+
thoughtbot's):
|
3
|
+
|
4
|
+
1. Fork the repo.
|
5
|
+
|
6
|
+
1. Run the tests. All changes made to the code have passing tests: `bundle && rake`
|
7
|
+
|
8
|
+
1. Add a test for your change/fix. Only refactoring and documentation changes
|
9
|
+
require no new tests.
|
10
|
+
|
11
|
+
1. Push to your fork and submit a pull request.
|
12
|
+
|
13
|
+
I will respond as quickly as possible and may suggest some changes,
|
14
|
+
improvements or alternatives. Some things that will increase the chance that
|
15
|
+
your pull request is accepted, taken straight from the Ruby on Rails guide:
|
16
|
+
|
17
|
+
* Use Rails idioms and helpers
|
18
|
+
* Include tests that fail without your code, and pass with it
|
19
|
+
* Update the documentation, the surrounding one or whatever is affected by
|
20
|
+
your contribution
|
21
|
+
|
22
|
+
Syntax:
|
23
|
+
|
24
|
+
* Follow the conventions you see used in the source already.
|
25
|
+
* [No trailing whitespace](http://blogobaggins.com/2009/03/31/waging-war-on-whitespace.html).
|
26
|
+
Blank lines should not have any space.
|
27
|
+
* Two spaces, no tabs.
|
28
|
+
* Prefer &&/|| over and/or.
|
29
|
+
* MyClass.my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
|
30
|
+
* a = b and not a=b.
|
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -3,6 +3,9 @@ use. It abstracts away the FTP plumbing, such as establishing and closing
|
|
3
3
|
connections. Options include retrying your commands on flakey FTP servers, and
|
4
4
|
forced timeouts. FTP Secure (FTPS) is also supported.
|
5
5
|
|
6
|
+
[](https://codeclimate.com/github/chmurph2/NiFTP)
|
7
|
+
[](https://travis-ci.org/chmurph2/NiFTP)
|
8
|
+
|
6
9
|
## Usage
|
7
10
|
# Without NiFTP:
|
8
11
|
begin
|
@@ -18,6 +21,7 @@ forced timeouts. FTP Secure (FTPS) is also supported.
|
|
18
21
|
# A more concrete example:
|
19
22
|
|
20
23
|
# Mixin the +NiFTP+ module, which provides the +ftp+ method.
|
24
|
+
require 'niftp'
|
21
25
|
class SomeObject
|
22
26
|
include NiFTP
|
23
27
|
|
@@ -49,8 +53,8 @@ forced timeouts. FTP Secure (FTPS) is also supported.
|
|
49
53
|
* **matching**: An exception message regex to limit when the code block is
|
50
54
|
retried (default: /.*/). See the
|
51
55
|
[retryable](https://github.com/nfedyashev/retryable) gem for usage details
|
52
|
-
* **timeout**: The number of seconds to wait before timing out
|
53
|
-
Use 0 to disable the timeout.
|
56
|
+
* **timeout**: The number of seconds to wait before timing out authentication
|
57
|
+
(default: 30). Use 0 to disable the authentication timeout.
|
54
58
|
* **passive**: Set to false to prevent a connection in passive mode (default:
|
55
59
|
true).
|
56
60
|
|
@@ -62,5 +66,4 @@ forced timeouts. FTP Secure (FTPS) is also supported.
|
|
62
66
|
|
63
67
|
## Testing
|
64
68
|
|
65
|
-
Tests are written
|
66
|
-
(REE) and 1.9.2.
|
69
|
+
Tests are written using minitest-spec and Mocha.
|
data/Rakefile
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
require 'rake/testtask'
|
3
|
-
require 'rake/rdoctask'
|
4
3
|
|
5
4
|
desc 'Default: run unit tests.'
|
6
5
|
task :default => :test
|
@@ -11,13 +10,4 @@ Rake::TestTask.new(:test) do |test|
|
|
11
10
|
test.libs << 'lib' << 'test'
|
12
11
|
test.pattern = 'test/**/*_test.rb'
|
13
12
|
test.verbose = true
|
14
|
-
end
|
15
|
-
|
16
|
-
Rake::RDocTask.new do |rdoc|
|
17
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
18
|
-
|
19
|
-
rdoc.rdoc_dir = 'rdoc'
|
20
|
-
rdoc.title = "NiFTP #{version}"
|
21
|
-
rdoc.rdoc_files.include('README*')
|
22
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
23
13
|
end
|
data/lib/niftp.rb
CHANGED
@@ -2,7 +2,6 @@ require "net/ftp"
|
|
2
2
|
require "ftpfxp"
|
3
3
|
require "retryable"
|
4
4
|
require "timeout"
|
5
|
-
require "active_support/core_ext"
|
6
5
|
|
7
6
|
# Abstracts away File Transfer Protocol plumbing, such as establishing and
|
8
7
|
# closing connections.
|
@@ -13,26 +12,57 @@ module NiFTP
|
|
13
12
|
#
|
14
13
|
# See the README for available options and examples.
|
15
14
|
def ftp(host, options = {}, &block)
|
16
|
-
options.
|
17
|
-
:username => "", :password => "", :port => 21, :ftps => false,
|
18
|
-
:passive => true, :timeout => 30.seconds, :tries => 2, :sleep => 1.second,
|
19
|
-
:on => StandardError, :matching => /.*/)
|
15
|
+
options = default_options.merge(options)
|
20
16
|
raise "The :tries option must be > 0." if options[:tries] < 1
|
21
|
-
retryable(
|
22
|
-
|
23
|
-
ftp = options[:ftps] ? Net::FTPFXPTLS.new : Net::FTP.new
|
24
|
-
ftp.passive = options[:passive]
|
17
|
+
Retryable.retryable(retryable_options(options)) do
|
18
|
+
ftp = instantiate_ftp_per_options(options)
|
25
19
|
begin
|
26
|
-
|
27
|
-
|
28
|
-
ftp.login options[:username], options[:password]
|
29
|
-
end
|
30
|
-
yield ftp if ftp.present? && block_given?
|
20
|
+
login_with_timeout(ftp, host, options)
|
21
|
+
yield ftp if ftp && block_given?
|
31
22
|
ensure
|
32
|
-
ftp.
|
23
|
+
ftp.close if ftp
|
33
24
|
end
|
34
25
|
end
|
35
26
|
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def login_with_timeout(ftp, host, options)
|
31
|
+
Timeout::timeout(options[:timeout]) do
|
32
|
+
ftp.connect host, options[:port]
|
33
|
+
ftp.login options[:username], options[:password]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def instantiate_ftp_per_options(options)
|
38
|
+
(options[:ftps] ? Net::FTPFXPTLS.new : Net::FTP.new).tap do |ftp|
|
39
|
+
ftp.passive = options[:passive]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def default_options
|
44
|
+
{
|
45
|
+
:username => "",
|
46
|
+
:password => "",
|
47
|
+
:port => 21,
|
48
|
+
:ftps => false,
|
49
|
+
:passive => true,
|
50
|
+
:timeout => 30, # seconds
|
51
|
+
:tries => 2,
|
52
|
+
:sleep => 1, # second
|
53
|
+
:on => StandardError,
|
54
|
+
:matching => /.*/
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def retryable_options(options)
|
59
|
+
{
|
60
|
+
:tries => options[:tries],
|
61
|
+
:sleep => options[:sleep],
|
62
|
+
:on => options[:on],
|
63
|
+
:matching => options[:matching]
|
64
|
+
}
|
65
|
+
end
|
36
66
|
end
|
37
67
|
|
38
68
|
# Alias for those that prefer a conventional module name.
|
data/lib/niftp/version.rb
CHANGED
data/niftp.gemspec
CHANGED
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = %q{NiFTP makes Ruby's decidedly un-nifty Net::FTP library
|
13
13
|
easier to use.}
|
14
14
|
s.description = s.summary
|
15
|
+
s.license = "MIT"
|
15
16
|
|
16
17
|
s.rubyforge_project = "niftp"
|
17
18
|
|
@@ -27,12 +28,12 @@ Gem::Specification.new do |s|
|
|
27
28
|
s.extra_rdoc_files = ["README.md"] + Dir.glob("doc/*")
|
28
29
|
|
29
30
|
# Dependencies
|
30
|
-
s.add_dependency "ftpfxp",
|
31
|
-
s.add_dependency "retryable",
|
32
|
-
s.add_dependency "
|
33
|
-
s.
|
34
|
-
s.add_development_dependency "
|
35
|
-
s.add_development_dependency "
|
36
|
-
s.add_development_dependency "
|
37
|
-
s.add_development_dependency "rake"
|
31
|
+
s.add_dependency "ftpfxp", ">= 0.0.4"
|
32
|
+
s.add_dependency "retryable", ">= 2.0"
|
33
|
+
s.add_dependency "i18n", ">= 0.5"
|
34
|
+
s.add_development_dependency "minitest", "~> 4.7"
|
35
|
+
s.add_development_dependency "guard", "~> 1.8.3"
|
36
|
+
s.add_development_dependency "guard-minitest", "~> 1.0.1"
|
37
|
+
s.add_development_dependency "mocha", "~> 0.14"
|
38
|
+
s.add_development_dependency "rake"
|
38
39
|
end
|
data/test/niftp_test.rb
CHANGED
@@ -1,113 +1,113 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
require File.expand_path('../../lib/niftp', __FILE__)
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
@object = Object.new.extend NiFTP
|
8
|
-
@options = {}
|
9
|
-
@host = "localhost"
|
10
|
-
@ftp = stub_everything
|
11
|
-
end
|
4
|
+
module NiFTP
|
5
|
+
class NiFTPTest < TestCase
|
6
|
+
describe "An object mixing in the NiFTP module" do
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
let(:object) { Object.new.extend NiFTP }
|
9
|
+
let(:host) { "localhost" }
|
10
|
+
let(:ftp) { stub_everything }
|
16
11
|
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
it "must be accessible via the Niftp shortcut" do
|
13
|
+
Niftp.must_equal NiFTP
|
14
|
+
end
|
20
15
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
@object.ftp(@host)
|
25
|
-
end
|
16
|
+
it "must raise a runtime errors if the :tries option is less than 1" do
|
17
|
+
assert_raises(RuntimeError) { object.ftp(host, { :tries => 0 }) }
|
18
|
+
end
|
26
19
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
20
|
+
it "must connect to the FTP server with the default port" do
|
21
|
+
stub_ftp
|
22
|
+
ftp.expects(:connect).with(host, 21).once.returns(stub_everything)
|
23
|
+
object.ftp(host)
|
24
|
+
end
|
32
25
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
26
|
+
it "must connect to the FTP server with the optional port" do
|
27
|
+
stub_ftp
|
28
|
+
ftp.expects(:connect).with(host, 2121).once.returns(stub_everything)
|
29
|
+
object.ftp(host, { :port => 2121 })
|
30
|
+
end
|
38
31
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
32
|
+
it "must login to the FTP server with the default username and password" do
|
33
|
+
stub_ftp
|
34
|
+
ftp.expects(:login).with("", "")
|
35
|
+
object.ftp(host)
|
36
|
+
end
|
44
37
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
38
|
+
it "must login to the FTP server with the optional username" do
|
39
|
+
stub_ftp
|
40
|
+
ftp.expects(:login).with("anonymous", "")
|
41
|
+
object.ftp(host, { :username => "anonymous" })
|
42
|
+
end
|
50
43
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
block_output = "block was executed"
|
44
|
+
it "must login to the FTP server with the optional password" do
|
45
|
+
stub_ftp
|
46
|
+
ftp.expects(:login).with("", "some password")
|
47
|
+
object.ftp(host, { :password => "some password" })
|
56
48
|
end
|
57
|
-
assert_equal "block was executed", block_output
|
58
|
-
end
|
59
49
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
50
|
+
it "must execute any arbitrary FTP code (i.e. the block)" do
|
51
|
+
stub_ftp
|
52
|
+
block_output = nil
|
53
|
+
object.ftp(host) do |ftp|
|
54
|
+
block_output = "block was executed"
|
55
|
+
end
|
56
|
+
"block was executed".must_equal block_output
|
57
|
+
end
|
65
58
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
59
|
+
it "must close the FTP connection" do
|
60
|
+
stub_ftp
|
61
|
+
ftp.expects(:close).once
|
62
|
+
object.ftp(host)
|
63
|
+
end
|
72
64
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
65
|
+
it "must use the retryable defauls when they're not explicitly set" do
|
66
|
+
Net::FTP.stubs(:new => ftp)
|
67
|
+
Retryable.expects(:retryable).with(:tries => 2, :sleep => 1,
|
68
|
+
:on => StandardError, :matching => /.*/)
|
69
|
+
object.ftp(host) { }
|
70
|
+
end
|
71
|
+
|
72
|
+
it "must use the :tries option instead of the default" do
|
73
|
+
Net::FTP.expects(:new).times(3).returns(ftp)
|
74
|
+
assert_raises(RuntimeError) do
|
75
|
+
object.ftp(host, {:tries => 3 }) do |ftp_client|
|
76
|
+
raise "testing retryable gem"
|
77
|
+
end
|
78
78
|
end
|
79
79
|
end
|
80
|
-
end
|
81
80
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
81
|
+
it "must close the FTP connection when there is an exception" do
|
82
|
+
Net::FTP.expects(:new).times(2).returns(ftp)
|
83
|
+
ftp.expects(:close).times(2)
|
84
|
+
assert_raises(RuntimeError) do
|
85
|
+
object.ftp(host) { |ftp_client| raise "testing close"}
|
86
|
+
end
|
87
87
|
end
|
88
|
-
end
|
89
88
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
89
|
+
it "must use a 30 second (default) timeout when connecting" do
|
90
|
+
stub_ftp
|
91
|
+
Timeout.expects(:timeout).with(30)
|
92
|
+
object.ftp(host)
|
93
|
+
end
|
95
94
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
95
|
+
it "must use the :timeout option instead of the default" do
|
96
|
+
stub_ftp
|
97
|
+
Timeout.expects(:timeout).with(1)
|
98
|
+
object.ftp(host, { :timeout => 1 })
|
99
|
+
end
|
101
100
|
|
102
|
-
|
103
|
-
|
104
|
-
|
101
|
+
it "must use the FTPFXP (FTPS) library when instructed" do
|
102
|
+
Net::FTPFXPTLS.expects(:new).once.returns(ftp)
|
103
|
+
object.ftp(host, { :ftps => true })
|
104
|
+
end
|
105
105
|
end
|
106
|
-
end
|
107
106
|
|
108
|
-
|
107
|
+
private
|
109
108
|
|
110
|
-
|
111
|
-
|
109
|
+
def stub_ftp
|
110
|
+
Net::FTP.stubs(:new => ftp)
|
111
|
+
end
|
112
112
|
end
|
113
|
-
end
|
113
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,104 +1,127 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: niftp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
5
|
-
prerelease:
|
4
|
+
version: 2.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Christopher R. Murphy
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: ftpfxp
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 0.0.4
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.4
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: retryable
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
+
version: '2.0'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: activesupport
|
38
|
-
requirement: &2160532840 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- -
|
38
|
+
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
40
|
version: '2.0'
|
44
|
-
type: :runtime
|
45
|
-
prerelease: false
|
46
|
-
version_requirements: *2160532840
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: i18n
|
49
|
-
requirement:
|
50
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
51
44
|
requirements:
|
52
|
-
- -
|
45
|
+
- - ">="
|
53
46
|
- !ruby/object:Gem::Version
|
54
47
|
version: '0.5'
|
55
48
|
type: :runtime
|
56
49
|
prerelease: false
|
57
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.5'
|
58
55
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
requirement:
|
61
|
-
none: false
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
62
58
|
requirements:
|
63
|
-
- -
|
59
|
+
- - "~>"
|
64
60
|
- !ruby/object:Gem::Version
|
65
|
-
version: '
|
61
|
+
version: '4.7'
|
66
62
|
type: :development
|
67
63
|
prerelease: false
|
68
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.7'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
71
|
-
requirement:
|
72
|
-
none: false
|
70
|
+
name: guard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
73
72
|
requirements:
|
74
|
-
- -
|
73
|
+
- - "~>"
|
75
74
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
75
|
+
version: 1.8.3
|
77
76
|
type: :development
|
78
77
|
prerelease: false
|
79
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.8.3
|
80
83
|
- !ruby/object:Gem::Dependency
|
81
|
-
name:
|
82
|
-
requirement:
|
83
|
-
none: false
|
84
|
+
name: guard-minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
84
86
|
requirements:
|
85
|
-
- -
|
87
|
+
- - "~>"
|
86
88
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
89
|
+
version: 1.0.1
|
88
90
|
type: :development
|
89
91
|
prerelease: false
|
90
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.0.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mocha
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.14'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.14'
|
91
111
|
- !ruby/object:Gem::Dependency
|
92
112
|
name: rake
|
93
|
-
requirement:
|
94
|
-
none: false
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
95
114
|
requirements:
|
96
|
-
- -
|
115
|
+
- - ">="
|
97
116
|
- !ruby/object:Gem::Version
|
98
|
-
version: '0
|
117
|
+
version: '0'
|
99
118
|
type: :development
|
100
119
|
prerelease: false
|
101
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
102
125
|
description: NiFTP makes Ruby's decidedly un-nifty Net::FTP library easier to use.
|
103
126
|
email:
|
104
127
|
- chmurph2+git@gmail.com
|
@@ -107,8 +130,11 @@ extensions: []
|
|
107
130
|
extra_rdoc_files:
|
108
131
|
- README.md
|
109
132
|
files:
|
110
|
-
- .gitignore
|
133
|
+
- ".gitignore"
|
134
|
+
- ".travis.yml"
|
135
|
+
- CONTRIBUTING.md
|
111
136
|
- Gemfile
|
137
|
+
- Guardfile
|
112
138
|
- MIT-LICENSE
|
113
139
|
- README.md
|
114
140
|
- Rakefile
|
@@ -118,29 +144,29 @@ files:
|
|
118
144
|
- test/niftp_test.rb
|
119
145
|
- test/test_helper.rb
|
120
146
|
homepage: https://github.com/chmurph2/NiFTP
|
121
|
-
licenses:
|
147
|
+
licenses:
|
148
|
+
- MIT
|
149
|
+
metadata: {}
|
122
150
|
post_install_message:
|
123
151
|
rdoc_options:
|
124
|
-
- --include=examples --main README.md
|
152
|
+
- "--include=examples --main README.md"
|
125
153
|
require_paths:
|
126
154
|
- lib
|
127
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
-
none: false
|
129
156
|
requirements:
|
130
|
-
- -
|
157
|
+
- - ">="
|
131
158
|
- !ruby/object:Gem::Version
|
132
159
|
version: '0'
|
133
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
-
none: false
|
135
161
|
requirements:
|
136
|
-
- -
|
162
|
+
- - ">="
|
137
163
|
- !ruby/object:Gem::Version
|
138
164
|
version: '0'
|
139
165
|
requirements: []
|
140
166
|
rubyforge_project: niftp
|
141
|
-
rubygems_version:
|
167
|
+
rubygems_version: 2.2.3
|
142
168
|
signing_key:
|
143
|
-
specification_version:
|
169
|
+
specification_version: 4
|
144
170
|
summary: NiFTP makes Ruby's decidedly un-nifty Net::FTP library easier to use.
|
145
171
|
test_files:
|
146
172
|
- test/niftp_test.rb
|