s3_wrapper 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.
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: []