nab 0.0.6 → 1.0.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 +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
|