chupa-text 1.0.8 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/chupa-text.gemspec +2 -0
- data/data/mime-types.conf +2 -0
- data/doc/text/news.md +16 -0
- data/lib/chupa-text/command/chupa-text.rb +22 -2
- data/lib/chupa-text/decomposers/tar.rb +6 -1
- data/lib/chupa-text/decomposers/zip.rb +58 -0
- data/lib/chupa-text/error.rb +10 -0
- data/lib/chupa-text/external-command.rb +8 -7
- data/lib/chupa-text/input-data.rb +7 -3
- data/lib/chupa-text/text-data.rb +2 -0
- data/lib/chupa-text/version.rb +1 -1
- data/test/command/test-chupa-text.rb +92 -4
- data/test/decomposers/test-tar.rb +13 -17
- data/test/decomposers/test-zip.rb +100 -0
- data/test/fixture/zip/hello.zip +0 -0
- data/test/fixture/zip/password.zip +0 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 683591985ea7d93bfde2dc2643964120d18c6a04
|
4
|
+
data.tar.gz: e0b1419f2d3a020d4036afbeb56c4b1366b8e4d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9b33ecfc733c19827d0ce2a8484f7cd4a128a1435616dae03bf42707b11e8c99bd3402b885fa2af073424a87e786220008f8bf5c02912aaad5874a1f9a5add4
|
7
|
+
data.tar.gz: 85f8df4be72276db69c8938120c9ccd99bbf424493cf69f8b2357cb5e81053da9fcc35c386c3d1816ad53ea39d3de478ee9606e49783e2ed9b74631296cc413a
|
data/chupa-text.gemspec
CHANGED
@@ -50,6 +50,8 @@ Gem::Specification.new do |spec|
|
|
50
50
|
spec.executables = Dir.glob("*")
|
51
51
|
end
|
52
52
|
|
53
|
+
spec.add_runtime_dependency("archive-zip")
|
54
|
+
|
53
55
|
spec.add_development_dependency("bundler")
|
54
56
|
spec.add_development_dependency("rake")
|
55
57
|
spec.add_development_dependency("test-unit")
|
data/data/mime-types.conf
CHANGED
data/doc/text/news.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 1.0.9: 2017-07-11
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* `ChupaText::TextData`: Changed extension to ".txt".
|
8
|
+
|
9
|
+
* `chupa-text`: Added `--uri` option.
|
10
|
+
|
11
|
+
* `chupa-text`: Added `--mime-type` option.
|
12
|
+
|
13
|
+
* `ChupaText::DownloadError`: Added.
|
14
|
+
|
15
|
+
* Supported zip.
|
16
|
+
|
17
|
+
* `ChupaText::ExternalCommand#path`: Added.
|
18
|
+
|
3
19
|
## 1.0.8: 2017-07-10
|
4
20
|
|
5
21
|
### Improvements
|
@@ -43,6 +43,8 @@ module ChupaText
|
|
43
43
|
@input = nil
|
44
44
|
@configuration = Configuration.load_default
|
45
45
|
@enable_gems = true
|
46
|
+
@uri = nil
|
47
|
+
@mime_type = nil
|
46
48
|
@format = :json
|
47
49
|
@need_screenshot = true
|
48
50
|
@expected_screenshot_size = [200, 200]
|
@@ -106,6 +108,17 @@ module ChupaText
|
|
106
108
|
$LOAD_PATH << path
|
107
109
|
end
|
108
110
|
|
111
|
+
parser.separator("")
|
112
|
+
parser.separator("Input related options")
|
113
|
+
parser.on("--uri=URI",
|
114
|
+
"Input data URI.") do |uri|
|
115
|
+
@uri = URI.parse(uri)
|
116
|
+
end
|
117
|
+
parser.on("--mime-type=MIME_TYPE",
|
118
|
+
"Input data MIME type.") do |mime_type|
|
119
|
+
@mime_type = mime_type
|
120
|
+
end
|
121
|
+
|
109
122
|
parser.separator("")
|
110
123
|
parser.separator("Output related options")
|
111
124
|
parser.on("--format=FORMAT", AVAILABLE_FORMATS,
|
@@ -178,7 +191,7 @@ module ChupaText
|
|
178
191
|
|
179
192
|
def create_data
|
180
193
|
if @input.nil?
|
181
|
-
data = VirtualFileData.new(
|
194
|
+
data = VirtualFileData.new(@uri, $stdin)
|
182
195
|
else
|
183
196
|
case @input
|
184
197
|
when /\A[a-z]+:\/\//i
|
@@ -186,8 +199,15 @@ module ChupaText
|
|
186
199
|
else
|
187
200
|
input = Pathname(@input)
|
188
201
|
end
|
189
|
-
|
202
|
+
if @uri
|
203
|
+
input.open("rb") do |io|
|
204
|
+
data = VirtualFileData.new(@uri, io)
|
205
|
+
end
|
206
|
+
else
|
207
|
+
data = InputData.new(input)
|
208
|
+
end
|
190
209
|
end
|
210
|
+
data.mime_type = @mime_type if @mime_type
|
191
211
|
data.need_screenshot = @need_screenshot
|
192
212
|
data.expected_screenshot_size = @expected_screenshot_size
|
193
213
|
data
|
@@ -31,8 +31,13 @@ module ChupaText
|
|
31
31
|
Gem::Package::TarReader.new(StringIO.new(data.body)) do |reader|
|
32
32
|
reader.each do |entry|
|
33
33
|
next unless entry.file?
|
34
|
+
|
34
35
|
entry.extend(CopyStreamable)
|
35
|
-
|
36
|
+
entry_uri = data.uri.dup
|
37
|
+
base_path = entry_uri.path.gsub(/\.tar\z/i, "")
|
38
|
+
entry_uri.path = "#{base_path}/#{entry.full_name}"
|
39
|
+
extracted = VirtualFileData.new(entry_uri,
|
40
|
+
entry,
|
36
41
|
:source_data => data)
|
37
42
|
yield(extracted)
|
38
43
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# Copyright (C) 2017 Kouhei Sutou <kou@clear-code.com>
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
require "stringio"
|
18
|
+
require "tmpdir"
|
19
|
+
|
20
|
+
require "archive/zip"
|
21
|
+
|
22
|
+
module ChupaText
|
23
|
+
module Decomposers
|
24
|
+
class Zip < Decomposer
|
25
|
+
registry.register("zip", self)
|
26
|
+
|
27
|
+
def target?(data)
|
28
|
+
return true if data.extension == "zip"
|
29
|
+
return true if data.mime_type == "application/zip"
|
30
|
+
|
31
|
+
false
|
32
|
+
end
|
33
|
+
|
34
|
+
def decompose(data)
|
35
|
+
Archive::Zip.open(StringIO.new(data.body)) do |zip|
|
36
|
+
zip.each do |entry|
|
37
|
+
next unless entry.file?
|
38
|
+
|
39
|
+
case entry.encryption_codec
|
40
|
+
when Archive::Zip::Codec::NullEncryption
|
41
|
+
else
|
42
|
+
# TODO
|
43
|
+
# entry.password = ...
|
44
|
+
raise EncryptedError.new(data)
|
45
|
+
end
|
46
|
+
entry_uri = data.uri.dup
|
47
|
+
base_path = entry_uri.path.gsub(/\.zip\z/i, "")
|
48
|
+
entry_uri.path = "#{base_path}/#{entry.zip_path}"
|
49
|
+
entry_data = VirtualFileData.new(entry_uri,
|
50
|
+
entry.file_data,
|
51
|
+
source_data: data)
|
52
|
+
yield(entry_data)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/chupa-text/error.rb
CHANGED
@@ -18,6 +18,16 @@ module ChupaText
|
|
18
18
|
class Error < StandardError
|
19
19
|
end
|
20
20
|
|
21
|
+
class DownloadError < Error
|
22
|
+
attr_reader :uri
|
23
|
+
attr_reader :reason
|
24
|
+
def initialize(uri, reason)
|
25
|
+
@uri = uri
|
26
|
+
@reason = reason
|
27
|
+
super("Download error: <#{uri}>: #{reason}")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
21
31
|
class EncryptedError < Error
|
22
32
|
attr_reader :data
|
23
33
|
def initialize(data)
|
@@ -20,8 +20,9 @@ require "pathname"
|
|
20
20
|
|
21
21
|
module ChupaText
|
22
22
|
class ExternalCommand
|
23
|
-
|
24
|
-
|
23
|
+
attr_reader :path
|
24
|
+
def initialize(path)
|
25
|
+
@path = Pathname.new(path)
|
25
26
|
end
|
26
27
|
|
27
28
|
def run(*arguments)
|
@@ -32,19 +33,19 @@ module ChupaText
|
|
32
33
|
end
|
33
34
|
spawn_options = options[:spawn_options] || {}
|
34
35
|
pid = spawn(options[:env] || {},
|
35
|
-
@
|
36
|
+
@path.to_s,
|
36
37
|
*arguments,
|
37
|
-
|
38
|
+
default_spawn_options.merge(spawn_options))
|
38
39
|
pid, status = Process.waitpid2(pid)
|
39
40
|
status.success?
|
40
41
|
end
|
41
42
|
|
42
43
|
def exist?
|
43
|
-
if @
|
44
|
-
@
|
44
|
+
if @path.absolute?
|
45
|
+
@path.file? and @path.executable?
|
45
46
|
else
|
46
47
|
(ENV['PATH'] || "").split(File::PATH_SEPARATOR).any? do |path|
|
47
|
-
(Pathname.new(path) + @
|
48
|
+
(Pathname.new(path) + @path).expand_path.exist?
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
@@ -47,9 +47,13 @@ module ChupaText
|
|
47
47
|
def download
|
48
48
|
path = @uri.path
|
49
49
|
path += "index.html" if path.end_with?("/")
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
begin
|
51
|
+
@uri.open("rb") do |input|
|
52
|
+
self.mime_type = input.content_type.split(/;/).first
|
53
|
+
VirtualContent.new(input, path)
|
54
|
+
end
|
55
|
+
rescue OpenURI::HTTPError => error
|
56
|
+
raise DownloadError.new(@uri, error.message.strip)
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
data/lib/chupa-text/text-data.rb
CHANGED
@@ -18,6 +18,8 @@ module ChupaText
|
|
18
18
|
class TextData < Data
|
19
19
|
def initialize(text, options={})
|
20
20
|
super(options)
|
21
|
+
self.uri = uri.to_s.gsub(/\.[^.]+\z/, ".txt")
|
22
|
+
self.path = path.to_s.gsub(/\.[^.]+\z/, ".txt")
|
21
23
|
self.mime_type = "text/plain"
|
22
24
|
self.body = text
|
23
25
|
self.size = text.bytesize
|
data/lib/chupa-text/version.rb
CHANGED
@@ -116,7 +116,7 @@ class TestCommandChupaText < Test::Unit::TestCase
|
|
116
116
|
@www_server_thread.kill
|
117
117
|
end
|
118
118
|
|
119
|
-
|
119
|
+
test("default") do
|
120
120
|
@html = "<html><body>Hello</body></html>"
|
121
121
|
assert_equal([
|
122
122
|
true,
|
@@ -136,10 +136,53 @@ class TestCommandChupaText < Test::Unit::TestCase
|
|
136
136
|
],
|
137
137
|
run_command(@uri))
|
138
138
|
end
|
139
|
+
|
140
|
+
test("--uri") do
|
141
|
+
virtual_uri = "http://127.0.0.1/hello.html"
|
142
|
+
@html = "<html><body>Hello</body></html>"
|
143
|
+
assert_equal([
|
144
|
+
true,
|
145
|
+
{
|
146
|
+
"mime-type" => "text/html",
|
147
|
+
"size" => @html.bytesize,
|
148
|
+
"uri" => virtual_uri,
|
149
|
+
"texts" => [
|
150
|
+
{
|
151
|
+
"mime-type" => "text/html",
|
152
|
+
"size" => @html.bytesize,
|
153
|
+
"uri" => virtual_uri,
|
154
|
+
"body" => @html,
|
155
|
+
},
|
156
|
+
],
|
157
|
+
},
|
158
|
+
],
|
159
|
+
run_command(@uri, "--uri", virtual_uri))
|
160
|
+
end
|
161
|
+
|
162
|
+
test("--mime-type") do
|
163
|
+
@html = "<html><body>Hello</body></html>"
|
164
|
+
assert_equal([
|
165
|
+
true,
|
166
|
+
{
|
167
|
+
"mime-type" => "text/plain",
|
168
|
+
"size" => @html.bytesize,
|
169
|
+
"uri" => @uri,
|
170
|
+
"texts" => [
|
171
|
+
{
|
172
|
+
"mime-type" => "text/plain",
|
173
|
+
"size" => @html.bytesize,
|
174
|
+
"uri" => @uri,
|
175
|
+
"body" => @html,
|
176
|
+
},
|
177
|
+
],
|
178
|
+
},
|
179
|
+
],
|
180
|
+
run_command(@uri, "--mime-type", "text/plain"))
|
181
|
+
end
|
139
182
|
end
|
140
183
|
|
141
184
|
sub_test_case("standard input") do
|
142
|
-
|
185
|
+
test("default") do
|
143
186
|
body = "Hello\n"
|
144
187
|
@stdin << "Hello\n"
|
145
188
|
@stdin.rewind
|
@@ -159,6 +202,51 @@ class TestCommandChupaText < Test::Unit::TestCase
|
|
159
202
|
],
|
160
203
|
run_command)
|
161
204
|
end
|
205
|
+
|
206
|
+
test("--uri") do
|
207
|
+
body = "Hello\n"
|
208
|
+
uri = "http://127.0.0.1/hello.txt"
|
209
|
+
@stdin << "Hello\n"
|
210
|
+
@stdin.rewind
|
211
|
+
assert_equal([
|
212
|
+
true,
|
213
|
+
{
|
214
|
+
"mime-type" => "text/plain",
|
215
|
+
"size" => body.bytesize,
|
216
|
+
"uri" => uri,
|
217
|
+
"texts" => [
|
218
|
+
{
|
219
|
+
"mime-type" => "text/plain",
|
220
|
+
"size" => body.bytesize,
|
221
|
+
"body" => body,
|
222
|
+
"uri" => uri,
|
223
|
+
},
|
224
|
+
],
|
225
|
+
},
|
226
|
+
],
|
227
|
+
run_command("--uri", "http://127.0.0.1/hello.txt"))
|
228
|
+
end
|
229
|
+
|
230
|
+
test("--mime-type") do
|
231
|
+
body = "Hello\n"
|
232
|
+
@stdin << "Hello\n"
|
233
|
+
@stdin.rewind
|
234
|
+
assert_equal([
|
235
|
+
true,
|
236
|
+
{
|
237
|
+
"mime-type" => "text/html",
|
238
|
+
"size" => body.bytesize,
|
239
|
+
"texts" => [
|
240
|
+
{
|
241
|
+
"mime-type" => "text/html",
|
242
|
+
"size" => body.bytesize,
|
243
|
+
"body" => body,
|
244
|
+
},
|
245
|
+
],
|
246
|
+
},
|
247
|
+
],
|
248
|
+
run_command("--mime-type", "text/html"))
|
249
|
+
end
|
162
250
|
end
|
163
251
|
end
|
164
252
|
|
@@ -197,8 +285,8 @@ class TestCommandChupaText < Test::Unit::TestCase
|
|
197
285
|
"size" => path.stat.size,
|
198
286
|
"texts" => [
|
199
287
|
{
|
200
|
-
"uri" => uri.to_s,
|
201
|
-
"path" => path.to_s,
|
288
|
+
"uri" => uri.to_s.gsub(/\.csv\z/, ".txt"),
|
289
|
+
"path" => path.sub_ext(".txt").to_s,
|
202
290
|
"mime-type" => "text/plain",
|
203
291
|
"source-mime-types" => ["text/csv"],
|
204
292
|
"body" => "1 2 3\n4 5 6\n7 8 9\n",
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2013-2017 Kouhei Sutou <kou@clear-code.com>
|
2
2
|
#
|
3
3
|
# This library is free software; you can redistribute it and/or
|
4
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -40,38 +40,34 @@ class TestDecomposersTar < Test::Unit::TestCase
|
|
40
40
|
end
|
41
41
|
|
42
42
|
sub_test_case("top-level") do
|
43
|
-
def setup
|
44
|
-
super
|
45
|
-
@data = ChupaText::InputData.new(fixture_path("top-level.tar"))
|
46
|
-
end
|
47
|
-
|
48
43
|
def test_decompose
|
44
|
+
data_path = Pathname.new(fixture_path("top-level.tar"))
|
45
|
+
base_path = data_path.sub_ext("")
|
46
|
+
data = ChupaText::InputData.new(data_path)
|
49
47
|
assert_equal([
|
50
48
|
{
|
51
|
-
:uri => "top-level.txt",
|
49
|
+
:uri => "file:#{base_path}/top-level.txt",
|
52
50
|
:body => "top level\n",
|
53
|
-
:source =>
|
51
|
+
:source => data.uri.to_s,
|
54
52
|
},
|
55
53
|
],
|
56
|
-
decompose(
|
54
|
+
decompose(data))
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
58
|
sub_test_case("directory") do
|
61
|
-
def setup
|
62
|
-
super
|
63
|
-
@data = ChupaText::InputData.new(fixture_path("directory.tar"))
|
64
|
-
end
|
65
|
-
|
66
59
|
def test_decompose
|
60
|
+
data_path = Pathname.new(fixture_path("directory.tar"))
|
61
|
+
base_path = data_path.sub_ext("")
|
62
|
+
data = ChupaText::InputData.new(data_path)
|
67
63
|
assert_equal([
|
68
64
|
{
|
69
|
-
:uri => "directory/hello.txt",
|
65
|
+
:uri => "file:#{base_path}/directory/hello.txt",
|
70
66
|
:body => "Hello in directory\n",
|
71
|
-
:source =>
|
67
|
+
:source => data.uri.to_s,
|
72
68
|
},
|
73
69
|
],
|
74
|
-
decompose(
|
70
|
+
decompose(data))
|
75
71
|
end
|
76
72
|
end
|
77
73
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# Copyright (C) 2017 Kouhei Sutou <kou@clear-code.com>
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
class TestDecomposersZip < Test::Unit::TestCase
|
18
|
+
include Helper
|
19
|
+
|
20
|
+
def setup
|
21
|
+
@decomposer = ChupaText::Decomposers::Zip.new({})
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def fixture_path(*components)
|
26
|
+
super("zip", *components)
|
27
|
+
end
|
28
|
+
|
29
|
+
sub_test_case("decompose") do
|
30
|
+
def decompose(data_path)
|
31
|
+
data = ChupaText::InputData.new(data_path)
|
32
|
+
decomposed = []
|
33
|
+
@decomposer.decompose(data) do |decomposed_data|
|
34
|
+
decomposed << {
|
35
|
+
:uri => decomposed_data.uri.to_s,
|
36
|
+
:body => decomposed_data.body,
|
37
|
+
:source => decomposed_data.source.uri.to_s,
|
38
|
+
}
|
39
|
+
end
|
40
|
+
decomposed
|
41
|
+
end
|
42
|
+
|
43
|
+
test("multiple") do
|
44
|
+
data_path = Pathname.new(fixture_path("hello.zip"))
|
45
|
+
base_path = data_path.sub_ext("")
|
46
|
+
assert_equal([
|
47
|
+
{
|
48
|
+
:uri => "file:#{base_path}/hello.txt",
|
49
|
+
:body => "Hello!\n",
|
50
|
+
:source => "file:#{data_path}",
|
51
|
+
},
|
52
|
+
{
|
53
|
+
:uri => "file:#{base_path}/hello.csv",
|
54
|
+
:body => "Hello,World\n",
|
55
|
+
:source => "file:#{data_path}",
|
56
|
+
},
|
57
|
+
{
|
58
|
+
:uri => "file:#{base_path}/hello/world.txt",
|
59
|
+
:body => "World!\n",
|
60
|
+
:source => "file:#{data_path}",
|
61
|
+
},
|
62
|
+
],
|
63
|
+
decompose(data_path))
|
64
|
+
end
|
65
|
+
|
66
|
+
sub_test_case("encrypted") do
|
67
|
+
test("without password") do
|
68
|
+
data_path = Pathname.new(fixture_path("password.zip"))
|
69
|
+
data = ChupaText::InputData.new(data_path)
|
70
|
+
assert_raise(ChupaText::EncryptedError.new(data)) do
|
71
|
+
@decomposer.decompose(data)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
test("with password") do
|
76
|
+
omit("password is 'password'")
|
77
|
+
data_path = Pathname.new(fixture_path("password.zip"))
|
78
|
+
base_path = data_path.sub_ext("")
|
79
|
+
assert_equal([
|
80
|
+
{
|
81
|
+
:uri => "file:#{base_path}/hello.txt",
|
82
|
+
:body => "Hello!\n",
|
83
|
+
:source => "file:#{data_path}",
|
84
|
+
},
|
85
|
+
{
|
86
|
+
:uri => "file:#{base_path}/hello.csv",
|
87
|
+
:body => "Hello,World\n",
|
88
|
+
:source => "file:#{data_path}",
|
89
|
+
},
|
90
|
+
{
|
91
|
+
:uri => "file:#{base_path}/hello/world.txt",
|
92
|
+
:body => "World!\n",
|
93
|
+
:source => "file:#{data_path}",
|
94
|
+
},
|
95
|
+
],
|
96
|
+
decompose(data_path))
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chupa-text
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: archive-zip
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,6 +132,7 @@ files:
|
|
118
132
|
- lib/chupa-text/decomposers/gzip.rb
|
119
133
|
- lib/chupa-text/decomposers/tar.rb
|
120
134
|
- lib/chupa-text/decomposers/xml.rb
|
135
|
+
- lib/chupa-text/decomposers/zip.rb
|
121
136
|
- lib/chupa-text/default-logger.rb
|
122
137
|
- lib/chupa-text/error.rb
|
123
138
|
- lib/chupa-text/external-command.rb
|
@@ -143,6 +158,7 @@ files:
|
|
143
158
|
- test/decomposers/test-gzip.rb
|
144
159
|
- test/decomposers/test-tar.rb
|
145
160
|
- test/decomposers/test-xml.rb
|
161
|
+
- test/decomposers/test-zip.rb
|
146
162
|
- test/fixture/command/chupa-text/hello.txt
|
147
163
|
- test/fixture/command/chupa-text/hello.txt.gz
|
148
164
|
- test/fixture/command/chupa-text/no-decomposer.conf
|
@@ -153,6 +169,8 @@ files:
|
|
153
169
|
- test/fixture/gzip/hello.txt.gz
|
154
170
|
- test/fixture/tar/directory.tar
|
155
171
|
- test/fixture/tar/top-level.tar
|
172
|
+
- test/fixture/zip/hello.zip
|
173
|
+
- test/fixture/zip/password.zip
|
156
174
|
- test/helper.rb
|
157
175
|
- test/run-test.rb
|
158
176
|
- test/test-attributes.rb
|