embulk 0.8.13 → 0.8.14

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: a33de4d667fc4550e065bcdf0017ffda402ab93c
4
- data.tar.gz: 86177d32e0887e0bade98b7778e6d59c9843bfb2
3
+ metadata.gz: 20a4f8e68f013bad287fa60a52982eacdad43667
4
+ data.tar.gz: 656680f1b59861633ae2f5575b46359de58c44b1
5
5
  SHA512:
6
- metadata.gz: 93cb5c92f584ff98e2e58f59504fa2fc32b6478d575e72918e6b37801fc2147c3bc455f332a9d406b76a0f9ff528009313138362321bf2d33fb009a6d9bfd6df
7
- data.tar.gz: 374201ee5dfad522c47079e7f95250f95ed64d8f8e2f6f16eacf2e18b588f24ec115e7555a431a9734ff55b8b64c7f360a1c204e5495aeda51e41c01875151d4
6
+ metadata.gz: 1f70f2fdcc4856b718fc4825bede8aa8b9e28022aed398df5e5a82b86754dfd9ef29e1b9ea3db92d2c9f0f1094cf0b9110550e9b2c4edfeaee67d0e18a2fe6a4
7
+ data.tar.gz: 678b00d7dc6cfa0703659c7fdf028aed9f7100246dbfbc186d5c4309f72f85a87e4ae4e0a45074996d2179e360a7169f57c3997bdc3348922518a14c64996f39
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- embulk (0.8.9)
5
- jruby-jars (= 9.1.2.0)
4
+ embulk (0.8.13)
5
+ jruby-jars (= 9.1.5.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- jruby-jars (9.1.2.0)
10
+ jruby-jars (9.1.5.0)
11
11
  kramdown (1.5.0)
12
12
  power_assert (0.2.2)
13
13
  rake (10.4.2)
@@ -27,4 +27,4 @@ DEPENDENCIES
27
27
  yard (~> 0.8.7)
28
28
 
29
29
  BUNDLED WITH
30
- 1.12.4
30
+ 1.13.2
@@ -16,10 +16,10 @@ def release_projects = [project(":embulk-core"), project(":embulk-standards")]
16
16
 
17
17
  allprojects {
18
18
  group = 'org.embulk'
19
- version = '0.8.13'
19
+ version = '0.8.14'
20
20
 
21
21
  ext {
22
- jrubyVersion = '9.1.2.0'
22
+ jrubyVersion = '9.1.5.0'
23
23
  }
24
24
 
25
25
  apply plugin: 'java'
@@ -38,7 +38,7 @@ dependencies {
38
38
  compile 'joda-time:joda-time:2.9.2'
39
39
  compile 'io.netty:netty-buffer:5.0.0.Alpha1'
40
40
  compile 'org.fusesource.jansi:jansi:1.11'
41
- compile 'org.msgpack:msgpack-core:0.8.8'
41
+ compile 'org.msgpack:msgpack-core:0.8.11'
42
42
 
43
43
  // For embulk/guess/charset.rb. See also embulk.gemspec
44
44
  compile 'com.ibm.icu:icu4j:54.1.1'
@@ -31,14 +31,19 @@ public class Schema
31
31
  return new Builder();
32
32
  }
33
33
 
34
- private final List<Column> columns;
34
+ private final ImmutableList<Column> columns;
35
35
 
36
36
  @JsonCreator
37
37
  public Schema(List<Column> columns)
38
38
  {
39
- this.columns = columns;
39
+ this.columns = ImmutableList.copyOf(columns);
40
40
  }
41
41
 
42
+ /**
43
+ * Returns the list of Column objects.
44
+ *
45
+ * It always returns an immutable list.
46
+ */
42
47
  @JsonValue
43
48
  public List<Column> getColumns()
44
49
  {
@@ -32,7 +32,10 @@ public class ResumableInputStream
32
32
  private void reopen(Exception closedCause) throws IOException
33
33
  {
34
34
  if (in != null) {
35
- in.close();
35
+ try {
36
+ in.close();
37
+ } catch (IOException ignored) {
38
+ }
36
39
  in = null;
37
40
  }
38
41
  in = reopener.reopen(offset, closedCause);
@@ -633,3 +633,40 @@ Example
633
633
  out:
634
634
  type: ...
635
635
  ...
636
+
637
+ Guess executor
638
+ ------------------
639
+
640
+ The guess executor is called by ``guess`` command. It executes default guess plugins in a sequential order and suggests Embulk config by appropriate guess plugin. The default guess plugins and the order are ``gzip``, ``'bzip2``, ``json`` and ``csv``.
641
+
642
+ Options
643
+ ~~~~~~~~~~~~~~~~~~
644
+
645
+ +-----------------------+----------+----------------------------------------------------------------------+--------------------------------------+
646
+ | name | type | description | required? |
647
+ +=======================+==========+======================================================================+======================================+
648
+ | guess_plugins | array | ``guess`` command uses specified guess plugins. | ``[]`` by default |
649
+ +-----------------------+----------+----------------------------------------------------------------------+--------------------------------------+
650
+ | exclude_guess_plugins | array | ``guess`` command doesn't use specified plugins. | ``[]`` by default |
651
+ +-----------------------+----------+----------------------------------------------------------------------+--------------------------------------+
652
+
653
+ The ``guess_plugins`` option includes specified guess plugin in the bottom of the list of default guess plugins.
654
+
655
+ The ``exclude_guess_plugins`` option exclude specified guess plugins from the list of default guess plugins that the guess executor uses.
656
+
657
+ This example shows how to use ``csv_all_strings`` guess plugin, which suggests column types within CSV files as string types. It needs to be explicitly specified by users when it's used instead of ``csv`` guess plugin because the plugin is not included in default guess plugins. We also can exclude default ``csv`` guess plugin.
658
+
659
+ Example
660
+ ~~~~~~~~~~~~~~~~~~
661
+
662
+ .. code-block:: yaml
663
+
664
+ exec:
665
+ guess_plugins: ['csv_all_strings']
666
+ exclude_guess_plugins: ['csv']
667
+ in:
668
+ type: ...
669
+ ...
670
+ out:
671
+ type: ...
672
+ ...
@@ -4,6 +4,7 @@ Release Notes
4
4
  .. toctree::
5
5
  :maxdepth: 1
6
6
 
7
+ release/release-0.8.14
7
8
  release/release-0.8.13
8
9
  release/release-0.8.12
9
10
  release/release-0.8.11
@@ -0,0 +1,31 @@
1
+ Release 0.8.14
2
+ ==================================
3
+
4
+ General Changes
5
+ ------------------
6
+
7
+ * Improved IOException handling within ResumableInputStream#reopen method. [#470]
8
+
9
+ * Added "rules" config option to rename filter plugin. It allows users to specify rule based policy to rename columns. [#483]
10
+
11
+ * Added "csv_all_strings" guess plugin, which suggests columns in csv files as string typed columns. [#489]
12
+
13
+ * Updated JRuby from 9.1.2.0 to 9.1.5.0. Release notes:
14
+
15
+ * http://jruby.org/2016/08/30/jruby-9-1-3-0.html
16
+
17
+ * http://jruby.org/2016/09/01/jruby-9-1-4-0.html
18
+
19
+ * http://jruby.org/2016/09/06/jruby-9-1-5-0.html
20
+
21
+ * Updated msgpack-java from 0.8.8 to 0.8.11. Release notes
22
+
23
+ * https://github.com/msgpack/msgpack-java/blob/0.8.9/RELEASE_NOTES.md
24
+
25
+ * https://github.com/msgpack/msgpack-java/blob/0.8.10/RELEASE_NOTES.md
26
+
27
+ * https://github.com/msgpack/msgpack-java/blob/0.8.11/RELEASE_NOTES.md
28
+
29
+ Release Date
30
+ ------------------
31
+ 2016-10-21
@@ -2,6 +2,7 @@ package org.embulk.standards;
2
2
 
3
3
  import org.embulk.config.Config;
4
4
  import org.embulk.config.ConfigDefault;
5
+ import org.embulk.config.ConfigException;
5
6
  import org.embulk.config.ConfigSource;
6
7
  import org.embulk.config.Task;
7
8
  import org.embulk.config.TaskSource;
@@ -10,8 +11,10 @@ import org.embulk.spi.FilterPlugin;
10
11
  import org.embulk.spi.PageOutput;
11
12
  import org.embulk.spi.Schema;
12
13
 
14
+ import java.util.List;
13
15
  import java.util.Map;
14
16
 
17
+
15
18
  public class RenameFilterPlugin
16
19
  implements FilterPlugin
17
20
  {
@@ -21,6 +24,10 @@ public class RenameFilterPlugin
21
24
  @Config("columns")
22
25
  @ConfigDefault("{}")
23
26
  Map<String, String> getRenameMap();
27
+
28
+ @Config("rules")
29
+ @ConfigDefault("[]")
30
+ List<ConfigSource> getRulesList();
24
31
  }
25
32
 
26
33
  @Override
@@ -29,12 +36,14 @@ public class RenameFilterPlugin
29
36
  {
30
37
  PluginTask task = config.loadConfig(PluginTask.class);
31
38
  Map<String, String> renameMap = task.getRenameMap();
39
+ List<ConfigSource> rulesList = task.getRulesList();
32
40
 
33
- // check column_options is valid or not
41
+ // Check if the given column in "columns" exists or not.
34
42
  for (String columnName : renameMap.keySet()) {
35
43
  inputSchema.lookupColumn(columnName); // throws SchemaConfigException
36
44
  }
37
45
 
46
+ // Rename by "columns": to be applied before "rules".
38
47
  Schema.Builder builder = Schema.builder();
39
48
  for (Column column : inputSchema.getColumns()) {
40
49
  String name = column.getName();
@@ -43,8 +52,16 @@ public class RenameFilterPlugin
43
52
  }
44
53
  builder.add(name, column.getType());
45
54
  }
55
+ Schema intermediateSchema = builder.build();
56
+
57
+ // Rename by "rules".
58
+ Schema outputSchema = intermediateSchema;
59
+ for (ConfigSource rule : rulesList) {
60
+ outputSchema = applyRule(rule, intermediateSchema);
61
+ intermediateSchema = outputSchema;
62
+ }
46
63
 
47
- control.run(task.dump(), builder.build());
64
+ control.run(task.dump(), outputSchema);
48
65
  }
49
66
 
50
67
  @Override
@@ -53,4 +70,24 @@ public class RenameFilterPlugin
53
70
  {
54
71
  return output;
55
72
  }
56
- }
73
+
74
+
75
+ // Extending Task is required to be deserialized with ConfigSource.loadConfig()
76
+ // although this Rule is not really a Task.
77
+ // TODO(dmikurube): Revisit this to consider how not to extend Task for this.
78
+ private interface Rule
79
+ extends Task
80
+ {
81
+ @Config("rule")
82
+ String getRule();
83
+ }
84
+
85
+ private Schema applyRule(ConfigSource ruleConfig, Schema inputSchema) throws ConfigException
86
+ {
87
+ Rule rule = ruleConfig.loadConfig(Rule.class);
88
+ switch (rule.getRule()) {
89
+ default:
90
+ throw new ConfigException("Renaming rule \"" +rule+ "\" is unknown");
91
+ }
92
+ }
93
+ }
@@ -1,7 +1,9 @@
1
1
  package org.embulk.standards;
2
2
 
3
+ import com.google.common.collect.ImmutableList;
3
4
  import com.google.common.collect.ImmutableMap;
4
5
  import org.embulk.EmbulkTestRuntime;
6
+ import org.embulk.config.ConfigException;
5
7
  import org.embulk.config.ConfigSource;
6
8
  import org.embulk.config.TaskSource;
7
9
  import org.embulk.spi.Column;
@@ -85,4 +87,54 @@ public class TestRenameFilterPlugin
85
87
  }
86
88
  });
