easy_downloader 0.0.1.alpha → 0.0.2.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.
- data/Gemfile +4 -1
- data/Gemfile.lock +16 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/easy_downloader.gemspec +21 -4
- data/lib/easy_downloader.rb +73 -0
- data/lib/easy_downloader/ftp_downloader.rb +39 -0
- data/lib/easy_downloader/http_downloader.rb +30 -0
- data/lib/easy_downloader/options.rb +30 -0
- data/lib/easy_downloader/result.rb +71 -0
- data/lib/easy_downloader/sftp_downloader.rb +33 -0
- data/spec/easy_downloader/options_spec.rb +26 -0
- data/spec/spec_helper.rb +1 -0
- metadata +76 -13
- data/spec/easy_downloader_spec.rb +0 -7
data/Gemfile
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
# Add dependencies required to use your gem here.
|
3
3
|
# Example:
|
4
|
-
|
4
|
+
gem "activesupport", "~> 3.0.3"
|
5
|
+
gem 'net-sftp'
|
5
6
|
|
6
7
|
# Add dependencies to develop your gem here.
|
7
8
|
# Include everything needed to run rake, tests, features, etc.
|
8
9
|
group :development do
|
10
|
+
gem 'ruby-debug'
|
9
11
|
gem "rspec", "~> 2.1.0"
|
10
12
|
gem "bundler", "~> 1.0.0"
|
11
13
|
gem "jeweler", "~> 1.5.1"
|
12
14
|
gem "rcov", ">= 0"
|
15
|
+
gem 'yard'
|
13
16
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
activesupport (3.0.3)
|
5
|
+
columnize (0.3.2)
|
4
6
|
diff-lcs (1.1.2)
|
5
7
|
git (1.2.5)
|
6
8
|
jeweler (1.5.2)
|
7
9
|
bundler (~> 1.0.0)
|
8
10
|
git (>= 1.2.5)
|
9
11
|
rake
|
12
|
+
linecache (0.43)
|
13
|
+
net-sftp (2.0.5)
|
14
|
+
net-ssh (>= 2.0.9)
|
15
|
+
net-ssh (2.0.23)
|
10
16
|
rake (0.8.7)
|
11
17
|
rcov (0.9.9)
|
12
18
|
rspec (2.1.0)
|
@@ -17,12 +23,22 @@ GEM
|
|
17
23
|
rspec-expectations (2.1.0)
|
18
24
|
diff-lcs (~> 1.1.2)
|
19
25
|
rspec-mocks (2.1.0)
|
26
|
+
ruby-debug (0.10.4)
|
27
|
+
columnize (>= 0.1)
|
28
|
+
ruby-debug-base (~> 0.10.4.0)
|
29
|
+
ruby-debug-base (0.10.4)
|
30
|
+
linecache (>= 0.3)
|
31
|
+
yard (0.6.1)
|
20
32
|
|
21
33
|
PLATFORMS
|
22
34
|
ruby
|
23
35
|
|
24
36
|
DEPENDENCIES
|
37
|
+
activesupport (~> 3.0.3)
|
25
38
|
bundler (~> 1.0.0)
|
26
39
|
jeweler (~> 1.5.1)
|
40
|
+
net-sftp
|
27
41
|
rcov
|
28
42
|
rspec (~> 2.1.0)
|
43
|
+
ruby-debug
|
44
|
+
yard
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ Jeweler::Tasks.new do |gem|
|
|
15
15
|
gem.name = "easy_downloader"
|
16
16
|
gem.homepage = "http://github.com/btelles/easy_downloader"
|
17
17
|
gem.license = "MIT"
|
18
|
-
gem.summary = %Q{
|
18
|
+
gem.summary = %Q{A dead simple, one-method downloader, with friendly error messages}
|
19
19
|
gem.description = %Q{ EasyDownloader reduces the amount of work required to setup and check for errors when downloading from another location. This
|
20
20
|
is useful when, for example, a client wants to you to pick a file up from their FTP, SFTP, or regular website on a nightly basis.
|
21
21
|
EasyDownloader gives you a one-method means of downloading those files, returns with a friendly error message if it fails
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2.alpha
|
data/easy_downloader.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{easy_downloader}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2.alpha"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bernardo Telles"]
|
@@ -30,16 +30,21 @@ Gem::Specification.new do |s|
|
|
30
30
|
"VERSION",
|
31
31
|
"easy_downloader.gemspec",
|
32
32
|
"lib/easy_downloader.rb",
|
33
|
-
"
|
33
|
+
"lib/easy_downloader/ftp_downloader.rb",
|
34
|
+
"lib/easy_downloader/http_downloader.rb",
|
35
|
+
"lib/easy_downloader/options.rb",
|
36
|
+
"lib/easy_downloader/result.rb",
|
37
|
+
"lib/easy_downloader/sftp_downloader.rb",
|
38
|
+
"spec/easy_downloader/options_spec.rb",
|
34
39
|
"spec/spec_helper.rb"
|
35
40
|
]
|
36
41
|
s.homepage = %q{http://github.com/btelles/easy_downloader}
|
37
42
|
s.licenses = ["MIT"]
|
38
43
|
s.require_paths = ["lib"]
|
39
44
|
s.rubygems_version = %q{1.3.7}
|
40
|
-
s.summary = %q{
|
45
|
+
s.summary = %q{A dead simple, one-method downloader, with friendly error messages}
|
41
46
|
s.test_files = [
|
42
|
-
"spec/
|
47
|
+
"spec/easy_downloader/options_spec.rb",
|
43
48
|
"spec/spec_helper.rb"
|
44
49
|
]
|
45
50
|
|
@@ -48,21 +53,33 @@ Gem::Specification.new do |s|
|
|
48
53
|
s.specification_version = 3
|
49
54
|
|
50
55
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
|
+
s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.3"])
|
57
|
+
s.add_runtime_dependency(%q<net-sftp>, [">= 0"])
|
58
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
51
59
|
s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
|
52
60
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
53
61
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
54
62
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
63
|
+
s.add_development_dependency(%q<yard>, [">= 0"])
|
55
64
|
else
|
65
|
+
s.add_dependency(%q<activesupport>, ["~> 3.0.3"])
|
66
|
+
s.add_dependency(%q<net-sftp>, [">= 0"])
|
67
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
56
68
|
s.add_dependency(%q<rspec>, ["~> 2.1.0"])
|
57
69
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
58
70
|
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
59
71
|
s.add_dependency(%q<rcov>, [">= 0"])
|
72
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
60
73
|
end
|
61
74
|
else
|
75
|
+
s.add_dependency(%q<activesupport>, ["~> 3.0.3"])
|
76
|
+
s.add_dependency(%q<net-sftp>, [">= 0"])
|
77
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
62
78
|
s.add_dependency(%q<rspec>, ["~> 2.1.0"])
|
63
79
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
64
80
|
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
65
81
|
s.add_dependency(%q<rcov>, [">= 0"])
|
82
|
+
s.add_dependency(%q<yard>, [">= 0"])
|
66
83
|
end
|
67
84
|
end
|
68
85
|
|
data/lib/easy_downloader.rb
CHANGED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'easy_downloader/result'
|
2
|
+
require 'easy_downloader/options'
|
3
|
+
require 'easy_downloader/sftp_downloader'
|
4
|
+
require 'easy_downloader/ftp_downloader'
|
5
|
+
require 'easy_downloader/http_downloader'
|
6
|
+
require 'net/sftp'
|
7
|
+
module EasyDownloader
|
8
|
+
|
9
|
+
class InvalidRemoteDirectory < Exception; end
|
10
|
+
def self.download(*options)
|
11
|
+
Downloader.new(*options)
|
12
|
+
end
|
13
|
+
|
14
|
+
class Downloader
|
15
|
+
attr_reader :files, :result
|
16
|
+
|
17
|
+
include SftpDownloader
|
18
|
+
include FtpDownloader
|
19
|
+
include HttpDownloader
|
20
|
+
|
21
|
+
|
22
|
+
# Set up and immediately download files. The object has only two attributes:
|
23
|
+
# 1. result
|
24
|
+
# 2. files
|
25
|
+
#
|
26
|
+
# @param [Hash, #options] options to use including host, password, source, and destination directories.%
|
27
|
+
# The available keys are:
|
28
|
+
#
|
29
|
+
# :type => (required) The protocal used to download the file. One of :sftp, :ftp or :http.
|
30
|
+
# :host => (required) the domain of the remote server (source)
|
31
|
+
# :remote_path => a relative path to "cd" into when we first access the remote server
|
32
|
+
# :remote_pattern => a glob pattern that will select only the files we want to download.%
|
33
|
+
# see Ruby's core API if you are not familiar with this concept.
|
34
|
+
# :user => a username or login used for authenticating on the server
|
35
|
+
# :password => a password that, in combination with the user, will grant access to the remote server/host
|
36
|
+
def initialize(*options)
|
37
|
+
@options= Options.new(*options)
|
38
|
+
download
|
39
|
+
@result = @options.result
|
40
|
+
@files = @result.files_downloaded
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def download
|
46
|
+
begin
|
47
|
+
case @options.type
|
48
|
+
when :ftp
|
49
|
+
ftp_download(@options)
|
50
|
+
when :http
|
51
|
+
http_download(@options)
|
52
|
+
when :sftp
|
53
|
+
sftp_download(@options)
|
54
|
+
end
|
55
|
+
|
56
|
+
rescue Exception => e
|
57
|
+
@options.result.errors= <<-ERROR_MESSAGE
|
58
|
+
There was a problem downloading from #{@options.host}.
|
59
|
+
The error we got was:
|
60
|
+
#{e.message}
|
61
|
+
#{e.backtrace.inspect}
|
62
|
+
We tried connecting with:
|
63
|
+
host: #{@options.host}
|
64
|
+
user: #{@options.user}
|
65
|
+
pass: [filtered]
|
66
|
+
directory_path: #{@options.remote_path}
|
67
|
+
file_pattern: #{@options.remote_pattern}
|
68
|
+
destination: #{@options.local_path}
|
69
|
+
ERROR_MESSAGE
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'net/ftp'
|
2
|
+
module EasyDownloader
|
3
|
+
module FtpDownloader
|
4
|
+
def ftp_download(options)
|
5
|
+
download_count = options.download_count
|
6
|
+
result = options.result
|
7
|
+
result.started
|
8
|
+
Net::FTP.open(options.host,
|
9
|
+
options.user,
|
10
|
+
ftp_password_option(options.password)) do |ftp|
|
11
|
+
|
12
|
+
begin
|
13
|
+
ftp.chdir(options.remote_path)
|
14
|
+
rescue InvalidRemoteDirectory
|
15
|
+
end
|
16
|
+
|
17
|
+
files = ftp.nlst.select {|file_name| options.remote_pattern == '*' || file_name =~ Regexp.new(options.remote_pattern) }
|
18
|
+
puts files.join("\n")
|
19
|
+
total = files.size
|
20
|
+
result.found(files.size, files)
|
21
|
+
|
22
|
+
files.each do |path|
|
23
|
+
result.starting_path(path)
|
24
|
+
ftp.get(path, "#{options.local_path}#{path}")
|
25
|
+
download_count += 1
|
26
|
+
result.finished_path(path)
|
27
|
+
result.files_downloaded << "#{options.local_path}#{path}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
result.downloaded(download_count)
|
32
|
+
result.finished
|
33
|
+
end
|
34
|
+
|
35
|
+
def ftp_password_option(password)
|
36
|
+
password ? password : nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module HttpDownloader
|
2
|
+
def http_download(options)
|
3
|
+
#result = options.result
|
4
|
+
#result.started
|
5
|
+
#Net::SFTP.start(options.host,
|
6
|
+
# options.user,
|
7
|
+
# password_option(options.password)) do |sftp|
|
8
|
+
|
9
|
+
# files = sftp.dir.glob(options.remote_path, options.remote_pattern)
|
10
|
+
# total = files.size
|
11
|
+
# result.found(files.size, files.map(&:name))
|
12
|
+
|
13
|
+
# files.map(&:name).each do |path|
|
14
|
+
# result.starting_path(path)
|
15
|
+
# download_count += 1 if sftp.download!("#{options.remote_path}#{path}", "#{options.destination_dir}#{path}")
|
16
|
+
# result.finished_path(path)
|
17
|
+
# files_downloaded << "#{options.destination_dir}#{path}"
|
18
|
+
# end
|
19
|
+
#end
|
20
|
+
|
21
|
+
#result.downloaded(download_count)
|
22
|
+
#result.finished
|
23
|
+
end
|
24
|
+
|
25
|
+
def password_option(password)
|
26
|
+
password ?
|
27
|
+
{:password => password} :
|
28
|
+
Hash.new
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'active_support/core_ext/array/extract_options'
|
2
|
+
module EasyDownloader
|
3
|
+
class Options
|
4
|
+
attr_accessor :files, :successful, :result, :download_count,
|
5
|
+
:type, :host, :user, :password, :local_path,
|
6
|
+
:destination_dir, :remote_path, :remote_pattern
|
7
|
+
|
8
|
+
def initialize(*options)
|
9
|
+
@files = []
|
10
|
+
@successful = false
|
11
|
+
@result = Result.new
|
12
|
+
@download_count = 0
|
13
|
+
@options = options
|
14
|
+
|
15
|
+
options.extract_options!.each do |key, value|
|
16
|
+
send("#{key}=".to_sym, value) if respond_to?("#{key}=".to_sym)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def type
|
21
|
+
@type.to_sym
|
22
|
+
end
|
23
|
+
|
24
|
+
def local_path
|
25
|
+
@local_path =~ /\/$/ ?
|
26
|
+
@local_path :
|
27
|
+
@local_path + '/'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module EasyDownloader
|
2
|
+
class Result
|
3
|
+
attr_accessor :errors, :files_downloaded
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@header, @started, @finished, @errors= ''
|
7
|
+
@files_downloaded = []
|
8
|
+
@progress = ["Progress:"]
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
[@header,
|
13
|
+
found_list,
|
14
|
+
started_string,
|
15
|
+
progress,
|
16
|
+
@errors,
|
17
|
+
finished_string,
|
18
|
+
@footer].join("\n")
|
19
|
+
end
|
20
|
+
|
21
|
+
def found(total_found, file_names)
|
22
|
+
@found = total_found
|
23
|
+
@header= "We found #{total_found} file(s) to download with the following names: \n"
|
24
|
+
@found_list = file_names
|
25
|
+
end
|
26
|
+
|
27
|
+
def started
|
28
|
+
@started= Time.now
|
29
|
+
end
|
30
|
+
|
31
|
+
def finished
|
32
|
+
@finished= Time.now
|
33
|
+
end
|
34
|
+
|
35
|
+
def downloaded(total)
|
36
|
+
@downloaded = total
|
37
|
+
@footer= "Downloaded #{total} file(s)"
|
38
|
+
end
|
39
|
+
|
40
|
+
def starting_path(path)
|
41
|
+
@progress << "Starting to download #{path}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def finished_path(path)
|
45
|
+
@progress << "Finished downloading #{path}"
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def progress
|
51
|
+
@progress.join("\n")
|
52
|
+
end
|
53
|
+
|
54
|
+
def found_list
|
55
|
+
full_list = ''
|
56
|
+
@found_list.each_with_index do |file_name, index|
|
57
|
+
full_list += "##{(index+1).to_s}. #{file_name} "
|
58
|
+
end
|
59
|
+
full_list
|
60
|
+
end
|
61
|
+
|
62
|
+
def started_string
|
63
|
+
"Started downloading at #{@started}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def finished_string
|
67
|
+
"Finished downloading at #{@finished}"
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module EasyDownloader
|
2
|
+
module SftpDownloader
|
3
|
+
def sftp_download(options)
|
4
|
+
result = options.result
|
5
|
+
result.started
|
6
|
+
|
7
|
+
Net::SFTP.start(options.host,
|
8
|
+
options.user,
|
9
|
+
sftp_password_option(options.password)) do |sftp|
|
10
|
+
|
11
|
+
files = sftp.dir.glob(options.remote_path, options.remote_pattern)
|
12
|
+
total = files.size
|
13
|
+
result.found(files.size, files.map(&:name))
|
14
|
+
|
15
|
+
files.map(&:name).each do |path|
|
16
|
+
result.starting_path(path)
|
17
|
+
options.download_count += 1 if sftp.download!("#{options.remote_path}#{path}", "#{options.local_path}#{path}")
|
18
|
+
result.finished_path(path)
|
19
|
+
result.files_downloaded << "#{options.local_path}#{path}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
result.downloaded(options.download_count)
|
24
|
+
result.finished
|
25
|
+
end
|
26
|
+
|
27
|
+
def sftp_password_option(password)
|
28
|
+
password ?
|
29
|
+
{:password => password} :
|
30
|
+
Hash.new
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'easy_downloader/options'
|
4
|
+
|
5
|
+
describe EasyDownloader::Options do
|
6
|
+
context 'Accessors' do
|
7
|
+
[:files, :successful, :result, :download_count,
|
8
|
+
:host, :user, :password, :local_path,
|
9
|
+
:destination_dir, :remote_path, :remote_pattern].each do |accessor|
|
10
|
+
specify {subject.should respond_to(accessor)}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "exposes options" do
|
15
|
+
[:host, :user, :password, :remote_path, :remote_pattern, :local_path].each_with_index do |exposable_option, index|
|
16
|
+
it "exposes #{exposable_option}" do
|
17
|
+
option = EasyDownloader::Options.new(exposable_option => "hi there #{index}")
|
18
|
+
option.send(exposable_option).should == "hi there #{index}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
it "exposes type as a symbol" do
|
22
|
+
option = EasyDownloader::Options.new(:type => "hithere")
|
23
|
+
option.type.should == :hithere
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_downloader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 296151478
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
9
|
+
- 2
|
10
10
|
- alpha
|
11
|
-
version: 0.0.
|
11
|
+
version: 0.0.2.alpha
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Bernardo Telles
|
@@ -21,6 +21,50 @@ default_executable:
|
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 1
|
29
|
+
segments:
|
30
|
+
- 3
|
31
|
+
- 0
|
32
|
+
- 3
|
33
|
+
version: 3.0.3
|
34
|
+
requirement: *id001
|
35
|
+
prerelease: false
|
36
|
+
type: :runtime
|
37
|
+
name: activesupport
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
version: "0"
|
48
|
+
requirement: *id002
|
49
|
+
prerelease: false
|
50
|
+
type: :runtime
|
51
|
+
name: net-sftp
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
requirement: *id003
|
63
|
+
prerelease: false
|
64
|
+
type: :development
|
65
|
+
name: ruby-debug
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
24
68
|
none: false
|
25
69
|
requirements:
|
26
70
|
- - ~>
|
@@ -31,12 +75,12 @@ dependencies:
|
|
31
75
|
- 1
|
32
76
|
- 0
|
33
77
|
version: 2.1.0
|
34
|
-
requirement: *
|
78
|
+
requirement: *id004
|
35
79
|
prerelease: false
|
36
80
|
type: :development
|
37
81
|
name: rspec
|
38
82
|
- !ruby/object:Gem::Dependency
|
39
|
-
version_requirements: &
|
83
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
40
84
|
none: false
|
41
85
|
requirements:
|
42
86
|
- - ~>
|
@@ -47,12 +91,12 @@ dependencies:
|
|
47
91
|
- 0
|
48
92
|
- 0
|
49
93
|
version: 1.0.0
|
50
|
-
requirement: *
|
94
|
+
requirement: *id005
|
51
95
|
prerelease: false
|
52
96
|
type: :development
|
53
97
|
name: bundler
|
54
98
|
- !ruby/object:Gem::Dependency
|
55
|
-
version_requirements: &
|
99
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
56
100
|
none: false
|
57
101
|
requirements:
|
58
102
|
- - ~>
|
@@ -63,12 +107,12 @@ dependencies:
|
|
63
107
|
- 5
|
64
108
|
- 1
|
65
109
|
version: 1.5.1
|
66
|
-
requirement: *
|
110
|
+
requirement: *id006
|
67
111
|
prerelease: false
|
68
112
|
type: :development
|
69
113
|
name: jeweler
|
70
114
|
- !ruby/object:Gem::Dependency
|
71
|
-
version_requirements: &
|
115
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
72
116
|
none: false
|
73
117
|
requirements:
|
74
118
|
- - ">="
|
@@ -77,10 +121,24 @@ dependencies:
|
|
77
121
|
segments:
|
78
122
|
- 0
|
79
123
|
version: "0"
|
80
|
-
requirement: *
|
124
|
+
requirement: *id007
|
81
125
|
prerelease: false
|
82
126
|
type: :development
|
83
127
|
name: rcov
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
hash: 3
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
version: "0"
|
138
|
+
requirement: *id008
|
139
|
+
prerelease: false
|
140
|
+
type: :development
|
141
|
+
name: yard
|
84
142
|
description: " EasyDownloader reduces the amount of work required to setup and check for errors when downloading from another location. This \n is useful when, for example, a client wants to you to pick a file up from their FTP, SFTP, or regular website on a nightly basis.\n EasyDownloader gives you a one-method means of downloading those files, returns with a friendly error message if it fails\n (geared at cron job notifications), or returns an array of file names it downloaded."
|
85
143
|
email: btelles@gmail.com
|
86
144
|
executables: []
|
@@ -101,7 +159,12 @@ files:
|
|
101
159
|
- VERSION
|
102
160
|
- easy_downloader.gemspec
|
103
161
|
- lib/easy_downloader.rb
|
104
|
-
-
|
162
|
+
- lib/easy_downloader/ftp_downloader.rb
|
163
|
+
- lib/easy_downloader/http_downloader.rb
|
164
|
+
- lib/easy_downloader/options.rb
|
165
|
+
- lib/easy_downloader/result.rb
|
166
|
+
- lib/easy_downloader/sftp_downloader.rb
|
167
|
+
- spec/easy_downloader/options_spec.rb
|
105
168
|
- spec/spec_helper.rb
|
106
169
|
has_rdoc: true
|
107
170
|
homepage: http://github.com/btelles/easy_downloader
|
@@ -138,7 +201,7 @@ rubyforge_project:
|
|
138
201
|
rubygems_version: 1.3.7
|
139
202
|
signing_key:
|
140
203
|
specification_version: 3
|
141
|
-
summary:
|
204
|
+
summary: A dead simple, one-method downloader, with friendly error messages
|
142
205
|
test_files:
|
143
|
-
- spec/
|
206
|
+
- spec/easy_downloader/options_spec.rb
|
144
207
|
- spec/spec_helper.rb
|