embulk-filter-query_string 0.1.2 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3221e8d17d5faad744c2fdc722adfccb54f871c5
4
- data.tar.gz: a9c510e70a6ef266615b118690aa9c821dae488e
3
+ metadata.gz: 7259a5d22d2dcfe756e90863aa86e83ee47031cb
4
+ data.tar.gz: 0b77859eabb7effbc287629bdc0c0848317a1c81
5
5
  SHA512:
6
- metadata.gz: 89607dde6b53d17258c9c6ce587f1b1e3604608c1f1d8a5c9de5074595a2ca8e8053a780b489bfb219f126fa91c9727f5985395fb81a812e6e395835891ca6d2
7
- data.tar.gz: e0c5d54b140e0518f7ee3f1d85c41403ad144cb10dfe888a0581be5e7cb9c401d9a6e81299c919023a1938cd31f2192fe14a7cc9f9084fc7ddb257bd25ea0432
6
+ metadata.gz: bbc77a119f5acdd290d6cc4ff8c82d1db7504ff4802bcfba93aa607713e027a23eda94ea12e029efb7895cd432a5accf5b57c8803401d2b9faba025ee5cc802d
7
+ data.tar.gz: 8f4eaa31cc2edfc262ebf22a9b920455a2327585afb542e1821c444e8b7c844d58a2f817d7fd3beefc83eda213ded9da9b81158e5caea08204a5eadb375a053d
@@ -14,14 +14,14 @@ configurations {
14
14
  provided
15
15
  }
16
16
 
17
- version = "0.1.0"
17
+ version = "0.2.0"
18
18
 
19
19
  sourceCompatibility = 1.7
20
20
  targetCompatibility = 1.7
21
21
 