87
89
  }
90
+
91
+ @Test
92
+ public void checkConfigExceptionIfUnknownStringTypeOfRenamingOperator()
93
+ {
94
+ // A simple string shouldn't come as a renaming rule.
95
+ ConfigSource pluginConfig = Exec.newConfigSource()
96
+ .set("rules", ImmutableList.of("string_rule"));
97
+
98
+ try {
99
+ filter.transaction(pluginConfig, SCHEMA, new FilterPlugin.Control() {
100
+ public void run(TaskSource task, Schema schema) { }
101
+ });
102
+ fail();
103
+ } catch (Throwable t) {
104
+ assertTrue(t instanceof ConfigException);
105
+ }
106
+ }
107
+
108
+ @Test
109
+ public void checkConfigExceptionIfUnknownListTypeOfRenamingOperator()
110
+ {
111
+ // A list [] shouldn't come as a renaming rule.
112
+ ConfigSource pluginConfig = Exec.newConfigSource()
113
+ .set("rules", ImmutableList.of(ImmutableList.of("listed_operator1", "listed_operator2")));
114
+
115
+ try {
116
+ filter.transaction(pluginConfig, SCHEMA, new FilterPlugin.Control() {
117
+ public void run(TaskSource task, Schema schema) { }
118
+ });
119
+ fail();
120
+ } catch (Throwable t) {
121
+ assertTrue(t instanceof ConfigException);
122
+ }
123
+ }
124
+
125
+ @Test
126
+ public void checkConfigExceptionIfUnknownRenamingOperatorName()
127
+ {
128
+ ConfigSource pluginConfig = Exec.newConfigSource()
129
+ .set("rules", ImmutableList.of(ImmutableMap.of("rule", "some_unknown_renaming_operator")));
130
+
131
+ try {
132
+ filter.transaction(pluginConfig, SCHEMA, new FilterPlugin.Control() {
133
+ public void run(TaskSource task, Schema schema) { }
134
+ });
135
+ fail();
136
+ } catch (Throwable t) {
137
+ assertTrue(t instanceof ConfigException);
138
+ }
139
+ }
88
140
  }
