embulk-filter-base64 0.1.0 → 0.1.1

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: d01a8a26033d897ab2bfb48614706211c882bf12
4
- data.tar.gz: 86ff16dd3e6a85676af9c2a91953edfd25847b4d
3
+ metadata.gz: 920673effb3067f179e366a12a6b1ea760a9c199
4
+ data.tar.gz: a77a241890b994b2fabc95d1ae175f314f70f6ce
5
5
  SHA512:
6
- metadata.gz: cf2b41351d1dfb2ba5742721f2f608e063f99a715d504177b139ae12728d8cba93f0b3abac937f6b37241b8488f2b386dbe54d49cbf452da970599d1fbdc40e5
7
- data.tar.gz: 18ba893338e8c53f3dc28d4d63abf6dde24ac7befaaa3625e3ff4270b4be7fa77df194fc16a9871b808abda927ac02bab7396da667fa5ee582fb11cd1982ffcb
6
+ metadata.gz: 85586eecb14aeba081c8706353c393c11d7b3592b1ef3d3f3a5a90bcd8bce8268adaad14c044c35cab95a2da1c94eb6ebdadfb899ffcb2d982a7e287ef635e80
7
+ data.tar.gz: db625af1af9e2ba4a3b4f38de4c23d5f1f48276be36b45b89edd0408b6eb7cc69f7f88f699edc96f373baa66ec06a0bc283f23cb9fd36b53fa8832bc67e31d3c
data/README.md CHANGED
@@ -17,6 +17,7 @@ An Embulk filter plugin to encode/decode string by Base64.
17
17
 
18
18
  ## Limitation
19
19
 
20
+ * Java8 environment is needed because this plugin uses [java.util.Base64](https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html) of Java8
20
21
  * Type of input value to be encoded must be string.
21
22
  - encoded value is string and is is needed to align the type of input and output value
22
23
  + e.g. 1234(string) is encoded into MTIzNA==(string)
@@ -102,7 +103,8 @@ timestamp to decode (timestamp) : 2017-01-01 00:00:00 UTC
102
103
 
103
104
  ### Todo
104
105
 
