jaxx 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Jaxx
2
2
 
3
- TODO: Write a gem description
3
+ Upload and Download files from S3.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,58 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ### Upload
22
+ ```
23
+ jaxx-upload -h
24
+ jaxx [options]
25
+ -b, --bucket [BUCKET]
26
+ -k, --access-key [ACCESS_KEY]
27
+ -s [ACCESS_SECRET],
28
+ --access-secret
29
+ -f, --file [FILE]
30
+ -p, --privacy [PRIVACY]
31
+ -h, --help
32
+ ```
33
+
34
+ ### Download
35
+ ```
36
+ jaxx-download -h
37
+ jaxx [options]
38
+ -b, --bucket [BUCKET]
39
+ -k, --access-key [ACCESS_KEY]
40
+ -s [ACCESS_SECRET],
41
+ --access-secret
42
+ -f, --file [FILE]
43
+ -p, --privacy [PRIVACY]
44
+ -h, --help
45
+ ```
46
+
47
+ ## Examples
48
+
49
+ ### Upload from local machine
50
+ ```
51
+ jaxx-upload -b test-bucket -f vapour.txt -k MY_KEY -s MY_SECRET
52
+ ```
53
+
54
+ ### Download to local machine
55
+ ```
56
+ jaxx-download -b test-bucket -f vapour.txt -k MY_KEY -s MY_SECRET
57
+ ```
58
+
59
+ ### Upload to S3 from AWS Instance
60
+ ```
61
+ jaxx-upload -b test-bucket -f vapour.txt
62
+ ```
63
+
64
+ ### Download from S3 to current folder from AWS Instance
65
+ ```
66
+ jaxx-download -b test-bucket -f vapour.txt
67
+ ```
68
+
69
+ ### Upload from local machine, and make it publicly available
70
+ ```
71
+ jaxx-upload -b test-bucket -f vapour.txt -k MY_KEY -s MY_SECRET -p public
72
+ ```
22
73
 
23
74
  ## Contributing
24
75
 
@@ -20,7 +20,10 @@ module Jaxx
20
20
 
21
21
  def self.logger log = nil
22
22
  @logger = log if log
23
- @logger ||= Logger.new(STDOUT)
23
+ @logger ||= STDOUT
24
+
25
+ [:debug, :deprecation, :warning].each {|d| Fog::Logger[d] = @logger }
26
+
24
27
  @logger
25
28
  end
26
29
  end
@@ -6,7 +6,7 @@ module Jaxx
6
6
 
7
7
  def self.execute meth, args
8
8
  parser.parse!(args)
9
- options.empty? ? (STDOUT.write(parser) and exit) : Jaxx.send(meth, options)
9
+ options.empty? ? (Jaxx.logger.write(parser) and exit) : Jaxx.send(meth, options)
10
10
  rescue RuntimeError => exc
11
11
  exit 1
12
12
  end
@@ -20,7 +20,7 @@ module Jaxx
20
20
  o.on('-s', '--access-secret [ACCESS_SECRET]') { |s| options['access_secret'] = s }
21
21
  o.on('-f', '--file [FILE]') { |f| options['file'] = f }
22
22
  o.on('-p', '--privacy [PRIVACY]') { |p| options['privacy'] = p }
23
- o.on('-h', '--help') { puts o }
23
+ o.on('-h', '--help') { o }
24
24
  end
25
25
  end
26
26
 
@@ -16,7 +16,7 @@ module Jaxx
16
16
  directory.files.get(process.file) do |chunk, byt_remain, byt_total|
17
17
  file.write(chunk)
18
18
  complete = (((byt_total-byt_remain).to_f/byt_total) * 100)
19
- Jaxx.logger.info "Saving file: %.2f percent complete.\r" % complete
19
+ Jaxx.logger.write "Saving file: %.2f percent complete.\r" % complete
20
20
  end
21
21
  end
22
22
  end
@@ -2,46 +2,28 @@ require 'timeout'
2
2
  require 'socket'
3
3
  require 'net/http'
4
4
  require 'json'