@@ -30,7 +30,7 @@ Gem::Specification.new do |gem|
30
30
  gem.platform = 'java'
31
31
 
32
32
  else
33
- gem.add_dependency "jruby-jars", '= 9.1.2.0'
33
+ gem.add_dependency "jruby-jars", '= 9.1.5.0'
34
34
  end
35
35
 
36
36
  gem.add_development_dependency "rake", [">= 0.10.0"]
@@ -122,7 +122,7 @@ EOF
122
122
  # add rules...
123
123
  ##
124
124
 
125
- migrator.write(".ruby-version", "jruby-9.1.2.0")
125
+ migrator.write(".ruby-version", "jruby-9.1.5.0")
126
126
 
127
127
  # update version at the end
128
128
  if from_ver <= version("0.1.0")
@@ -1 +1 @@
1
- jruby-9.1.2.0
1
+ jruby-9.1.5.0
@@ -1 +1 @@
1
- jruby-9.1.2.0
1
+ jruby-9.1.5.0
@@ -13,7 +13,7 @@ module Embulk
13
13
  module RubyAdapter
14
14
  module ClassMethods
15
15
  def new_java
16
- Java::FileInputRunner.new(Java.injector.getInstance(java_class))
16
+ Java::FileInputRunner.new(Java.injector.getInstance(plugin_java_class))
17
17
  end