22
22
  dependencies {
23
- compile "org.embulk:embulk-core:0.8.4"
24
- provided "org.embulk:embulk-core:0.8.4"
23
+ compile "org.embulk:embulk-core:0.8.13"
24
+ provided "org.embulk:embulk-core:0.8.13"
25
25
 
26
26
  // compile "YOUR_JAR_DEPENDENCY_GROUP:YOUR_JAR_DEPENDENCY_MODULE:YOUR_JAR_DEPENDENCY_VERSION"
27
27
  compile 'org.apache.httpcomponents:httpclient:4.5.1'
@@ -79,7 +79,7 @@ task gemspec {
79
79
  gemspecFile.write($/
80
80
  Gem::Specification.new do |spec|
81
81
  spec.name = "embulk-filter-query_string"
82
- spec.version = "0.1.2"
82
+ spec.version = "${version}"
83
83
  spec.authors = ["Minnano Wedding Co., Ltd."]
84
84
  spec.summary = %[Query String filter plugin for Embulk]
85
85
  spec.description = %[The query string filter plugin parses the column contents as query string and insert columns from that field.]
@@ -40,10 +40,14 @@ import org.slf4j.Logger;
40
40
  import java.util.HashMap;
41
41
  import java.util.List;
42
42
  import java.util.Map;
43
+ import java.util.regex.Matcher;
44
+ import java.util.regex.Pattern;
43
45
 
44
46
  public class QueryStringFilterPlugin
45
47
  implements FilterPlugin
46
48
  {
49
+ public static final Pattern QUERY_STRING_PATTERN = Pattern.compile("[^\\?]*\\?([a-z0-9=&;*._%+-]+)", Pattern.CASE_INSENSITIVE);
50
+
47
51
  @Override
48
52
  public void transaction(ConfigSource config, Schema inputSchema, FilterPlugin.Control control)
49
53
  {
@@ -173,16 +177,18 @@ public class QueryStringFilterPlugin
173
177
  for (Column inputColumn : inputSchema.getColumns()) {
174
178
  if (columnName.equals(inputColumn.getName())) {
175
179
  String path = null;
176
- int pos = -1;
180
+ String queryString = null;
177
181
 
178
182
  if (!reader.isNull(inputColumn)) {
179
183
  path = reader.getString(inputColumn);
180
- pos = path.indexOf('?');
181
- }
182
184
 
183
- if (path != null && pos > 0) {
184
- String queryString = path.substring(pos + 1);
185
+ Matcher matcher = QUERY_STRING_PATTERN.matcher(path);
186
+ if (matcher.lookingAt()) {
187
+ queryString = matcher.group(1);
188
+ }
189
+ }
185
190
 
191
+ if (queryString != null) {
186
192
  Map<String, Object> map = new HashMap<>();
187
193
  QueryStringParser.parseQueryString(queryString, callback, map);
188
194
  for (ColumnConfig config : task.getExpandedColumns()) {
@@ -45,6 +45,11 @@ import static org.junit.Assert.assertTrue;
45
45
 
46
46
  public class TestQueryStringFilterPlugin
47
47
  {
48
+ private static interface AssertionWithPage
49
+ {
50
+ void run(PageReader pageReader, TestPageBuilderReader.MockPageOutput pageOutput);
51
+ }
52
+
48
53
  @Rule
49
54
  public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
50
55
 
@@ -85,26 +90,39 @@ public class TestQueryStringFilterPlugin
85
90
  .add("qs", STRING)
86
91
  .add("qa", STRING)
87
92
  .build();
88
-
89
- final QueryStringFilterPlugin plugin = new QueryStringFilterPlugin();
90
- plugin.transaction(configSource, inputSchema, new FilterPlugin.Control()
93
+ testQueryString(configSource, inputSchema, "/path?q1=1&q2=2#fragment", new AssertionWithPage()
91
94
  {
92
95
  @Override
93
- public void run(TaskSource taskSource, Schema outputSchema)
96
+ public void run(PageReader pageReader, TestPageBuilderReader.MockPageOutput pageOutput)
94
97
  {
95
- TestPageBuilderReader.MockPageOutput mockPageOutput = new TestPageBuilderReader.MockPageOutput();
96
- PageOutput pageOutput = plugin.open(taskSource, inputSchema, outputSchema, mockPageOutput);
98
+ for (Page page : pageOutput.pages) {
99
+ pageReader.setPage(page);
97
100
 
98
- List<Page> pages = PageTestUtils.buildPage(runtime.getBufferAllocator(), inputSchema, "before", "/path?q1=one&q2=2", "after");
99
- for (Page page : pages) {
100
- pageOutput.add(page);
101
+ assertThat(pageReader.getString(0), is("before"));
102
+ assertThat(pageReader.getString(1), is("1"));
103
+ assertEquals(2L, pageReader.getLong(2));
104
+ assertThat(pageReader.getString(3), is("after"));
101
105
  }
106
+ }
107
+ });
108
+ }
102
109
 
103
- pageOutput.finish();
104
- pageOutput.close();
110
+ @Test
111
+ public void testOpenSuccessfullyWithHashbang()
112
+ {
113
+ ConfigSource configSource = loadConfigSource("testOpen.yml");
114
+ final Schema inputSchema = Schema.builder()
115
+ .add("qb", STRING)
116
+ .add("qs", STRING)
117
+ .add("qa", STRING)
118
+ .build();
105
119
 
106
- PageReader pageReader = new PageReader(outputSchema);
107
- for (Page page : mockPageOutput.pages) {
120
+ testQueryString(configSource, inputSchema, "/#!/path?q1=one&q2=2#fragment", new AssertionWithPage()
121
+ {
122
+ @Override
123
+ public void run(PageReader pageReader, TestPageBuilderReader.MockPageOutput pageOutput)
124
+ {
125
+ for (Page page : pageOutput.pages) {
108
126
  pageReader.setPage(page);
109
127
 
110
128
  assertThat(pageReader.getString(0), is("before"));
@@ -152,6 +170,32 @@ public class TestQueryStringFilterPlugin
152
170
  });
153
171
  }
154
172
 
173
+ private void testQueryString(ConfigSource configSource, final Schema inputSchema, final String path, final AssertionWithPage assertion)
174
+ {
175
+ final QueryStringFilterPlugin plugin = new QueryStringFilterPlugin();
176
+ plugin.transaction(configSource, inputSchema, new FilterPlugin.Control()
177
+ {
178
+ @Override
179
+ public void run(TaskSource taskSource, Schema outputSchema)
180
+ {
181
+ TestPageBuilderReader.MockPageOutput mockPageOutput = new TestPageBuilderReader.MockPageOutput();
182
+ PageOutput pageOutput = plugin.open(taskSource, inputSchema, outputSchema, mockPageOutput);
183
+
184
+ List<Page> pages = PageTestUtils.buildPage(runtime.getBufferAllocator(), inputSchema, "before", path, "after");
185
+ for (Page page : pages) {
186
+ pageOutput.add(page);
187
+ }
188
+
189
+ pageOutput.finish();
190
+ pageOutput.close();
191
+
192
+ PageReader pageReader = new PageReader(outputSchema);
193
+ assertion.run(pageReader, mockPageOutput);
194
+ ;
195
+ }
196
+ });
197
+ }
198
+
155
199
  private ConfigSource loadConfigSource(String yamlPath)
156
200
  {
157
201
  try {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-filter-query_string
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Minnano Wedding Co., Ltd.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-11 00:00:00.000000000 Z
11
+ date: 2016-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -64,7 +64,7 @@ files:
64
64
  - src/test/resources/testTransaction.yml
65
65
  - classpath/commons-codec-1.9.jar
66
66
  - classpath/commons-logging-1.2.jar
67
- - classpath/embulk-filter-query_string-0.1.0.jar
67
+ - classpath/embulk-filter-query_string-0.2.0.jar
68
68
  - classpath/fastutil-6.2.2.jar
69
69
  - classpath/httpclient-4.5.1.jar
70
70
  - classpath/httpcore-4.4.3.jar