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 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