105
- * Write tests
106
+ * [Support base64 in apache commons codec](https://github.com/ysk24ok/embulk-filter-base64/issues/1)
107
+ * [Support encoder/decoder of URL and MIME](https://github.com/ysk24ok/embulk-filter-base64/issues/2)
106
108
 
107
109
  ## Build
108
110
 
data/build.gradle CHANGED
@@ -13,7 +13,7 @@ configurations {
13
13
  provided
14
14
  }
15
15
 
16
- version = "0.1.0"
16
+ version = "0.1.1"
17
17
 
18
18
  sourceCompatibility = 1.7
19
19
  targetCompatibility = 1.7
@@ -23,6 +23,7 @@ dependencies {
23
23
  provided "org.embulk:embulk-core:0.8.15"
24
24
  // compile "YOUR_JAR_DEPENDENCY_GROUP:YOUR_JAR_DEPENDENCY_MODULE:YOUR_JAR_DEPENDENCY_VERSION"
25
25
  testCompile "junit:junit:4.+"
26
+ testCompile "org.embulk:embulk-core:0.8.15:tests"
26
27
  }
27
28
 
28
29
  task classpath(type: Copy, dependsOn: ["jar"]) {
@@ -8,7 +8,6 @@ import java.util.Base64;
8
8
  import com.google.common.base.Optional;
9
9
  import org.embulk.config.Config;
10
10
  import org.embulk.config.ConfigDefault;
11
- import org.embulk.config.ConfigDiff;
12
11
  import org.embulk.config.ConfigSource;
13
12
  import org.embulk.config.Task;
14
13
  import org.embulk.config.TaskSource;
@@ -41,6 +40,8 @@ public class Base64FilterPlugin
41
40
  @Config("name")
42
41
  public String getName();
43
42
 
43
+ // TODO: getType
44
+
44
45
  @Config("encode")
45
46
  @ConfigDefault("false")
46
47
  public Optional<Boolean> getDoEncode();
@@ -50,15 +51,35 @@ public class Base64FilterPlugin
50
51
  public Optional<Boolean> getDoDecode();
51
52
  }
52
53
 
54
+ public void validate(PluginTask pluginTask, Schema inputSchema)
55
+ {
56
+ for (Base64ColumnTask task : pluginTask.getColumns()) {
57
+ // throws exception if the column name does not exist
58
+ inputSchema.lookupColumn(task.getName());
59
+ boolean doEncode = task.getDoEncode().get();
60
+ boolean doDecode = task.getDoDecode().get();
61
+ boolean bothTrue = doEncode && doDecode;
62
+ boolean bothFalse = !doEncode && !doDecode;
63
+ if (bothTrue || bothFalse) {
64
+ String errMsg = "Specify either 'encode: true' or 'decode: true'";
65
+ throw new DataException(errMsg);
66
+ }
67
+ }
68
+ for (Column column : inputSchema.getColumns()) {
69
+ Type colType = column.getType();
70
+ if (!Types.STRING.equals(colType)) {
71
+ String errMsg = "Type of input columns must be string";
72
+ throw new DataException(errMsg);
73
+ }
74
+ }
75
+ }
76
+
53
77
  @Override
54
78
  public void transaction(ConfigSource config, Schema inputSchema,
55
79
  FilterPlugin.Control control)
56
80
  {
57
81
  PluginTask task = config.loadConfig(PluginTask.class);
58
- for (Base64ColumnTask base64ColTask: task.getColumns()) {
59
- // throws exception if the column name does not exist
60
- inputSchema.lookupColumn(base64ColTask.getName());
61
- }
82
+ validate(task, inputSchema);
62
83
  Schema outputSchema = inputSchema;
63
84
  control.run(task.dump(), outputSchema);
64
85
  }
@@ -67,157 +88,52 @@ public class Base64FilterPlugin
67
88
  public PageOutput open(TaskSource taskSource, final Schema inputSchema,
68
89
  final Schema outputSchema, final PageOutput output)
69
90
  {
70
- PluginTask task = taskSource.loadTask(PluginTask.class);
71
- final Map<String, Base64ColumnTask> base64ColumnMap = getBase64ColumnMap(task.getColumns());
72
-
73
- return new PageOutput() {
74
- private PageReader reader = new PageReader(inputSchema);
75
- private PageBuilder builder = new PageBuilder(
76
- Exec.getBufferAllocator(), outputSchema, output);
77
- private ColumnVisitorImpl visitor = new ColumnVisitorImpl(builder);
78
-
79
- @Override
80
- public void add(Page page)
81
- {
82
- reader.setPage(page);
83
- while (reader.nextRecord()) {
84
- for (Column column: inputSchema.getColumns()) {
85
- String colName = column.getName();
86
- Type colType = column.getType();
87
- Base64ColumnTask colTask = base64ColumnMap.get(colName);
88
- // columns where nothing to be done
89
- if (colTask == null) {
90
- column.visit(visitor);
91
- continue;
92
- }
93
- Boolean doEncode = colTask.getDoEncode().get();
94
- Boolean doDecode = colTask.getDoDecode().get();
95
- Boolean bothTrue = doEncode && doDecode;
96
- Boolean bothFalse = !doEncode && !doDecode;
97
- if (bothTrue || bothFalse) {
98
- String errMsg = "Specify either 'encode: true' or 'decode: true'";
99
- throw new Base64ValidateException(errMsg);
100
- }
101
- if (!Types.STRING.equals(colType)) {
102
- String errMsg = "Type of input columns must be string";
103
- throw new Base64ValidateException(errMsg);
104
- }
105
- // encode
106
- if (doEncode) {
107
- String raw = reader.getString(column);
108
- String encoded = Base64.getEncoder().encodeToString(raw.getBytes());
109
- builder.setString(column, encoded);
110
- }
111
- // decode
112
- if (doDecode) {
113
- String encoded = reader.getString(column);
114
- String decoded = new String(Base64.getDecoder().decode(encoded));
115
- builder.setString(column, decoded);
116
- }
117
- }
118
- builder.addRecord();
119
- }
120
- }
91
+ final PluginTask task = taskSource.loadTask(PluginTask.class);
92
+ PageBuilder pageBuilder = new PageBuilder(
93
+ Exec.getBufferAllocator(), outputSchema, output);
94
+ PageReader pageReader = new PageReader(inputSchema);
95
+ ColumnVisitorImpl visitor = new ColumnVisitorImpl(
96
+ task, pageReader, pageBuilder);
97
+
98
+ return new PageOutputImpl(
99
+ pageReader, pageBuilder, outputSchema, visitor);
100
+ }
121
101
 
122
- @Override
123
- public void finish()
124
- {
125
- builder.finish();
126
- }
102
+ public static class PageOutputImpl implements PageOutput
103
+ {
104
+ private PageReader pageReader;
105
+ private PageBuilder pageBuilder;
106
+ private Schema outputSchema;
107
+ private ColumnVisitorImpl visitor;
127
108
 
128
- @Override
129
- public void close()
130
- {
131
- builder.close();
132
- }
109
+ PageOutputImpl(PageReader pageReader, PageBuilder pageBuilder, Schema outputSchema, ColumnVisitorImpl visitor)
110
+ {
111
+ this.pageReader = pageReader;
112
+ this.pageBuilder = pageBuilder;
113
+ this.outputSchema = outputSchema;
114
+ this.visitor = visitor;
115
+ }
133
116
 
134
- class ColumnVisitorImpl implements ColumnVisitor
135
- {
136
- private final PageBuilder builder;
137
-
138
- ColumnVisitorImpl(PageBuilder builder) {
139
- this.builder = builder;
140
- }
141
-
142
- @Override
143
- public void booleanColumn(Column outputColumn)
144
- {
145
- if (reader.isNull(outputColumn)) {
146
- builder.setNull(outputColumn);
147
- } else {
148
- builder.setBoolean(outputColumn, reader.getBoolean(outputColumn));
149
- }
150
- }
151
-
152
- @Override
153
- public void longColumn(Column outputColumn)
154
- {
155
- if (reader.isNull(outputColumn)) {
156
- builder.setNull(outputColumn);
157
- } else {
158
- builder.setLong(outputColumn, reader.getLong(outputColumn));
159
- }
160
- }
161
-
162
- @Override
163
- public void doubleColumn(Column outputColumn)
164
- {
165
- if (reader.isNull(outputColumn)) {
166
- builder.setNull(outputColumn);
167
- } else {
168
- builder.setDouble(outputColumn, reader.getDouble(outputColumn));
169
- }
170
- }
171
-
172
- @Override
173
- public void stringColumn(Column outputColumn)
174
- {
175
- if (reader.isNull(outputColumn)) {
176
- builder.setNull(outputColumn);
177
- } else {
178
- builder.setString(outputColumn, reader.getString(outputColumn));
179
- }
180
- }
181
-
182
- @Override
183
- public void timestampColumn(Column outputColumn)
184
- {
185
- if (reader.isNull(outputColumn)) {
186
- builder.setNull(outputColumn);
187
- } else {
188
- builder.setTimestamp(outputColumn, reader.getTimestamp(outputColumn));
189
- }
190
- }
191
-
192
- @Override
193
- public void jsonColumn(Column outputColumn)
194
- {
195
- if (reader.isNull(outputColumn)) {
196
- builder.setNull(outputColumn);
197
- } else {
198
- builder.setJson(outputColumn, reader.getJson(outputColumn));
199
- }
200
- }
117
+ @Override
118
+ public void add(Page page)
119
+ {
120
+ pageReader.setPage(page);
121
+ while (pageReader.nextRecord()) {
122
+ outputSchema.visitColumns(visitor);
123
+ pageBuilder.addRecord();
201
124
  }
202
- };
203
- }
125
+ }
204
126
 
205
- static Map<String, Base64ColumnTask> getBase64ColumnMap(
206
- List<Base64ColumnTask> columnTasks)
207
- {
208
- Map<String, Base64ColumnTask> m = new HashMap<>();
209
- for (Base64ColumnTask columnTask: columnTasks) {
210
- m.put(columnTask.getName(), columnTask);
127
+ @Override
128
+ public void finish()
129
+ {
130
+ pageBuilder.finish();
211
131
  }
212
- return m;
213
- }
214
132
 
215
- static class Base64ValidateException
216
- extends DataException
217
- {
218
- Base64ValidateException(String message)
133
+ @Override
134
+ public void close()
219
135
  {
220
- super(message);
136
+ pageBuilder.close();
221
137
  }
222
- }
138
+ };
223
139
  }
@@ -0,0 +1,148 @@
1
+ package org.embulk.filter.base64;
2
+
3
+ import java.util.List;
4
+ import java.util.Map;
5
+ import java.util.HashMap;
6
+ import java.util.Base64;
7
+
8
+ import org.embulk.config.Config;
9
+ import org.embulk.config.ConfigDefault;
10
+ import org.embulk.config.Task;
11
+ import org.embulk.spi.Column;
12
+ import org.embulk.spi.ColumnVisitor;
13
+ import org.embulk.spi.DataException;
14
+ import org.embulk.spi.PageBuilder;
15
+ import org.embulk.spi.PageReader;
16
+ import org.embulk.spi.Schema;
17
+
18
+ import org.embulk.filter.base64.Base64FilterPlugin.Base64ColumnTask;
19
+ import org.embulk.filter.base64.Base64FilterPlugin.PluginTask;
20
+
21
+ public class ColumnVisitorImpl
22
+ implements ColumnVisitor
23
+ {
24
+ private final PageReader pageReader;
25
+ private final PageBuilder pageBuilder;
26
+ private final Map<String, Base64ColumnTask> base64ColumnMap;
27
+
28
+ ColumnVisitorImpl(PluginTask task, PageReader reader, PageBuilder builder)
29
+ {
30
+ this.pageReader = reader;
31
+ this.pageBuilder = builder;
32
+ this.base64ColumnMap = getBase64ColumnMap(task.getColumns());
33
+ }
34
+
35
+ private static Map<String, Base64ColumnTask> getBase64ColumnMap(
36
+ List<Base64ColumnTask> columnTasks)
37
+ {
38
+ Map<String, Base64ColumnTask> m = new HashMap<>();
39
+ for (Base64ColumnTask columnTask : columnTasks) {
40
+ m.put(columnTask.getName(), columnTask);
41
+ }
42
+ return m;
43
+ }
44
+
45
+ private Base64ColumnTask getTask(Column column)
46
+ {
47
+ String colName = column.getName();
48
+ return base64ColumnMap.get(colName);
49
+ }
50
+
51
+ private String executeTask(Base64ColumnTask task, Column column)
52
+ {
53
+ boolean doEncode = task.getDoEncode().get();
54
+ boolean doDecode = task.getDoDecode().get();
55
+ // encode
56
+ if (doEncode) {
57
+ String raw = pageReader.getString(column);
58
+ return Base64.getEncoder().encodeToString(raw.getBytes());
59
+ }
60
+ // decode
61
+ //else if (doDecode) {
62
+ else {
63
+ String encoded = pageReader.getString(column);
64
+ return new String(Base64.getDecoder().decode(encoded));
65
+ }
66
+ }
67
+
68
+ @Override
69
+ public void booleanColumn(Column outputColumn)
70
+ {
71
+ if (pageReader.isNull(outputColumn)) {
72
+ pageBuilder.setNull(outputColumn);
73
+ }
74
+ else {
75
+ pageBuilder.setBoolean(
76
+ outputColumn, pageReader.getBoolean(outputColumn));
77
+ }
78
+ }
79
+
80
+ @Override
81
+ public void longColumn(Column outputColumn)
82
+ {
83
+ if (pageReader.isNull(outputColumn)) {
84
+ pageBuilder.setNull(outputColumn);
85
+ }
86
+ else {
87
+ pageBuilder.setLong(
88
+ outputColumn, pageReader.getLong(outputColumn));
89
+ }
90
+ }
91
+
92
+ @Override
93
+ public void doubleColumn(Column outputColumn)
94
+ {
95
+ if (pageReader.isNull(outputColumn)) {
96
+ pageBuilder.setNull(outputColumn);
97
+ }
98
+ else {
99
+ pageBuilder.setDouble(
100
+ outputColumn, pageReader.getDouble(outputColumn));
101
+ }
102
+ }
103
+
104
+ @Override
105
+ public void stringColumn(Column outputColumn)
106
+ {
107
+ if (pageReader.isNull(outputColumn)) {
108
+ pageBuilder.setNull(outputColumn);
109
+ }
110
+ else {
111
+ Base64ColumnTask task = getTask(outputColumn);
112
+ // when there is no task executed on this column
113
+ if (task == null) {
114
+ pageBuilder.setString(
115
+ outputColumn, pageReader.getString(outputColumn));
116
+ // when there is a task
117
+ }
118
+ else {
119
+ String str = executeTask(task, outputColumn);
120
+ pageBuilder.setString(outputColumn, str);
121
+ }
122
+ }
123
+ }
124
+
125
+ @Override
126
+ public void timestampColumn(Column outputColumn)
127
+ {
128
+ if (pageReader.isNull(outputColumn)) {
129
+ pageBuilder.setNull(outputColumn);
130
+ }
131
+ else {
132
+ pageBuilder.setTimestamp(
133
+ outputColumn, pageReader.getTimestamp(outputColumn));
134
+ }
135
+ }
136
+
137
+ @Override
138
+ public void jsonColumn(Column outputColumn)
139
+ {
140
+ if (pageReader.isNull(outputColumn)) {
141
+ pageBuilder.setNull(outputColumn);
142
+ }
143
+ else {
144
+ pageBuilder.setJson(
145
+ outputColumn, pageReader.getJson(outputColumn));
146
+ }
147
+ }
148
+ }
@@ -1,5 +1,92 @@
1
1
  package org.embulk.filter.base64;
2
2
 
3
+ import org.embulk.EmbulkTestRuntime;
4
+ import org.embulk.config.ConfigLoader;
5
+ import org.embulk.config.ConfigSource;
6
+ import org.embulk.spi.DataException;
7
+ import org.embulk.spi.Exec;
8
+ import org.embulk.spi.Schema;
9
+ import org.embulk.spi.SchemaConfigException;
10
+ import org.embulk.spi.type.Types;
11
+ import org.embulk.filter.base64.Base64FilterPlugin.PluginTask;
12
+
13
+ import org.junit.Rule;
14
+ import org.junit.Test;
15
+
3
16
  public class TestBase64FilterPlugin
4
17
  {
18
+ @Rule
19
+ public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
20
+
21
+ public Base64FilterPlugin plugin = new Base64FilterPlugin();
22
+
23
+ public static PluginTask taskFromYamlString(String... lines)
24
+ {
25
+ StringBuilder builder = new StringBuilder();
26
+ for (String line : lines) {
27
+ builder.append(line).append("\n");
28
+ }
29
+ String yamlString = builder.toString();
30
+
31
+ ConfigLoader loader = new ConfigLoader(Exec.getModelManager());
32
+ ConfigSource config = loader.fromYamlString(yamlString);
33
+ return config.loadConfig(PluginTask.class);
34
+ }
35
+
36
+ @Test(expected = SchemaConfigException.class)
37
+ public void testValidate_noColumn()
38
+ {
39
+ PluginTask task = taskFromYamlString(
40
+ "type: base64",
41
+ "columns:",
42
+ " - {name: to encode, type: string, encode: true}",
43
+ " - {name: to decode, type: string, decode: true}"
44
+ );
45
+ Schema inputSchema = Schema.builder()
46
+ .add("to encode", Types.STRING)
47
+ .build();
48
+ plugin.validate(task, inputSchema);
49
+ }
50
+
51
+ @Test(expected = DataException.class)
52
+ public void testValidate_bothSpecified()
53
+ {
54
+ PluginTask task = taskFromYamlString(
55
+ "type: base64",
56
+ "columns:",
57
+ " - {name: to encode, type: string, encode: true, decode: true}"
58
+ );
59
+ Schema inputSchema = Schema.builder()
60
+ .add("to encode", Types.STRING)
61
+ .build();
62
+ plugin.validate(task, inputSchema);
63
+ }
64
+
65
+ @Test(expected = DataException.class)
66
+ public void testValidate_bothNotSpecified()
67
+ {
68
+ PluginTask task = taskFromYamlString(
69
+ "type: base64",
70
+ "columns:",
71
+ " - {name: to encode, type: string}"
72
+ );
73
+ Schema inputSchema = Schema.builder()
74
+ .add("to encode", Types.STRING)
75
+ .build();
76
+ plugin.validate(task, inputSchema);
77
+ }
78
+
79
+ @Test(expected = DataException.class)
80
+ public void testValidate_invalidInputType()
81
+ {
82
+ PluginTask task = taskFromYamlString(
83
+ "type: base64",
84
+ "columns:",
85
+ " - {name: to encode, type: string, type: double}"
86
+ );
87
+ Schema inputSchema = Schema.builder()
88
+ .add("to encode", Types.DOUBLE)
89
+ .build();
90
+ plugin.validate(task, inputSchema);
91
+ }
5
92
  }
@@ -0,0 +1,93 @@
1
+ package org.embulk.filter.base64;
2
+
3
+ import java.util.List;
4
+
5
+ import org.embulk.EmbulkTestRuntime;
6
+ import org.embulk.config.ConfigLoader;
7
+ import org.embulk.config.ConfigSource;
8
+ import org.embulk.spi.Exec;
9
+ import org.embulk.spi.Page;
10
+ import org.embulk.spi.PageBuilder;
11
+ import org.embulk.spi.PageOutput;
12
+ import org.embulk.spi.PageReader;
13
+ import org.embulk.spi.PageTestUtils;
14
+ import org.embulk.spi.Schema;
15
+ import org.embulk.spi.TestPageBuilderReader.MockPageOutput;
16
+ import org.embulk.spi.type.Types;
17
+ import org.embulk.spi.util.Pages;
18
+ import org.embulk.filter.base64.Base64FilterPlugin.PluginTask;
19
+ import org.embulk.filter.base64.Base64FilterPlugin.PageOutputImpl;
20
+ import org.embulk.filter.base64.ColumnVisitorImpl;
21
+ import static org.embulk.filter.base64.TestBase64FilterPlugin.taskFromYamlString;
22
+
23
+ import org.junit.Rule;
24
+ import org.junit.Test;
25
+ import static org.junit.Assert.*;
26
+
27
+ public class TestColumnVisitorImpl
28
+ {
29
+ @Rule
30
+ public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
31
+
32
+ private List<Object[]> filter(PluginTask task, Schema inputSchema, Object... objects)
33
+ {
34
+ MockPageOutput output = new MockPageOutput();
35
+ Schema outputSchema = inputSchema;
36
+ PageBuilder pageBuilder = new PageBuilder(
37
+ runtime.getBufferAllocator(), outputSchema, output);
38
+ PageReader pageReader = new PageReader(inputSchema);
39
+ ColumnVisitorImpl visitor = new ColumnVisitorImpl(
40
+ task, pageReader, pageBuilder);
41
+
42
+ List<Page> pages = PageTestUtils.buildPage(
43
+ runtime.getBufferAllocator(), inputSchema, objects);
44
+ PageOutput mockPageOutput = new PageOutputImpl(
45
+ pageReader, pageBuilder, outputSchema, visitor);
46
+ for (Page page : pages) {
47
+ mockPageOutput.add(page);
48
+ }
49
+ mockPageOutput.finish();
50
+ mockPageOutput.close();
51
+ return Pages.toObjects(outputSchema, output.pages);
52
+ }
53
+
54
+ @Test
55
+ public void testExecuteTask_encode()
56
+ {
57
+ PluginTask task = taskFromYamlString(
58
+ "type: base64",
59
+ "columns:",
60
+ " - {name: to encode, type: string, encode: true}"
61
+ );
62
+ Schema inputSchema = Schema.builder()
63
+ .add("to encode", Types.STRING)
64
+ .build();
65
+ List<Object[]> records = filter(task, inputSchema,
66
+ "John",
67
+ "David"
68
+ );
69
+ assertEquals(2, records.size());
70
+ assertEquals("Sm9obg==", records.get(0)[0]);
71
+ assertEquals("RGF2aWQ=", records.get(1)[0]);
72
+ }
73
+
74
+ @Test
75
+ public void testExecuteTask_decode()
76
+ {
77
+ PluginTask task = taskFromYamlString(
78
+ "type: base64",
79
+ "columns:",
80
+ " - {name: to decode, type: string, decode: true}"
81
+ );
82
+ Schema inputSchema = Schema.builder()
83
+ .add("to decode", Types.STRING)
84
+ .build();
85
+ List<Object[]> records = filter(task, inputSchema,
86
+ "Sm9obg==",
87
+ "RGF2aWQ="
88
+ );
89
+ assertEquals(2, records.size());
90
+ assertEquals("John", records.get(0)[0]);
91
+ assertEquals("David", records.get(1)[0]);
92
+ }
93
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-filter-base64
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke NISHIOKA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-16 00:00:00.000000000 Z
11
+ date: 2017-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -63,8 +63,10 @@ files:
63
63
  - gradlew.bat
64
64
  - lib/embulk/filter/base64.rb
65
65
  - src/main/java/org/embulk/filter/base64/Base64FilterPlugin.java
66
+ - src/main/java/org/embulk/filter/base64/ColumnVisitorImpl.java
66
67
  - src/test/java/org/embulk/filter/base64/TestBase64FilterPlugin.java
67
- - classpath/embulk-filter-base64-0.1.0.jar
68
+ - src/test/java/org/embulk/filter/base64/TestColumnVisitorImpl.java
69
+ - classpath/embulk-filter-base64-0.1.1.jar
68
70
  homepage: https://github.com/ysk24ok/embulk-filter-base64
69
71
  licenses:
70
72
  - MIT