s3_wrapper 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/s3_wrapper.rb +135 -0
  3. metadata +47 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 86352e8cb2ae14f9d68b81a4c326cb409f64e6e1
4
+ data.tar.gz: 338e28abc1a58d8baf273b458d193b2363fab9e8
5
+ SHA512:
6
+ metadata.gz: 718f66a4dd5814662d5b1c20df57e9fff54f75ff6bccd64ea48385875c720bf5f2488ba43c1c473f4a177bd9ba8e87f4c840a563b6048dae7573063a4ad1d1e6
7
+ data.tar.gz: 9314fd98d1caf9ebbea83c4e8b7a0d4c48c8e4e066acaf2c4aec8a4034e9c875e26515b7cf4e53b50c72b3dcfcdff0e6f9cb74c9cc152b7d4d78d3ffe87b4ebc
@@ -0,0 +1,135 @@
1
+ # encoding=utf-8
2
+ require 'aws-sdk'
3
+
4
+
5
+ class S3Wrapper
6
+
7
+ def initialize(bucket, options={})
8
+ @bucket = AWS::S3.new(options).buckets[bucket]
9
+ #TODO throw exception if bucket does not exist
10
+ @objects = @bucket.objects
11
+ end
12
+
13
+ def get(key)
14
+ @objects[key].read
15
+ end
16
+
17
+ def get_file(key, filename=key)
18
+ File.open(filename, 'w') do |fh|
19
+ @objects[key].read do |chunk|
20
+ fh.write(chunk)
21
+ end
22
+ end
23
+ end
24
+
25
+ def put(key, data)
26
+ @objects[key].write(data)
27
+ end
28
+
29
+ def put_file(filename, key=nil)
30
+ key ||= File.basename(filename)
31
+ @objects[key].write(:file => filename)
32
+ end
33
+
34
+ def ls(key)
35
+ get_object_description(@objects[key]) if @objects[key].exists?
36
+ end
37
+
38
+ def ls_prefix(key_prefix)
39
+ @objects.with_prefix(key_prefix).map {|obj| get_object_description(obj) }
40
+ end
41
+
42
+ def ls_substring(key_substring, key_prefix=nil)
43
+ descriptions = []
44
+ objects = key_prefix ? @objects.with_prefix(key_prefix) : @objects
45
+
46
+ objects.each do |obj|
47
+ descriptions << get_object_description(obj) if obj.key =~ /#{key_substring}/
48
+ end
49
+
50
+ descriptions
51
+ end
52
+
53
+ def ls_regexp(key_regexp)
54
+ descriptions = []
55
+
56
+ @objects.each do |obj|
57
+ descriptions << get_object_description(obj) if obj.key =~ key_regexp
58
+ end
59
+
60
+ descriptions
61
+ end
62
+
63
+ #TODO
64
+ def ls_if
65
+ end
66
+
67
+ def mv(src_key, dst_key, dst_bucket=@bucket.name)
68
+ @objects[src_key].move_to(dst_key, :bucket_name => dst_bucket)
69
+ end
70
+
71
+ #TODO
72
+ def mv_prefix(src_prefix, dst_bucket)
73
+ raise_if_dst_bucket_same_as_src(dst_bucket)
74
+ end
75
+
76
+ #TODO
77
+ def mv_substring()
78
+ end
79
+
80
+ #TODO
81
+ def mv_regexp()
82
+ end
83
+
84
+ #TODO
85
+ #def mv_if
86
+ #@objects.each do |obj|
87
+ #delete_if(&block)
88
+ #end
89
+
90
+ #TODO
91
+ def cp
92
+ end
93
+
94
+ def rm(key, options={})
95
+ @objects[key].delete
96
+ end
97
+
98
+ def rm_prefix(key_prefix)
99
+ @objects.with_prefix(key_prefix).each {|obj| obj.delete }
100
+ end
101
+
102
+ def rm_substring(key_substring, key_prefix=nil)
103
+ objects = key_prefix ? @objects.with_prefix(key_prefix) : @objects
104
+
105
+ objects.each do |obj|
106
+ obj.delete if obj.key =~ /#{key_substring}/
107
+ end
108
+ end
109
+
110
+ def rm_regexp(key_regexp)
111
+ @objects.each do |obj|
112
+ obj.delete if obj.key =~ key_regexp
113
+ end
114
+ end
115
+
116
+ def rm_if(&block)
117
+ @objects.delete_if(&block)
118
+ end
119
+
120
+ private
121
+
122
+ def self.object_description(obj)
123
+ "#{obj.key}\t#{obj.last_modified.utc}\t#{obj.content_length / 1024 / 1024} MB"
124
+ end
125
+
126
+ def get_object_description(obj)
127
+ "#{obj.key}\t#{obj.last_modified.utc}\t#{obj.content_length / 1024 / 1024} MB"
128
+ end
129
+
130
+ def raise_if_dst_bucket_same_as_src(dst_bucket)
131
+ if dst_bucket == @bucket.name
132
+ raise ArgumentError.new('dst and src bucket are the same')
133
+ end
134
+ end
135
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: s3_wrapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dean Morin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ The intent of this gem is to simplify interactions with S3, and allow for
15
+ more powerful searching and deleting conditions than provided by default in
16
+ the AWS Ruby SDK or command line tools.
17
+ email: morin.dean@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/s3_wrapper.rb
23
+ homepage: http://github.com/deanmorin/s3_wrapper
24
+ licenses:
25
+ - Unlicense
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.2.0
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: A tool for basic manipulation of files in S3
47
+ test_files: []