18
18
  # TODO transaction, resume, cleanup
19
19
  end
@@ -13,7 +13,7 @@ module Embulk
13
13
  module RubyAdapter
14
14
  module ClassMethods
15
15
  def new_java
16
- Java::FileOutputRunner.new(Java.injector.getInstance(java_class))
16
+ Java::FileOutputRunner.new(Java.injector.getInstance(plugin_java_class))
17
17
  end
18
18
  # TODO transaction, resume, cleanup
19
19
  end
@@ -142,11 +142,7 @@ module Embulk
142
142
  schema = []
143
143
  column_names.zip(other_types).each do |name,type|
144
144
  if name && type
145
- if type.is_a?(SchemaGuess::TimestampTypeMatch)
146
- schema << {"name" => name, "type" => type, "format" => type.format}
147
- else
148
- schema << {"name" => name, "type" => type}
149
- end
145
+ schema << new_column(name, type)
150
146
  end
151
147
  end
152
148
  parser_guessed["columns"] = schema
@@ -154,6 +150,14 @@ module Embulk
154
150
  return {"parser" => parser_guessed}
155
151
  end
156
152
 
153
+ def new_column(name, type)
154
+ if type.is_a?(SchemaGuess::TimestampTypeMatch)
155
+ {"name" => name, "type" => type, "format" => type.format}
156
+ else
157
+ {"name" => name, "type" => type}
158
+ end
159
+ end
160
+
157
161
  private
