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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e79f420590fcb47bb0b202a2b35b0ecc6f7cb27f
4
- data.tar.gz: e6151e9936b15d208b729b123928f6e4f0ec696c
3
+ metadata.gz: 276ebcbc2b437f6832f7d40f63086cfb1beb1255
4
+ data.tar.gz: 2aa66966bec0c0f537e096a723187f282d963552
5
5
  SHA512:
6
- metadata.gz: 5fcc55e128dea5ac025d3b9751c2514822c31c6a98732ce865513c061eaaff12ea739a4c5fc30d8450c2aed5ba3de4188530e597e6037b33e2f6997e2fca67cb
7
- data.tar.gz: 7f50dde65fe78159e939f0fe3b28a02594386e32b6b46b80a9517a452a50e80a80bb5fcd861e2b9b3a75c16f9ec1372b93acfa4fd31977ed08c11c64e3a6d510
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 = OpenStruct.new
14
- options.log_level = INFO
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, 'specify the log level (default is INFO)') do |l|
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'
@@ -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
@@ -2,36 +2,27 @@
2
2
 
3
3
  module Nab
4
4
  class S3Adapter
5
- attr_accessor :base_path
5
+ attr_accessor :write_adapter, :strip_dirs
6
6
 
7
- def initialize(base_path = ".")
7
+ def initialize
8
8
  AWS.config
9
- @base_path = "."
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
- name = File.basename asset_name
16
- remote_path = File.dirname asset_name
17
- local_path = File.join @base_path,remote_path
16
+ s3 = AWS::S3.new
17
+ bucket = s3.buckets[bucket_name]
18
+ asset = bucket.objects[asset_name]
18
19
 
19
- Log.debug "Bucket: #{bucket_name}"
20
- Log.debug "Asset name: #{asset_name}"
21
- Log.debug "Local path: #{local_path}"
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
- FileUtils.mkdir_p local_path
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
- Log.level options.log_level
8
+ Nab::Log.debug "Options received: #{options.inspect}"
8
9
 
9
- my_manager = AdapterManager.new
10
- ARGV.each do |a|
11
- uri = URI(a)
12
- adapter = my_manager.get(uri.scheme.capitalize)
13
- adapter.get(uri)
14
- end
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
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Nab
4
- VERSION = '0.0.6'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -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.6
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-09 00:00:00.000000000 Z
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