s3_cat 0.1.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 +7 -0
- data/bin/s3-cat +19 -0
- data/lib/s3_cat.rb +17 -0
- data/lib/s3_cat/file_lister.rb +29 -0
- data/lib/s3_cat/file_reader.rb +21 -0
- data/lib/s3_cat/s3_url_parser.rb +13 -0
- data/lib/s3_cat/version.rb +5 -0
- data/s3_cat.gemspec +35 -0
- metadata +128 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: aa1e3d093e5a0b49a4c1eb70ff86dac6d4760ef942314716b678cf1fc0c78521
|
4
|
+
data.tar.gz: 91b4c3a44eae7a20e99bd05c22e31a97e6759d2581185306e90547d508ce2f35
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a2047c4290c0baf67ce77c73e2631aa1895e1e1d55954234751006f41496806db88aef999e8290f247497ee8a9059cdd6668124704f45f43c089decb9e37c129
|
7
|
+
data.tar.gz: 38c7f0f7baca36c2852fe07a0fc79010f048df9e36408bf5b59de9349b8f9f7f52e1c984782d5fa453591d095a4af22e1efd9c3ebe7390616d755d7edf284da1
|
data/bin/s3-cat
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 's3_cat'
|
5
|
+
|
6
|
+
unless ARGV.size == 1
|
7
|
+
puts 'usage: s3-cat <s3_url>'
|
8
|
+
exit(1)
|
9
|
+
end
|
10
|
+
|
11
|
+
url, = ARGV
|
12
|
+
|
13
|
+
parser = S3Cat::S3UrlParser.new
|
14
|
+
lister = S3Cat::FileLister.new
|
15
|
+
reader = S3Cat::FileReader.new
|
16
|
+
|
17
|
+
bucket, prefix = parser.parse_url(url)
|
18
|
+
files = lister.list_files(bucket, prefix)
|
19
|
+
reader.read_files(bucket, files, STDOUT)
|
data/lib/s3_cat.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'aws-sdk-s3'
|
4
|
+
|
5
|
+
require 's3_cat/version'
|
6
|
+
|
7
|
+
require 's3_cat/s3_url_parser'
|
8
|
+
require 's3_cat/file_lister'
|
9
|
+
require 's3_cat/file_reader'
|
10
|
+
|
11
|
+
module S3Cat
|
12
|
+
class Error < StandardError; end
|
13
|
+
|
14
|
+
def self.s3_client
|
15
|
+
@s3_client ||= Aws::S3::Client.new
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module S3Cat
|
4
|
+
class FileLister
|
5
|
+
def initialize(s3_client: S3Cat.s3_client)
|
6
|
+
@s3_client = s3_client
|
7
|
+
end
|
8
|
+
|
9
|
+
def list_files(bucket, prefix)
|
10
|
+
Enumerator.new do |y|
|
11
|
+
continuation_token = nil
|
12
|
+
|
13
|
+
loop do
|
14
|
+
response = s3_client.list_objects_v2(bucket: bucket, prefix: prefix, continuation_token: continuation_token)
|
15
|
+
|
16
|
+
response.contents.map(&:key).each { |key| y << key }
|
17
|
+
|
18
|
+
break unless response.is_truncated
|
19
|
+
|
20
|
+
continuation_token = response.continuation_token
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :s3_client
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module S3Cat
|
4
|
+
class FileReader
|
5
|
+
def initialize(s3_client: S3Cat.s3_client)
|
6
|
+
@s3_client = s3_client
|
7
|
+
end
|
8
|
+
|
9
|
+
def read_files(bucket, files, output_stream)
|
10
|
+
files.each do |file|
|
11
|
+
s3_client.get_object(bucket: bucket, key: file) do |chunk|
|
12
|
+
output_stream.write(chunk)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :s3_client
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module S3Cat
|
4
|
+
class S3UrlParser
|
5
|
+
S3_URL_PATTERN = %r{^s3://(?<bucket>\S+?)/(?<key>\S+)?$}.freeze
|
6
|
+
|
7
|
+
def parse_url(s3_url)
|
8
|
+
matched_data = S3_URL_PATTERN.match(s3_url)
|
9
|
+
|
10
|
+
[matched_data['bucket'], matched_data['key']]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/s3_cat.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 's3_cat/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 's3_cat'
|
9
|
+
spec.version = S3Cat::VERSION
|
10
|
+
spec.author = 'Marek Mateja'
|
11
|
+
|
12
|
+
spec.summary = 'Concatenate and print S3 files recursively'
|
13
|
+
spec.description = 'Command line utility for searching multiple S3 files'
|
14
|
+
spec.homepage = 'https://github.com/mmateja/s3-cat'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
18
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
19
|
+
|
20
|
+
# Specify which files should be added to the gem when it is released.
|
21
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
22
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
23
|
+
`git ls-files -z s3_cat.gemspec bin/s3-cat lib/`.split("\x0")
|
24
|
+
end
|
25
|
+
spec.bindir = 'bin'
|
26
|
+
spec.executables = %w[s3-cat]
|
27
|
+
spec.require_paths = ['lib']
|
28
|
+
|
29
|
+
spec.add_dependency 'aws-sdk-s3', '~> 1'
|
30
|
+
|
31
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
32
|
+
spec.add_development_dependency 'rake', '~> 12.0', '>= 12.3.3'
|
33
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
34
|
+
spec.add_development_dependency 'rubocop', '~> 0.84.0'
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: s3_cat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marek Mateja
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-05-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk-s3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '12.0'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 12.3.3
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '12.0'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 12.3.3
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rubocop
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.84.0
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.84.0
|
89
|
+
description: Command line utility for searching multiple S3 files
|
90
|
+
email:
|
91
|
+
executables:
|
92
|
+
- s3-cat
|
93
|
+
extensions: []
|
94
|
+
extra_rdoc_files: []
|
95
|
+
files:
|
96
|
+
- bin/s3-cat
|
97
|
+
- lib/s3_cat.rb
|
98
|
+
- lib/s3_cat/file_lister.rb
|
99
|
+
- lib/s3_cat/file_reader.rb
|
100
|
+
- lib/s3_cat/s3_url_parser.rb
|
101
|
+
- lib/s3_cat/version.rb
|
102
|
+
- s3_cat.gemspec
|
103
|
+
homepage: https://github.com/mmateja/s3-cat
|
104
|
+
licenses:
|
105
|
+
- MIT
|
106
|
+
metadata:
|
107
|
+
homepage_uri: https://github.com/mmateja/s3-cat
|
108
|
+
source_code_uri: https://github.com/mmateja/s3-cat
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options: []
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
requirements: []
|
124
|
+
rubygems_version: 3.1.2
|
125
|
+
signing_key:
|
126
|
+
specification_version: 4
|
127
|
+
summary: Concatenate and print S3 files recursively
|
128
|
+
test_files: []
|