158
162
 
159
163
  def split_lines(parser_config, skip_empty_lines, sample_lines, delim, extra_config)
@@ -0,0 +1,13 @@
1
+ module Embulk
2
+ module Guess
3
+ require 'embulk/guess/csv'
4
+
5
+ class CsvAllStringsGuessPlugin < CsvGuessPlugin
6
+ Plugin.register_guess("csv_all_strings", self)
7
+
8
+ def new_column(name, type)
9
+ {"name" => name, "type" => "string"}
10
+ end
11
+ end
12
+ end
13
+ end
@@ -37,7 +37,7 @@ module Embulk
37
37
  def guess(config, sample)
38
38
  java_config = config.to_java
39
39
  java_sample = sample.to_java
40
- java_config_diff = java_object.guess(java_config, java_sample)
40
+ java_config_diff = plugin_java_object.guess(java_config, java_sample)
41
41
  return DataSource.from_java(java_config_diff)
42
42
  end
43
43
  end
@@ -57,20 +57,20 @@ module Embulk
57
57
 
58
58
  def self.ruby_adapter_class(java_class, ruby_base_class, ruby_module)
59
59
  Class.new(ruby_base_class) do
60
- const_set(:JAVA_CLASS, java_class)
60
+ const_set(:PLUGIN_JAVA_CLASS, java_class)
61
61
 
62
62
  include ruby_module
63
63
  extend ruby_module::ClassMethods
64
64
 
65
- unless method_defined?(:java_object)
66
- def java_object
67
- @java_object ||= self.class.new_java
65
+ unless method_defined?(:plugin_java_object)
66
+ def plugin_java_object
67
+ @plugin_java_object ||= self.class.new_java
68
68
  end
69
69
  end
70
70
 
71
- unless (class<<self;self;end).method_defined?(:java_class)
72
- def self.java_class
73
- self::JAVA_CLASS
71
+ unless (class<<self;self;end).method_defined?(:plugin_java_class)
72
+ def self.plugin_java_class
73
+ self::PLUGIN_JAVA_CLASS
74
74
  end
75
75
  end
76
76
 
@@ -81,7 +81,7 @@ module Embulk
81
81
  # ruby_module::ClassMethods includes other modules.
82
82
  unless ruby_module::ClassMethods.method_defined?(:new_java)
83
83
  def self.new_java
84
- Java.injector.getInstance(java_class)
84
+ Java.injector.getInstance(plugin_java_class)
85
85
  end
86
86
  end
87
87
  end
@@ -1,3 +1,3 @@
1
1
  module Embulk
2
- VERSION = '0.8.13'
2
+ VERSION = '0.8.14'
3
3
  end
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+ require 'time'
3
+ require 'embulk/guess/csv_all_strings'
4
+
5
+ class CsvAllStringsGuessTest < ::Test::Unit::TestCase
6
+ class TestAllStrings < self
7
+ def test_columns_without_header
8
+ actual = guess([
9
+ "1\tfoo\t2000-01-01T00:00:00+0900",
10
+ "2\tbar\t2000-01-01T00:00:00+0900",
11
+ ])
12
+ expected = [
13
+ {"name" => "c0", "type" => "string"},
14
+ {"name" => "c1", "type" => "string"},
15
+ {"name" => "c2", "type" => "string"},
16
+ ]
17
+ assert_equal expected, actual["parser"]["columns"]
18
+ end
19
+
20
+ def test_columns_with_header
21
+ actual = guess([
22
+ "num\tstr\ttime",
23
+ "1\tfoo\t2000-01-01T00:00:00+0900",
24
+ "2\tbar\t2000-01-01T00:00:00+0900",
25
+ ])
26
+ expected = [
27
+ {"name" => "num", "type" => "string"},
28
+ {"name" => "str", "type" => "string"},
29
+ {"name" => "time", "type" => "string"},
30
+ ]
31
+ assert_equal expected, actual["parser"]["columns"]
32
+ end
33
+ end
34
+
35
+ def guess(texts)
36
+ conf = Embulk::DataSource.new({
37
+ parser: {
38
+ type: "csv"
39
+ }
40
+ })
41
+ Embulk::Guess::CsvAllStringsGuessPlugin.new.guess_lines(conf, Array(texts))
42
+ end
43
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.13
4
+ version: 0.8.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-12 00:00:00.000000000 Z
11
+ date: 2016-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jruby-jars
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 9.1.2.0
19
+ version: 9.1.5.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 9.1.2.0
26
+ version: 9.1.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -108,9 +108,9 @@ files:
108
108
  - classpath/commons-beanutils-core-1.8.3.jar
