swa 0.4.4 → 0.5.0

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.
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