nab 0.0.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/nab +20 -3
- data/changelog.md +7 -0
- data/lib/nab.rb +3 -0
- data/lib/nab/adapter_manager.rb +10 -1
- data/lib/nab/adapters/s3.rb +13 -22
- data/lib/nab/client.rb +16 -7
- data/lib/nab/version.rb +1 -1
- data/lib/nab/writers/file_writer.rb +21 -0
- data/lib/nab/writers/stderr_writer.rb +18 -0
- data/lib/nab/writers/stdout_writer.rb +18 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 276ebcbc2b437f6832f7d40f63086cfb1beb1255
|
4
|
+
data.tar.gz: 2aa66966bec0c0f537e096a723187f282d963552
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3da7c427f07ea594ad5fef284f2368842de4246b91c1551e9d3bff72837c1b53d77f91fe319ed055d5838f04610954a70c7aa5574ef9e65d6ea09e2ee9bbd285
|
7
|
+
data.tar.gz: 293bf411ad3fa723c8c05888b470f86e2af82bdc3daf1a6641f9fb625d7ef61e701e668917f1147e412be989071f628b70677edf13a69afc6c56c62013e1bddc
|
data/bin/nab
CHANGED
@@ -10,14 +10,31 @@ FATAL = Logger::FATAL
|
|
10
10
|
INFO = Logger::INFO
|
11
11
|
|
12
12
|
# Default option values
|
13
|
-
options
|
14
|
-
options.log_level
|
13
|
+
options = OpenStruct.new
|
14
|
+
options.log_level = INFO
|
15
|
+
options.destination_dir = '.'
|
16
|
+
options.write_adapter = Nab::FileWriter
|
15
17
|
|
16
18
|
OptionParser.new do |o|
|
17
|
-
o.on('-l', '--log-level [LEVEL]', String,
|
19
|
+
o.on('-l', '--log-level [LEVEL]', String,
|
20
|
+
'specify the log level (default is INFO)') do |l|
|
18
21
|
options.log_level = Kernel.const_get l.upcase
|
19
22
|
end
|
20
23
|
|
24
|
+
o.on('-d', '--destination-dir [DIR]', String,
|
25
|
+
'specify the directory to download to (default is .)') do |d|
|
26
|
+
options.destination_dir = d
|
27
|
+
end
|
28
|
+
|
29
|
+
o.on('-w', '--write-adapter [STRING]', String,
|
30
|
+
'specify the write adapter nab should use (default is File)') do |w|
|
31
|
+
options.write_adapter = Nab.const_get("#{w.capitalize}Writer")
|
32
|
+
end
|
33
|
+
|
34
|
+
o.on('-s', '--strip-dirs', 'Strip all leading directories') do |s|
|
35
|
+
options.strip_dirs = s
|
36
|
+
end
|
37
|
+
|
21
38
|
o.on('-h') { Nab::Log.info o; exit }
|
22
39
|
|
23
40
|
begin
|
data/changelog.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
Nab Changelog
|
2
2
|
===
|
3
3
|
|
4
|
+
1.0.0
|
5
|
+
---
|
6
|
+
- Adds ability to change destination directory (where files go)
|
7
|
+
- Adds the ability to strip leading directories when saving files locally
|
8
|
+
- Major rewrite of how files are writter (file adapters)
|
9
|
+
- Adds storage adapters for STDERR and STDOUT
|
10
|
+
|
4
11
|
0.0.5
|
5
12
|
---
|
6
13
|
- Fixes bug because of missing require for the new aws-sdk-v1 gem.
|
data/lib/nab.rb
CHANGED
@@ -13,3 +13,6 @@ require_relative 'nab/client.rb'
|
|
13
13
|
require_relative 'nab/logger.rb'
|
14
14
|
require_relative 'nab/version.rb'
|
15
15
|
require_relative 'nab/adapters/s3.rb'
|
16
|
+
require_relative 'nab/writers/file_writer.rb'
|
17
|
+
require_relative 'nab/writers/stdout_writer.rb'
|
18
|
+
require_relative 'nab/writers/stderr_writer.rb'
|
data/lib/nab/adapter_manager.rb
CHANGED
@@ -2,18 +2,27 @@
|
|
2
2
|
|
3
3
|
module Nab
|
4
4
|
class AdapterManager
|
5
|
+
attr_accessor :write_adapter, :strip_dirs
|
5
6
|
|
6
7
|
def initialize
|
7
8
|
@adapters = Hash.new
|
9
|
+
@write_adapter = FileWriter
|
10
|
+
@strip_dirs = nil
|
8
11
|
end
|
9
12
|
|
10
13
|
def get(type)
|
11
14
|
if @adapters.key? type
|
15
|
+
Nab::Log.debug "Retrieving cached adapter #{@adapters[type]}"
|
12
16
|
@adapters[type]
|
13
17
|
else
|
14
|
-
Log.debug "Loading adapter for #{type}"
|
15
18
|
klass = Nab.const_get "#{type}Adapter"
|
19
|
+
Nab::Log.debug "Creating new #{type}Adapter"
|
16
20
|
@adapters[type] = klass.new
|
21
|
+
Nab::Log.debug "Setting write_adapter to #{write_adapter} for #{type}"
|
22
|
+
@adapters[type].write_adapter = write_adapter
|
23
|
+
Nab::Log.debug "Setting strip_dirs to #{strip_dirs} for #{type}"
|
24
|
+
@adapters[type].strip_dirs = strip_dirs
|
25
|
+
@adapters[type]
|
17
26
|
end
|
18
27
|
end
|
19
28
|
end
|
data/lib/nab/adapters/s3.rb
CHANGED
@@ -2,36 +2,27 @@
|
|
2
2
|
|
3
3
|
module Nab
|
4
4
|
class S3Adapter
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :write_adapter, :strip_dirs
|
6
6
|
|
7
|
-
def initialize
|
7
|
+
def initialize
|
8
8
|
AWS.config
|
9
|
-
@
|
9
|
+
@write_adapter = FileWriter
|
10
|
+
@strip_dirs = false
|
10
11
|
end
|
11
12
|
|
12
|
-
def get(uri)
|
13
|
+
def get(uri,destination)
|
13
14
|
bucket_name = uri.host
|
14
15
|
asset_name = uri.path.gsub(/^\//, "") # remove leading slashes
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
s3 = AWS::S3.new
|
17
|
+
bucket = s3.buckets[bucket_name]
|
18
|
+
asset = bucket.objects[asset_name]
|
18
19
|
|
19
|
-
Log.
|
20
|
-
|
21
|
-
|
20
|
+
Nab::Log.info "Retrieving #{File.join(bucket_name,asset_name)}"
|
21
|
+
asset_name = File.basename(asset_name) if strip_dirs
|
22
|
+
store = write_adapter.new(destination, asset_name)
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
s3 = AWS::S3.new
|
26
|
-
bucket = s3.buckets[bucket_name]
|
27
|
-
asset = bucket.objects[asset_name]
|
28
|
-
|
29
|
-
Log.info "Downloading #{File.join(bucket_name,asset_name)} to #{File.join(local_path,name)}"
|
30
|
-
File.open(File.join(local_path,name), 'wb') do |file|
|
31
|
-
asset.read do |chunk|
|
32
|
-
file.write chunk
|
33
|
-
end
|
34
|
-
end
|
24
|
+
asset.read { |chunk| store.write chunk }
|
25
|
+
store.close
|
35
26
|
end
|
36
27
|
end
|
37
28
|
end
|
data/lib/nab/client.rb
CHANGED
@@ -3,15 +3,24 @@
|
|
3
3
|
module Nab
|
4
4
|
class Client
|
5
5
|
def run(options)
|
6
|
+
Log.level options.log_level
|
6
7
|
|
7
|
-
|
8
|
+
Nab::Log.debug "Options received: #{options.inspect}"
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
if ARGV.size < 1
|
11
|
+
Nab::Log.fatal "No arguments specified"
|
12
|
+
exit 1
|
13
|
+
end
|
14
|
+
|
15
|
+
manager = AdapterManager.new
|
16
|
+
manager.write_adapter = options.write_adapter
|
17
|
+
manager.strip_dirs = options.strip_dirs
|
18
|
+
|
19
|
+
ARGV.each do |a|
|
20
|
+
uri = URI(a)
|
21
|
+
adapter = manager.get uri.scheme.capitalize
|
22
|
+
adapter.get uri,options.destination_dir
|
23
|
+
end
|
15
24
|
end
|
16
25
|
end
|
17
26
|
end
|
data/lib/nab/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Nab
|
4
|
+
class FileWriter
|
5
|
+
def initialize(destination, asset_name)
|
6
|
+
full_path = File.join(destination,asset_name)
|
7
|
+
FileUtils.mkdir_p File.dirname(full_path)
|
8
|
+
|
9
|
+
Nab::Log.info "Writing to #{full_path}"
|
10
|
+
@file = File.new(full_path,"wb")
|
11
|
+
end
|
12
|
+
|
13
|
+
def write data
|
14
|
+
@file.write data
|
15
|
+
end
|
16
|
+
|
17
|
+
def close
|
18
|
+
@file.close
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Nab
|
4
|
+
class StderrWriter
|
5
|
+
def initialize(destination, asset_name)
|
6
|
+
Nab::Log.info "Writing to STDERR"
|
7
|
+
end
|
8
|
+
|
9
|
+
def write data
|
10
|
+
STDERR.sync = true
|
11
|
+
STDERR.print data
|
12
|
+
STDERR.sync = false
|
13
|
+
end
|
14
|
+
|
15
|
+
def close
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Nab
|
4
|
+
class StdoutWriter
|
5
|
+
def initialize(destination, asset_name)
|
6
|
+
Nab::Log.info "Writing to STDOUT"
|
7
|
+
end
|
8
|
+
|
9
|
+
def write data
|
10
|
+
STDOUT.sync = true
|
11
|
+
print data
|
12
|
+
STDOUT.sync = false
|
13
|
+
end
|
14
|
+
|
15
|
+
def close
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Bianco
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-v1
|
@@ -56,6 +56,9 @@ files:
|
|
56
56
|
- lib/nab/client.rb
|
57
57
|
- lib/nab/logger.rb
|
58
58
|
- lib/nab/version.rb
|
59
|
+
- lib/nab/writers/file_writer.rb
|
60
|
+
- lib/nab/writers/stderr_writer.rb
|
61
|
+
- lib/nab/writers/stdout_writer.rb
|
59
62
|
- nab.gemspec
|
60
63
|
- readme.md
|
61
64
|
homepage: http://www.github.com/brianbianco/nab
|