swa 0.4.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83e548dcd3489014b39e2abeaa629f2d992abb3a
4
- data.tar.gz: 8631da8f320f0c4f836679cbb8051271a39e423b
3
+ metadata.gz: 6c2bdd3ea0c87066638304663413a8ce0edeeeb8
4
+ data.tar.gz: 987819dd756f3c9aa3827adb450b8c78c7f9a705
5
5
  SHA512:
6
- metadata.gz: 05538c822b54162fa9e46ea392dc78d35d23b1f52f0113bc42191888dfef9bdedd6a3a78613ee5f6c86e9efb7a86281d7c983436829dedeb1b5906cc70859d35
7
- data.tar.gz: f6bf15581d16ec77d4133a3a22401e0218b6ce10e0fa384f5fb15e45f325370da59cd97026762706b370682855ae478d081feed465dc1b6541c69bb5fec06d45
6
+ metadata.gz: 56f553cdb20ae6bf1ae7600563694c49635eb52295ef45de523530cb99048177e30296848a52f7d21f5a51d802145342a3ba0f5ceb06c5546ae10b326882f2e9
7
+ data.tar.gz: 0a1bb1ad8016f0ef4574672d3f2b0b03fc20e5958ed4781fadb92a80d64cad559da2b7b41cb5ae5815062d5b945fb0e347ae71882b83545bbb0ada56572f4ded
@@ -10,11 +10,13 @@ module Swa
10
10
  target.default_subcommand = "summary"
11
11
 
12
12
  target.subcommand ["summary", "s"], "One-line summary" do
13
+
13
14
  def execute
14
15
  collection.each do |i|
15
16
  puts i.summary
16
17
  end
17
18
  end
19
+
18
20
  end
19
21
 
20
22
  target.subcommand ["data", "d"], "Full details" do
@@ -28,12 +28,23 @@ module Swa
28
28
  end
29
29
  end
30
30
 
31
- def parse(arguments)
32
- if arguments.first =~ /^(\w+)-/
31
+ def parse_parameters
32
+ case remaining_arguments.first
33
+ when /^(\w+)-/
33
34
  subcommand = subcommand_for_prefix($1)