5
+ require 'timeout'
6
+ require 'fog'
5
7
 
6
8
  module Jaxx
7
9
  class Environment
8
10
 
9
- DEFAULT_ARGS = {
10
- 'service_domain' => '169.254.169.254',
11
- 'service_path' => '/latest/meta-data/iam/security-credentials/default',
12
- 'service_timeout' => 1
13
- }
11
+ DEFAULT_ARGS = { 'service_timeout' => 1 }
12
+ DEFAULT_CREDENTIALS = { :aws_access_key_id => "", :aws_secret_access_key => "", :aws_session_token => nil, :use_iam_profile => true }
14
13
 
15
- attr_reader :service_domain, :service_path, :service_timeout
14
+ attr_reader :service_timeout
16
15
 
17
16
  def initialize args = {}
18
- @service_domain, @service_path, @service_timeout = DEFAULT_ARGS.dup.merge(args).values_at 'service_domain', 'service_path', 'service_timeout'
19
- end
20
-
21
- def ami?
22
- credentials[:code] == 'Success'
17
+ @service_timeout = DEFAULT_ARGS.dup.merge(args).delete('service_timeout')
23
18
  end
24
19
 
25
20
  def credentials
26
- return @credentials unless @credentials.nil?
27
-
28
- response = credential_response
29
-
30
- @credentials = {
31
- :access_key => response['AccessKeyId'],
32
- :access_secret => response['SecretAccessKey'],
33
- :code => response['Code']
34
- }
21
+ Timeout::timeout(service_timeout) do
22
+ DEFAULT_CREDENTIALS.merge Fog::Compute::AWS.fetch_credentials(:use_iam_profile => true)
23
+ end
35
24
  rescue Errno::EHOSTDOWN, Errno::EHOSTUNREACH, Timeout::Error => exc
36
- @credentials = { :access_key => nil, :access_secret => nil, :code => 'Failure' }
25
+ DEFAULT_CREDENTIALS
37
26
  end
38
27
 
39
- private
40
-
41
- def credential_response
42
- http = Net::HTTP.new service_domain
43
- http.open_timeout = http.read_timeout = service_timeout
44
- JSON.parse http.get(service_path).body
45
- end
46
28
  end
47
29
  end
@@ -28,17 +28,18 @@ module Jaxx
28
28
  return @credentials unless @credentials.nil?
29
29
 
30
30
  key, secret = access_key.to_s, access_secret.to_s
31
- if (key.empty? or secret.empty?) and Jaxx.environment.ami?
32
- key, secret = Jaxx.environment.credentials.values_at :access_key, :access_secret
33
- end
34
- @credentials = { access_key: key, access_secret: secret }
31
+ @credentials = if key.empty? or secret.empty?
32
+ Jaxx.environment.credentials
33
+ else
34
+ { :aws_access_key_id => key, :aws_secret_access_key => secret, :aws_session_token => "" }
35
+ end.merge(:use_iam_profile => true)
35
36
  end
36
37
 
37
38
  def start &block
38
39
  errs = errors
39
40
 
40
41
  ["Unable to process transaction", format_errors(errs)].flatten.each do |msg|
41
- Jaxx.logger.warn msg
42
+ Jaxx.logger.write msg
42
43
  end and raise(RuntimeError) unless errs.empty?
43
44
 
44
45
  block.call(storage)
@@ -57,9 +58,7 @@ module Jaxx
57
58
  private
58
59
 
59
60
  def storage
60
- @storage ||= Fog::Storage::AWS.new :aws_access_key_id => credentials[:access_key],
61
- :aws_secret_access_key => credentials[:access_secret],
62
- :use_iam_profile => Jaxx.environment.ami?
61
+ @storage ||= Fog::Storage::AWS.new credentials
63
62
  end
64
63
 
65
64
  def validate_bucket
@@ -75,7 +74,7 @@ module Jaxx
75
74
  end
76
75
 
77
76
  def validate_credentials
78
- "for access key and access secret required" if credentials[:access_key].empty? or credentials[:access_secret].empty?
77
+ "for access key and access secret required" if credentials[:aws_access_key_id].empty? or credentials[:aws_secret_access_key].empty?
79
78
  end
