embulk-parser-query_string 0.1.2 → 0.1.3
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 +4 -4
- data/.travis.yml +9 -0
- data/CHANGELOG.md +4 -0
- data/embulk-parser-query_string.gemspec +1 -1
- data/gemfiles/embulk-0.6.10 +4 -0
- data/gemfiles/embulk-0.6.11 +4 -0
- data/gemfiles/embulk-0.6.12 +4 -0
- data/gemfiles/embulk-0.6.13 +4 -0
- data/gemfiles/embulk-0.6.14 +4 -0
- data/gemfiles/embulk-0.6.15 +4 -0
- data/gemfiles/embulk-0.6.16 +4 -0
- data/gemfiles/embulk-latest +2 -0
- data/lib/embulk/parser/query_string.rb +4 -2
- data/test/capture_io.rb +45 -0
- data/test/embulk/guess/test_query_string.rb +4 -4
- data/test/embulk/parser/test_query_string_plugin.rb +19 -1
- data/test/embulk_run_helper.rb +19 -0
- data/test/test_embulk_run.rb +109 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 577bbbbfd20a0b5ac1a95053773531166aa6abf4
|
4
|
+
data.tar.gz: d371c84d90510138671ff77fcd991d73596f5213
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df8f61b4304e53d7e6fa13cbbaa10506db82e911c99b1ed65f4c02047144c3c84b4c7eddf1b88bf17e6b4d878613f35ad6c2ac3fef2f8650901476f2a893f8e5
|
7
|
+
data.tar.gz: 23f03b8da79ef4e96911f2477dbe686198ca97c47a09609e5038d1b0d17b7808f46060c2fe39200f8052082807969be4c469c4b2cbb20274c602b3efba36d3d5
|
data/.travis.yml
CHANGED
@@ -10,3 +10,12 @@ notifications:
|
|
10
10
|
secure: "QRZ6zQxcRdN2XylIz+b46TbYIv7x5Ko7Y0Mi0aGbf7Wg1xfnS4X2FZKp8gF+RH1qjT6CYsQFUpPBhPVCMx0fP0ik5/gBrdngrj0htludvQ5CTK2oVegM1VC5NSn+gi8bt2F20Ode9fxU5OS1HDzNR9sjPz3W7miMUNDZoYPy77Om/CvmVkBbGyMkWnfwhEvwnL8JpBNpklDvrUUKznNsAcSbKQBMBAglFMds/OaHXCkK142zMbSlHMctch1VDAKhX9/6M3v8v6ZRheX68+VVCz3nTrTF0/lnYh3ig9ey3DNlgkZUqK2gmypnhTE6tpeibHdyVa8qOMNzyAgltu1qIhFHN390WMk9gZXEcvWG3m++PMAIKKtd4varbH1vdCeHOGUV7GRgarcfSMvJ54I9xc5GkUnAhjRKj8xDzYzhkXwApD8eqWb2RgGXUm6G4cKj0MeQ4WBqHr9FOW/4EJcZoztFi0YlP7KE+6xptBJU479KSsv31BwHrMfblObOOj58C7gUfdbTCByxng0u1axxvixL8zJwgHvFND3/4yoXoCCgm0DXBPbi6B5xpt8QmN6K4E5sMGrppTI7VwJqkcwkVD0EEeCedRNiWLTaxlKpLYxYnoXwEnpm9o2WXWa+PjkWeawsnJvV5IAt6oJhaK22VqJN86Macuu+nCdeF1/0TZU="
|
11
11
|
jdk:
|
12
12
|
- oraclejdk8
|
13
|
+
gemfile:
|
14
|
+
- gemfiles/embulk-0.6.10
|
15
|
+
- gemfiles/embulk-0.6.11
|
16
|
+
- gemfiles/embulk-0.6.12
|
17
|
+
- gemfiles/embulk-0.6.13
|
18
|
+
- gemfiles/embulk-0.6.14
|
19
|
+
- gemfiles/embulk-0.6.15
|
20
|
+
- gemfiles/embulk-0.6.16
|
21
|
+
- gemfiles/embulk-latest
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.1.3 - 2015-07-16
|
2
|
+
* [enhancement] Fix bug nil value casting unexpectedly [#16](https://github.com/treasure-data/embulk-parser-query_string/pull/16)
|
3
|
+
* [maintenance] Improve test [#15](https://github.com/treasure-data/embulk-parser-query_string/pull/15)
|
4
|
+
|
1
5
|
## 0.1.2 - 2015-07-14
|
2
6
|
* [fixed] Fix to ignore empty line same as invalid line [#14](https://github.com/treasure-data/embulk-parser-query_string/pull/14)
|
3
7
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
spec.name = "embulk-parser-query_string"
|
4
|
-
spec.version = "0.1.
|
4
|
+
spec.version = "0.1.3"
|
5
5
|
spec.authors = ["yoshihara", "uu59"]
|
6
6
|
spec.summary = "Query String parser plugin for Embulk"
|
7
7
|
spec.description = "Parses Query String files read by other file input plugins."
|
@@ -82,11 +82,13 @@ module Embulk
|
|
82
82
|
name = column.name
|
83
83
|
value = record[name]
|
84
84
|
|
85
|
+
next nil unless value
|
86
|
+
|
85
87
|
case column.type
|
86
88
|
when :long
|
87
|
-
Integer(value)
|
89
|
+
value.strip.empty? ? nil : Integer(value)
|
88
90
|
when :timestamp
|
89
|
-
Time.parse(value)
|
91
|
+
value.strip.empty? ? nil : Time.parse(value)
|
90
92
|
else
|
91
93
|
value.to_s
|
92
94
|
end
|
data/test/capture_io.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
module CaptureIo
|
2
|
+
def capture(output = :out, &block)
|
3
|
+
_, out = swap_io(output, &block)
|
4
|
+
out
|
5
|
+
end
|
6
|
+
|
7
|
+
def silence(&block)
|
8
|
+
block_result = nil
|
9
|
+
swap_io(:out) do
|
10
|
+
block_result,_ = swap_io(:err, &block)
|
11
|
+
end
|
12
|
+
block_result
|
13
|
+
end
|
14
|
+
|
15
|
+
def swap_io(output = :out, &block)
|
16
|
+
java_import 'java.io.PrintStream'
|
17
|
+
java_import 'java.io.ByteArrayOutputStream'
|
18
|
+
java_import 'java.lang.System'
|
19
|
+
|
20
|
+
ruby_original_stream = output == :out ? $stdout.dup : $stderr.dup
|
21
|
+
java_original_stream = System.send(output) # :out or :err
|
22
|
+
ruby_buf = StringIO.new
|
23
|
+
java_buf = ByteArrayOutputStream.new
|
24
|
+
|
25
|
+
case output
|
26
|
+
when :out
|
27
|
+
$stdout = ruby_buf
|
28
|
+
System.setOut(PrintStream.new(java_buf))
|
29
|
+
when :err
|
30
|
+
$stderr = ruby_buf
|
31
|
+
System.setErr(PrintStream.new(java_buf))
|
32
|
+
end
|
33
|
+
|
34
|
+
[block.call, ruby_buf.string + java_buf.toString]
|
35
|
+
ensure
|
36
|
+
case output
|
37
|
+
when :out
|
38
|
+
$stdout = ruby_original_stream
|
39
|
+
System.setOut(java_original_stream)
|
40
|
+
when :err
|
41
|
+
$stderr = ruby_original_stream
|
42
|
+
System.setErr(java_original_stream)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -101,10 +101,10 @@ module Embulk
|
|
101
101
|
|
102
102
|
def task
|
103
103
|
{
|
104
|
-
parser
|
105
|
-
strip_quote
|
106
|
-
strip_whitespace
|
107
|
-
schema
|
104
|
+
"parser" => {
|
105
|
+
"strip_quote" => true,
|
106
|
+
"strip_whitespace" => true,
|
107
|
+
"schema" => columns,
|
108
108
|
}
|
109
109
|
}
|
110
110
|
end
|
@@ -74,16 +74,34 @@ module Embulk
|
|
74
74
|
end
|
75
75
|
|
76
76
|
class TestProcessLine < self
|
77
|
-
def
|
77
|
+
def test_all_keys_exist_in_schema
|
78
78
|
mock(page_builder).add(["FOO", 1, Time.parse("2015-07-08T16:25:46")])
|
79
79
|
plugin.send(:process_line, line)
|
80
80
|
end
|
81
81
|
|
82
|
+
def test_key_nonexist_in_schema
|
83
|
+
nonexist_column = Column.new(nil, "different", :long)
|
84
|
+
nonexist_schema = schema << nonexist_column
|
85
|
+
|
86
|
+
plugin = QueryString.new(DataSource[task], nonexist_schema, page_builder)
|
87
|
+
mock(page_builder).add(["FOO", 1, Time.parse("2015-07-08T16:25:46"), nil])
|
88
|
+
plugin.send(:process_line, line)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_long_value_for_key_nonexist
|
92
|
+
mock(page_builder).add(["FOO", nil, Time.parse("2015-07-08T16:25:46")])
|
93
|
+
plugin.send(:process_line, value_nonexist_line)
|
94
|
+
end
|
95
|
+
|
82
96
|
private
|
83
97
|
|
84
98
|
def line
|
85
99
|
"foo=FOO&bar=1&baz=2015-07-08T16:25:46"
|
86
100
|
end
|
101
|
+
|
102
|
+
def value_nonexist_line
|
103
|
+
"foo=FOO&bar=&baz=2015-07-08T16:25:46"
|
104
|
+
end
|
87
105
|
end
|
88
106
|
|
89
107
|
def test_transaction
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "capture_io"
|
2
|
+
|
3
|
+
module EmbulkRunHelper
|
4
|
+
include CaptureIo
|
5
|
+
|
6
|
+
def embulk_guess(seed_path, dest_path)
|
7
|
+
silence do
|
8
|
+
embulk_exec(%W(guess -g query_string #{seed_path} -o #{dest_path}))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def embulk_run(yaml_path)
|
13
|
+
embulk_exec(%W(run #{yaml_path}))
|
14
|
+
end
|
15
|
+
|
16
|
+
def embulk_exec(cli_options = [])
|
17
|
+
Embulk.run(cli_options)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "tmpdir"
|
3
|
+
require "prepare_embulk"
|
4
|
+
require "embulk_run_helper"
|
5
|
+
|
6
|
+
module Embulk
|
7
|
+
class EmbulkRunTest < Test::Unit::TestCase
|
8
|
+
include EmbulkRunHelper
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@dir = Dir.mktmpdir
|
12
|
+
@target_file = "#{@dir}/target_file.txt"
|
13
|
+
File.open(@target_file, "w") do |f|
|
14
|
+
f.write <<-FILE
|
15
|
+
"foo=FOO&bar=1"
|
16
|
+
"foo=FOO&bar=2"
|
17
|
+
"foo=FOO&bar=3"
|
18
|
+
"foo=FOO&bar=4"
|
19
|
+
"foo=FOO&bar=5"
|
20
|
+
"foo=FOO&bar=6"
|
21
|
+
"foo=FOO&bar=7"
|
22
|
+
"foo=FOO&bar=8"
|
23
|
+
"foo=FOO&bar=9"
|
24
|
+
"foo=FOO&bar=10"
|
25
|
+
"foo=FOO&bar=11"
|
26
|
+
"foo=FOO&bar=12"
|
27
|
+
"foo=FOO&bar=13"
|
28
|
+
FILE
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def teardown
|
33
|
+
FileUtils.rm_rf @dir
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_embulk_run
|
37
|
+
config_path = "#{@dir}/config.yml"
|
38
|
+
File.open(config_path, "w") do |f|
|
39
|
+
f.write guessed_content
|
40
|
+
end
|
41
|
+
out = capture do
|
42
|
+
embulk_run(config_path)
|
43
|
+
end
|
44
|
+
|
45
|
+
assert_true(out.include?(<<-CONTENT))
|
46
|
+
FOO,1
|
47
|
+
FOO,2
|
48
|
+
FOO,3
|
49
|
+
FOO,4
|
50
|
+
FOO,5
|
51
|
+
FOO,6
|
52
|
+
FOO,7
|
53
|
+
FOO,8
|
54
|
+
FOO,9
|
55
|
+
FOO,10
|
56
|
+
FOO,11
|
57
|
+
FOO,12
|
58
|
+
FOO,13
|
59
|
+
CONTENT
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_embulk_guess
|
63
|
+
seed_path = "#{@dir}/seed.yml"
|
64
|
+
File.open(seed_path, "w") do |f|
|
65
|
+
f.write seed_content
|
66
|
+
end
|
67
|
+
dest_path = "#{@dir}/guessed.yml"
|
68
|
+
embulk_guess(seed_path, dest_path)
|
69
|
+
guessed = IO.read(dest_path)
|
70
|
+
|
71
|
+
assert_equal(guessed_content, guessed)
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def seed_content
|
77
|
+
<<YAML
|
78
|
+
in:
|
79
|
+
type: file
|
80
|
+
path_prefix: #{@dir}/target_file
|
81
|
+
parser:
|
82
|
+
strip_quote: true
|
83
|
+
strip_whitespace: true
|
84
|
+
exec: {}
|
85
|
+
out: {type: stdout}
|
86
|
+
YAML
|
87
|
+
end
|
88
|
+
|
89
|
+
def guessed_content
|
90
|
+
<<YAML
|
91
|
+
in:
|
92
|
+
type: file
|
93
|
+
path_prefix: #{@dir}/target_file
|
94
|
+
parser:
|
95
|
+
strip_quote: true
|
96
|
+
strip_whitespace: true
|
97
|
+
charset: UTF-8
|
98
|
+
newline: CRLF
|
99
|
+
type: query_string
|
100
|
+
schema:
|
101
|
+
- {name: foo, type: string}
|
102
|
+
- {name: bar, type: long}
|
103
|
+
exec: {}
|
104
|
+
out: {type: stdout}
|
105
|
+
YAML
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-parser-query_string
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yoshihara
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-07-
|
12
|
+
date: 2015-07-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,13 +132,24 @@ files:
|
|
132
132
|
- README.md
|
133
133
|
- Rakefile
|
134
134
|
- embulk-parser-query_string.gemspec
|
135
|
+
- gemfiles/embulk-0.6.10
|
136
|
+
- gemfiles/embulk-0.6.11
|
137
|
+
- gemfiles/embulk-0.6.12
|
138
|
+
- gemfiles/embulk-0.6.13
|
139
|
+
- gemfiles/embulk-0.6.14
|
140
|
+
- gemfiles/embulk-0.6.15
|
141
|
+
- gemfiles/embulk-0.6.16
|
142
|
+
- gemfiles/embulk-latest
|
135
143
|
- lib/embulk/guess/query_string.rb
|
136
144
|
- lib/embulk/parser/query_string.rb
|
137
145
|
- partial-config.yml
|
146
|
+
- test/capture_io.rb
|
138
147
|
- test/embulk/guess/test_query_string.rb
|
139
148
|
- test/embulk/parser/test_query_string_plugin.rb
|
149
|
+
- test/embulk_run_helper.rb
|
140
150
|
- test/prepare_embulk.rb
|
141
151
|
- test/run-test.rb
|
152
|
+
- test/test_embulk_run.rb
|
142
153
|
homepage: https://github.com/treasure-data/embulk-parser-query_string
|
143
154
|
licenses:
|
144
155
|
- Apache2
|
@@ -164,7 +175,10 @@ signing_key:
|
|
164
175
|
specification_version: 4
|
165
176
|
summary: Query String parser plugin for Embulk
|
166
177
|
test_files:
|
178
|
+
- test/capture_io.rb
|
167
179
|
- test/embulk/guess/test_query_string.rb
|
168
180
|
- test/embulk/parser/test_query_string_plugin.rb
|
181
|
+
- test/embulk_run_helper.rb
|
169
182
|
- test/prepare_embulk.rb
|
170
183
|
- test/run-test.rb
|
184
|
+
- test/test_embulk_run.rb
|