34
- arguments = [subcommand] + arguments if subcommand
35
+ if subcommand
36
+ remaining_arguments[0,1] = [subcommand] + arguments
37
+ end
38
+ when %r{^s3://([^/]+)/(.+/)?$}
39
+ remaining_arguments[0, 1] = ["s3", "bucket", $1, "objects", "--prefix", $2]
40
+ when %r{^s3://([^/]+)/(.+)\*$}
41
+ remaining_arguments[0, 1] = ["s3", "bucket", $1, "objects", "--prefix", $2]
42
+ when %r{^s3://([^/]+)/(.+)$}
43
+ remaining_arguments[0, 1] = ["s3", "bucket", $1, "object", $2]
44
+ when %r{^s3://([^/]+)$}
45
+ remaining_arguments[0, 1] = ["s3", "bucket", $1]
35
46
  end
36
- super(arguments)
47
+ super
37
48
  end
38
49
 
39
50
  end
@@ -4,37 +4,160 @@ require "swa/cli/collection_behaviour"
4
4
  require "swa/cli/item_behaviour"
5
5
  require "swa/cli/tag_filter_options"
6
6
  require "swa/s3/bucket"
7
+ require "swa/s3/object"
7
8
 
8
9
  module Swa
9
10
  module CLI
10
11
 
11
12
  class S3Command < BaseCommand
12
13
 
13
- subcommand ["bucket"], "Show bucket" do
14
+ subcommand "bucket", "Show bucket" do
14
15
 
15
- parameter "NAME", "bucket name"
16
+ parameter "NAME", "bucket name", :attribute_name => :bucket_name
16
17
 
17
18
  include ItemBehaviour
18
19
 
19
- private
20
+ protected
21
+
22
+ def aws_bucket
23
+ s3.bucket(bucket_name)
24
+ end
25
+
26
+ def bucket
27
+ Swa::S3::Bucket.new(aws_bucket)
28
+ end
29
+
30
+ def bucket_name=(arg)
31
+ @bucket_name = arg.sub(%r{^s3://}, "")
32
+ end
33
+
34
+ alias_method :item, :bucket
35
+
36
+ subcommand "object", "Show object" do
37
+
38
+ parameter "KEY", "object key", :attribute_name => :object_key
39
+
40
+ include ItemBehaviour
41
+
42
+ subcommand "get", "GET object" do
43
+
44
+ def execute
45
+ IO.copy_stream(object.get_body, $stdout)
46
+ end
47
+
48
+ end
49
+
50
+ subcommand "put", "PUT object" do
51
+
52
+ parameter "[PAYLOAD]", "data", :default => "STDIN"
53
+
54
+ def execute
55
+ object.put(payload)
56
+ end
57
+
58
+ private
59
+
60
+ def default_payload
61
+ $stdin.read
62
+ end
63
+
64
+ end
65
+
66
+ subcommand "upload", "Upload file" do
67
+
68
+ parameter "FILE", "file name", :attribute_name => :file_name
69
+
70
+ def execute
71
+ object.upload(file_name)
72
+ end
73
+
74
+ end
75
+
76
+ subcommand "delete", "Delete object" do
77
+
78
+ def execute
79
+ logger.info "Deleting #{object.uri}"
80
+ object.delete
81
+ end
82
+
83
+ end
84
+
85
+ protected
86
+
87
+ def object
88
+ Swa::S3::Object.new(aws_bucket.object(object_key))
89
+ end
90
+
91
+ alias_method :item, :object
92
+
93
+ end
94
+
95
+ subcommand "objects", "List objects" do
96
+
97
+ option "--prefix", "PREFIX", "object prefix"
98
+
99
+ self.default_subcommand = "list"
100
+
101
+ subcommand ["list", "ls"], "One-line summary" do
102
+
103
+ def execute
104
+ objects.each do |i|
105
+ puts i.summary
106
+ end
107
+ end
108
+
109
+ end
110
+
111
+ subcommand ["data", "d"], "Full details" do
112
+
113
+ parameter "[QUERY]", "JMESPath expression"
114
+
115
+ def execute
116
+ display_data(objects.map(&:data).to_a, query)
117
+ end
118
+
119
+ end
120
+
121
+ subcommand "delete-all", "Delete objects" do
122
+
123
+ def execute
124
+ objects.each do |o|
125
+ logger.info "Deleting #{o.uri}"
126
+ o.delete
127
+ end
128
+ end
129
+
130
+ end
131
+
132
+ protected
133
+
134
+ def objects
135
+ bucket.objects(:prefix => prefix)
136
+ end
20
137
 
21
- def item
22
- Swa::S3::Bucket.new(s3.bucket(name))
23
138
  end
24
139
 
25
140
  subcommand "policy", "print bucket policy" do
26
141
 
27
142
  def execute
28
- puts item.policy
143
+ display_data(bucket.policy_data)
144
+ end
145
+
146
+ end
147
+
148
+ subcommand "delete", "Delete bucket" do
149
+
150
+ def execute
151
+ logger.info "Deleting #{bucket.uri}"
152
+ bucket.delete
29
153
  end
30
154
 
31
155
  end
32
156
 
33
157
  end
34
158
 
35
- subcommand ["buckets"], "List buckets" do
159
+ subcommand "buckets", "List buckets" do
36
160
 
37
- include TagFilterOptions
38
161
  include CollectionBehaviour
39
162
 
40
163
  private
@@ -53,7 +176,7 @@ module Swa
53
176
 
54
177
  def query_for(query_method, resource_model)
55
178
  aws_resources = s3.public_send(query_method)
56
- wrapped_resources = resource_model.list(aws_resources)
179
+ resource_model.list(aws_resources)
57
180
  end
58
181
 
59
182
  end
@@ -1,4 +1,4 @@
1
- require "base64"
1
+ require "multi_json"
2
2
  require "swa/resource"
3
3
 
4
4
  module Swa
@@ -10,10 +10,26 @@ module Swa
10
10
  bucket.name
11
11
  end
12
12
 
13
- def policy
13
+ def uri
14
+ "s3://#{bucket.name}"
15
+ end
16
+
17
+ def policy_json
14
18
  bucket.policy.policy.read
15
19
  end
16
20
 
21
+ def policy_data
22
+ MultiJson.load(policy_json)
23
+ end
24
+
25
+ def objects(options = {})
26
+ Swa::S3::Object.list(aws_resource.objects(options))
27
+ end
28
+
29
+ def delete
30
+ bucket.delete
31
+ end
32
+
17
33
  private
18
34
 
19
35
  alias_method :bucket, :aws_resource
@@ -0,0 +1,51 @@
1
+ require "swa/resource"
2
+
3
+ module Swa
4
+ module S3
5
+
6
+ class Object < Resource
7
+
8
+ def summary
9
+ [
10
+ object.last_modified.strftime("%Y-%m-%d %H:%M:%S"),
11
+ rpad(object.size, 10),
12
+ uri
13
+ ].join(" ")
14
+ end
15
+
16
+ def key
17
+ object.key
18
+ end
19
+
20
+ def uri
21
+ "s3://#{object.bucket.name}/#{object.key}"
22
+ end
23
+
24
+ def to_s
25
+ uri
26
+ end
27
+
28
+ def get_body
29
+ object.get.body
30
+ end
31
+
32
+ def put(io, options = {})
33
+ object.put(options.merge(:body => io))
34
+ end
35
+
36
+ def upload(file_name)
37
+ object.upload_file(file_name)
38
+ end
39
+
40
+ def delete
41
+ object.delete
42
+ end
43
+
44
+ private
45
+
46
+ alias_method :object, :aws_resource
47
+
48
+ end
49
+
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  module Swa
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.add_runtime_dependency "aws-sdk-resources"
28
28
  spec.add_runtime_dependency "chronic"
29
- spec.add_runtime_dependency "clamp"
29
+ spec.add_runtime_dependency "clamp", ">= 1.1.0"
30
30
  spec.add_runtime_dependency "console_logger"
31
31
  spec.add_runtime_dependency "multi_json"
32
32
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Williams
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-09 00:00:00.000000000 Z
11
+ date: 2016-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 1.1.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 1.1.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: console_logger
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +174,7 @@ files:
174
174
  - lib/swa/record.rb
175
175
  - lib/swa/resource.rb
176
176
  - lib/swa/s3/bucket.rb
177
+ - lib/swa/s3/object.rb
177
178
  - lib/swa/version.rb
178
179
  - swa.gemspec
179
180
  homepage: https://github.com/mdub/swa
@@ -196,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
197
  version: '0'
197
198
  requirements: []
198
199
  rubyforge_project:
199
- rubygems_version: 2.6.6
200
+ rubygems_version: 2.5.1
200
201
  signing_key:
201
202
  specification_version: 4
202
203
  summary: AWS, backwards