80
79
 
81
80
  def validate_privacy
@@ -1,3 +1,3 @@
1
1
  module Jaxx
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -3,9 +3,11 @@ require 'fakeweb'
3
3
  module ServiceHelper
4
4
 
5
5
  def stub_credentials_service
6
- FakeWeb.register_uri :get,
7
- /#{Jaxx.environment.service_domain}#{Jaxx.environment.service_path}/,
8
- :body => '{"AccessKeyId" : "foo", "SecretAccessKey" : "bar", "Code" : "Success"}'
6
+ Fog::Compute::AWS.stub(:fetch_credentials).and_return({
7
+ :aws_access_key_id => 'foo',
8
+ :aws_secret_access_key => 'bar',
9
+ :aws_session_token => 'foobar'
10
+ })
9
11
  end
10
12
 
11
13
  end
@@ -3,41 +3,22 @@ require 'spec_helper'
3
3
  module Jaxx
4
4
  describe Environment do
5
5
 
6
- it "#service_domain" do
7
- subject.service_domain.should_not be_nil
8
- end
9
-
10
- it "#service_path" do
11
- subject.service_path.should_not be_nil
12
- end
13
-
14
6
  it "#service_timeout" do
15
7
  subject.service_timeout.should_not be_nil
16
8
  end
17
9
 
18
10
  context "outside ami instance" do
19
11
 
20
- it "#ami?" do
21
- subject.ami?.should be_false
22
- end
23
-
24
12
  it "#credentials" do
25
13
  subject.credentials.should be_kind_of(Hash)
26
- subject.credentials[:code].should eq 'Failure'
14
+ subject.credentials[:aws_session_token].should be_nil
27
15
  end
28
16
  end
29
17
 
30
18
  context "within ami instance" do
31
19
 
32
- before :each do
33
- stub_credentials_service
34
- end
35
-
36
- it "#ami?" do
37
- subject.ami?.should be_true
38
- end
39
-
40
20
  it "#credentials" do
21
+ stub_credentials_service
41
22
  subject.credentials.should be_kind_of(Hash)
42
23
  end
43
24
  end
@@ -16,8 +16,6 @@ module Jaxx
16
16
  described_class.new.errors.should include(:bucket => 'is required')
17
17
  end
18
18
 
19
- it "raises error on local authentication, when not on AMI"
20
-
21
19
  it "accepts access key" do
22
20
  described_class.new('access_key' => 'abc').access_key.should == 'abc'
23
21
  end
@@ -5,11 +5,12 @@ $:.unshift File.expand_path('../lib', __FILE__)
5
5
  require 'jaxx'
6
6
  require 'rspec'
7
7
 
8
- require_relative 'helpers/service'
8
+ Jaxx.logger StringIO.new
9
+
9
10
 
10
- Jaxx.logger Logger.new('log/test.log')
11
+ require_relative 'helpers/service'
11
12
 
12
13
  RSpec.configure do |c|
13
- c.include ServiceHelper
14
+ c.include ServiceHelper
14
15
  c.after(:each) { FakeWeb.clean_registry }
15
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jaxx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-19 00:00:00.000000000 Z
12
+ date: 2013-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -206,7 +206,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
206
  version: '0'
207
207
  segments:
208
208
  - 0
209
- hash: -522064426156595131
209
+ hash: -1531357280253582986
210
210
  required_rubygems_version: !ruby/object:Gem::Requirement
211
211
  none: false
212
212
  requirements:
@@ -215,10 +215,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
215
  version: '0'
216
216
  segments:
217
217
  - 0
218
- hash: -522064426156595131
218
+ hash: -1531357280253582986
219
219
  requirements: []
220
220
  rubyforge_project:
221
- rubygems_version: 1.8.24
221
+ rubygems_version: 1.8.25
222
222
  signing_key:
223
223
  specification_version: 3
224
224
  summary: RubyGems to allow any file to be pushed to S3 in the simplist way