109
109
  - classpath/commons-compress-1.10.jar
110
110
  - classpath/commons-lang3-3.1.jar
111
- - classpath/embulk-cli-0.8.13.jar
112
- - classpath/embulk-core-0.8.13.jar
113
- - classpath/embulk-standards-0.8.13.jar
111
+ - classpath/embulk-cli-0.8.14.jar
112
+ - classpath/embulk-core-0.8.14.jar
113
+ - classpath/embulk-standards-0.8.14.jar
114
114
  - classpath/guava-18.0.jar
115
115
  - classpath/guice-4.0.jar
116
116
  - classpath/guice-bootstrap-0.1.1.jar
@@ -126,7 +126,7 @@ files:
126
126
  - classpath/joda-time-2.9.2.jar
127
127
  - classpath/logback-classic-1.1.3.jar
128
128
  - classpath/logback-core-1.1.3.jar
129
- - classpath/msgpack-core-0.8.8.jar
129
+ - classpath/msgpack-core-0.8.11.jar
130
130
  - classpath/netty-buffer-5.0.0.Alpha1.jar
131
131
  - classpath/netty-common-5.0.0.Alpha1.jar
132
132
  - classpath/slf4j-api-1.7.12.jar
@@ -427,6 +427,7 @@ files:
427
427
  - embulk-docs/src/release/release-0.8.11.rst
428
428
  - embulk-docs/src/release/release-0.8.12.rst
429
429
  - embulk-docs/src/release/release-0.8.13.rst
430
+ - embulk-docs/src/release/release-0.8.14.rst
430
431
  - embulk-docs/src/release/release-0.8.2.rst
431
432
  - embulk-docs/src/release/release-0.8.3.rst
432
433
  - embulk-docs/src/release/release-0.8.4.rst
@@ -527,6 +528,7 @@ files:
527
528
  - lib/embulk/guess/bzip2.rb
528
529
  - lib/embulk/guess/charset.rb
529
530
  - lib/embulk/guess/csv.rb
531
+ - lib/embulk/guess/csv_all_strings.rb
530
532
  - lib/embulk/guess/gzip.rb
531
533
  - lib/embulk/guess/json.rb
532
534
  - lib/embulk/guess/newline.rb
@@ -549,6 +551,7 @@ files:
549
551
  - lib/embulk/schema.rb
550
552
  - lib/embulk/version.rb
551
553
  - settings.gradle
554
+ - test/guess/test_csv_all_strings.rb
552
555
  - test/guess/test_csv_guess.rb
553
556
  - test/guess/test_schema_guess.rb
554
557
  - test/guess/test_time_format_guess.rb
@@ -579,9 +582,9 @@ signing_key:
579
582
  specification_version: 4
580
583
  summary: Embulk, a plugin-based parallel bulk data loader
581
584
  test_files:
585
+ - test/guess/test_csv_all_strings.rb
582
586
  - test/guess/test_csv_guess.rb
583
587
  - test/guess/test_schema_guess.rb
584
588
  - test/guess/test_time_format_guess.rb
585
589
  - test/helper.rb
586
590
  - test/run-test.rb
587
- has_rdoc: false