s3share 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Federico Builes
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,68 @@
1
+ S3Share
2
+ =======
3
+
4
+ S3Share is a simple script to upload your files to S3 and share them with your friends.
5
+
6
+ Requirements
7
+ ------------
8
+ * Ruby
9
+ * aws-s3 gem
10
+
11
+ Installation
12
+ ------------
13
+
14
+ You can install from Rubygems
15
+
16
+ $ gem install s3share
17
+
18
+ Or you can download the source and build it manually:
19
+
20
+ $ git clone https://febuiles@github.com/febuiles/s3share.git
21
+ $ rake install
22
+
23
+
24
+ Setting ENV variables
25
+ ----------------
26
+ You'll need to set the three following ENV variables:
27
+
28
+ * `AMAZON_ACCESS_KEY_ID`: AWS access key.
29
+ * `AMAZON_SECRET_ACCESS_KEY`: AWS secret access key.
30
+ * `AMAZON_S3_DEFAULT_BUCKET`: Name of the bucket where the uploads will be held.
31
+
32
+ The last variable is visible in the URL returned to the user: `http://s3.amazonaws.com/{AMAZON_S3_DEFAULT_BUCKET}/some_photo.png`, so make sure you choose something pretty. This value is global for all the S3 namespace, meaning you need to find something unique between all the S3 users ("some-user-name_uploads" should do the trick).
33
+
34
+ You can set these variables in a `~/.amazon_keys` file:
35
+
36
+ export AMAZON_ACCESS_KEY_ID='someaccesskey'
37
+ export AMAZON_SECRET_ACCESS_KEY='fortyweirdcharacters'
38
+ export AMAZON_S3_DEFAULT_BUCKET='joesuploads'
39
+
40
+ And then include it in your `~/.bash_profile`:
41
+
42
+ # place at the bottom of your .bash_profile
43
+ if [[ -f "$HOME/.amazon_keys" ]]; then
44
+ source "$HOME/.amazon_keys";
45
+ fi
46
+
47
+ Usage
48
+ ------
49
+
50
+ $ s3.rb [file]
51
+
52
+ An example:
53
+
54
+ $ s3.rb kezia.png
55
+
56
+ kezia.png uploaded to: http://s3.amazonaws.com/heroin-uploads/kezia.png
57
+
58
+ By default all the uploaded files will be publicly readable. Once the upload is complete the URL will be copied to your clipboard for easy access.
59
+
60
+ Bugs/Contact
61
+ ------------
62
+
63
+ Got a problem? Create an issue in the [Github Tracker](https://github.com/febuiles/s3share/issues).
64
+
65
+ Author
66
+ ------
67
+
68
+ Federico Builes - federico@mheroin.com - @febuiles
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ # Empty Rakefile...
data/bin/s3.rb ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby -rubygems
2
+
3
+ require "s3share"
4
+ S3Share::Runner.new(*ARGV)
@@ -0,0 +1,8 @@
1
+ # Stolen from the Hub gem: https://github.com/defunkt/hub/
2
+ module S3Share
3
+ class Args < Array
4
+ def initialize(*args)
5
+ super
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,102 @@
1
+ module S3Share
2
+ class Runner
3
+ def initialize(*args)
4
+ @args = Args.new(args)
5
+ @filename = args.first
6
+
7
+ # Print usage instructions if the filename is empty.
8
+ if @filename.nil?
9
+ puts "usage: s3.rb [filename]"
10
+ exit(-1)
11
+ end
12
+
13
+ @path = get_directory
14
+ @filename = clean_filename
15
+
16
+ # Upload the file and save the URL in the clipboard
17
+ exit_code = set_clipboard_url(upload_file)
18
+ exit(exit_code)
19
+ end
20
+
21
+ # The user can specify absolute paths, relative paths and individual
22
+ # filenames so we need to make sure we return the proper path to the
23
+ # directory.
24
+ def get_directory
25
+ if !@filename.include?("/") # single file name
26
+ "#{Dir.pwd}"
27
+ elsif @filename[0,1] == "/" # absolute path
28
+ "#{@filename.split("/")[0..-2].join("/")}"
29
+ else # relative path
30
+ "#{Dir.pwd}/#{@filename.split("/")[0..-2].join("/")}"
31
+ end
32
+ end
33
+
34
+ # Returns only the filename, discarding any directory info.
35
+ def clean_filename
36
+ @filename.split("/").last
37
+ end
38
+
39
+
40
+ # Uploads the file to Amazon S3 and returns the URL for the
41
+ # object. Uploaded files are publicly readable.
42
+ def upload_file
43
+ bucket_name = ENV["AMAZON_S3_DEFAULT_BUCKET"] || ""
44
+ access_key = ENV["AMAZON_ACCESS_KEY_ID"] || ""
45
+ secret_key = ENV["AMAZON_SECRET_ACCESS_KEY"] || ""
46
+
47
+ if bucket_name.empty?
48
+ print_error(:no_default_bucket)
49
+ exit(-2)
50
+ end
51
+
52
+ if access_key.empty? || secret_key.empty?
53
+ print_error(:wrong_aws_credentials)
54
+ exit(-3)
55
+ end
56
+
57
+ AWS::S3::Base.establish_connection!(
58
+ :access_key_id => access_key,
59
+ :secret_access_key => secret_key
60
+ )
61
+
62
+ AWS::S3::S3Object.store(@filename, open("#{@path}/#{@filename}"),
63
+ bucket_name,
64
+ :access => :public_read)
65
+
66
+ url = "http://s3.amazonaws.com/#{bucket_name}/#{@filename}"
67
+ puts "\n #{@filename} uploaded to: #{url}\n\n"
68
+ url
69
+ end
70
+
71
+ # Saves `url` in the clipboard for easy access. `#clipboard_cmd`
72
+ # should be extended for other platforms (right now only OS X is
73
+ # supported).
74
+ def set_clipboard_url(url)
75
+ system "echo #{url} | #{clipboard_cmd}"
76
+ end
77
+
78
+ # Returns the name of the command that allows you to pipe stuff
79
+ # into the clipboard. `pbcopy` for OS X, no idea what it is in
80
+ # other systems.
81
+ def clipboard_cmd
82
+ "pbcopy"
83
+ end
84
+
85
+ # Finds an error by name and prints the associated error string.
86
+ def print_error(err)
87
+ errors = {
88
+ :no_default_bucket =>
89
+ ["\nENV variable AMAZON_S3_DEFAULT_BUCKET has not been set.",
90
+ "Please run:",
91
+ " export AMAZON_S3_DEFAULT_BUCKET=\"bucket-name\"",
92
+ "\nRead the documentation for more information.\n\n"],
93
+ :wrong_aws_credentials =>
94
+ ["\nAWS credentials are invalid. Make sure that you have set the ENV:",
95
+ "\n export AMAZON_ACCESS_KEY_ID=\"your-access-key\"",
96
+ " export AMAZON_SECRET_ACCESS_KEY=\"your-secret-key\"",
97
+ "\nRead the documentation for more information.\n\n"]
98
+ }
99
+ errors[err].each { |msg| puts msg }
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,3 @@
1
+ module S3Share
2
+ Version = VERSION = '0.1'
3
+ end
data/lib/s3share.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "aws/s3"
2
+ require "s3share/args"
3
+ require "s3share/runner"
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: s3share
3
+ version: !ruby/object:Gem::Version
4
+ hash: 9
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ version: "0.1"
10
+ platform: ruby
11
+ authors:
12
+ - Federico Builes
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-11-14 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: |+
22
+ S3Share allows simple uploads to Amazon S3 from your command line. Set
23
+ your access ENV variables (see website) and upload the file:
24
+
25
+ $ s3.rb kezia.png
26
+
27
+ kezia.png uploaded to: http://s3.amazonaws.com/heroin-uploads/kezia.png
28
+
29
+ email: federico.builes@gmail.com
30
+ executables:
31
+ - s3.rb
32
+ extensions: []
33
+
34
+ extra_rdoc_files: []
35
+
36
+ files:
37
+ - README.markdown
38
+ - Rakefile
39
+ - LICENSE
40
+ - lib/s3share/args.rb
41
+ - lib/s3share/runner.rb
42
+ - lib/s3share/version.rb
43
+ - lib/s3share.rb
44
+ - bin/s3.rb
45
+ has_rdoc: false
46
+ homepage: http://github.com/febuiles/s3share
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ hash: 3
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ requirements: []
73
+
74
+ rubyforge_project:
75
+ rubygems_version: 1.3.7
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: Upload your files to S3 and share them with your friends.
79
+ test_files: []
80
+