s3_wrapper 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/s3_wrapper.rb +135 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -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
|
data/lib/s3_wrapper.rb
ADDED
@@ -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: []
|