nab 0.0.1

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/bin/nab ADDED
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ require 'nab'
6
+
7
+ DEBUG = Logger::DEBUG
8
+ WARN = Logger::WARN
9
+ FATAL = Logger::FATAL
10
+ INFO = Logger::INFO
11
+
12
+ # Default option values
13
+ options = OpenStruct.new
14
+ options.log_level = INFO
15
+
16
+ OptionParser.new do |o|
17
+ o.on('-l', '--log-level [LEVEL]', String, 'specify the log level (default is INFO)') do |l|
18
+ options.log_level = Kernel.const_get l.upcase
19
+ end
20
+
21
+ o.on('-h') { Nab::Log.info o; exit }
22
+
23
+ begin
24
+ o.parse!
25
+ rescue OptionParser::InvalidOption, OptionParser::MissingArgument
26
+ Nab::Log.fatal $!.to_s
27
+ Nab::Log.fatal o
28
+ exit 255
29
+ end
30
+ end
31
+
32
+ Nab::Client.new.run(options)
data/changelog.md ADDED
@@ -0,0 +1,6 @@
1
+ Nab Changelog
2
+ ===
3
+
4
+ 0.0.1
5
+ ---
6
+ - Initial release
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+
3
+ module Nab
4
+ class AdapterManager
5
+
6
+ def initialize
7
+ @adapters = Hash.new
8
+ end
9
+
10
+ def get(type)
11
+ if @adapters.key? type
12
+ @adapters[type]
13
+ else
14
+ Log.debug "Loading adapter for #{type}"
15
+ klass = Nab.const_get "#{type}Adapter"
16
+ @adapters[type] = klass.new
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ module Nab
4
+ class S3Adapter
5
+ attr_accessor :base_path
6
+
7
+ def initialize(base_path = ".")
8
+ AWS.config
9
+ @base_path = "."
10
+ end
11
+
12
+ def get(uri)
13
+ bucket_name = uri.host
14
+ 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
18
+
19
+ Log.debug "Bucket: #{bucket_name}"
20
+ Log.debug "Asset name: #{asset_name}"
21
+ Log.debug "Local path: #{local_path}"
22
+
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
35
+ end
36
+ end
37
+ end
data/lib/nab/client.rb ADDED
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ module Nab
4
+ class Client
5
+ def run(options)
6
+
7
+ Log.level options.log_level
8
+
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
15
+ end
16
+ end
17
+ end
18
+
data/lib/nab/logger.rb ADDED
@@ -0,0 +1,52 @@
1
+ # encoding: UTF-8
2
+
3
+ module Nab
4
+
5
+ module Log
6
+
7
+ def self.write(level, message)
8
+ @@log ||= SimpleLogger.instance
9
+ @@log.send(level.to_sym) { message }
10
+ end
11
+
12
+ def self.info(message)
13
+ write('info', message)
14
+ end
15
+
16
+ def self.debug(message)
17
+ write('debug', message)
18
+ end
19
+
20
+ def self.fatal(message)
21
+ write('fatal', message)
22
+ end
23
+
24
+ def self.warn(message)
25
+ write('warn', message)
26
+ end
27
+
28
+ def self.level(level)
29
+ @@log ||= SimpleLogger.instance
30
+ @@log.level = level
31
+ end
32
+
33
+ class SimpleLogger < Logger
34
+ include Singleton
35
+
36
+ def initialize
37
+ @dev = Logger::LogDevice.new(STDOUT)
38
+ super @dev
39
+ @progname = 'Nab'
40
+ @formatter = proc do |sev, datetime, name, msg|
41
+ "[#{name}] [#{datetime}] [#{sev}]: #{msg}\n"
42
+ end
43
+ @datetime_format
44
+ end
45
+
46
+ def close
47
+ @dev.close
48
+ end
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: UTF-8
2
+
3
+ module Nab
4
+ VERSION = '0.0.1'
5
+ end
data/lib/nab.rb ADDED
@@ -0,0 +1,15 @@
1
+ ## encoding: UTF-8
2
+
3
+ require 'aws-sdk'
4
+ require 'optparse'
5
+ require 'singleton'
6
+ require 'ostruct'
7
+ require 'uri'
8
+ require 'fileutils'
9
+
10
+ require_relative 'nab/adapter_manager'
11
+ require_relative 'nab/client.rb'
12
+ require_relative 'nab/logger.rb'
13
+ require_relative 'nab/version.rb'
14
+ require_relative 'nab/adapters/s3.rb'
15
+ require_relative 'nab/adapters/http.rb'
data/nab.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ lib = File.expand_path('../lib/',__FILE__)
4
+ $:.unshift lib unless $:.include?(lib)
5
+ require 'nab/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'nab'
9
+ spec.version = Nab::VERSION
10
+ spec.licenses = ['Apache2']
11
+ spec.authors = ['Brian Bianco']
12
+ spec.email = ['brian.bianco@gmail.com']
13
+ spec.homepage = 'http://www.github.com/brianbianco/nab'
14
+ spec.summary = %q{}
15
+ spec.description = %q{}
16
+
17
+ spec.required_ruby_version = '>= 1.9.2'
18
+ spec.required_rubygems_version = '>= 1.3.6'
19
+
20
+ spec.files = `git ls-files`.split($/)
21
+ spec.test_files = spec.files.grep(%r{^spec/})
22
+
23
+ spec.executables = %w(nab)
24
+ spec.require_paths = ["lib"]
25
+
26
+ spec.add_dependency "aws-sdk", ">= 1.11.1"
27
+ end
data/readme.md ADDED
@@ -0,0 +1,19 @@
1
+ Nab
2
+ =======
3
+
4
+ A simple utility to pull down assets from assorted URIs.
5
+
6
+ Installation
7
+ ============
8
+
9
+ `gem install nab`
10
+
11
+ Usage
12
+ =====
13
+
14
+ nab s3://bucket/path/file1.txt s3://bucket/path/file2.txt
15
+
16
+ Available adapters
17
+ ==================
18
+
19
+ * s3
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nab
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brian Bianco
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-09-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: aws-sdk
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.11.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.11.1
30
+ description: ''
31
+ email:
32
+ - brian.bianco@gmail.com
33
+ executables:
34
+ - nab
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - bin/nab
39
+ - changelog.md
40
+ - lib/nab.rb
41
+ - lib/nab/adapter_manager.rb
42
+ - lib/nab/adapters/s3.rb
43
+ - lib/nab/client.rb
44
+ - lib/nab/logger.rb
45
+ - lib/nab/version.rb
46
+ - nab.gemspec
47
+ - readme.md
48
+ homepage: http://www.github.com/brianbianco/nab
49
+ licenses:
50
+ - Apache2
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: 1.9.2
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: 1.3.6
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 1.8.23
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: ''
73
+ test_files: []