embulk-input-http 0.0.5 → 0.0.6

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: c03f483d0ec3c8838d1538940f9a206c0e3b58f8
4
- data.tar.gz: 6e1e2d691f5d5acd099f12edb1cf6a3986a190ab
3
+ metadata.gz: e0fd9d1c50eb1690a68282058341d8dfe47c2706
4
+ data.tar.gz: e64cca9c2d869cbd0a107331aad8ca91e4187441
5
5
  SHA512:
6
- metadata.gz: c32fe0519c6d8444291cd7eb552256ae828106c160616490510d780fd1583cb98c482cc7351950dcc733d8e8c7f38aa378619c26a4b51317adffd086abb371c8
7
- data.tar.gz: 518387033e044784f908c95e6af973882df9ab68da75066c5eb10b9b07151094c370b44ad9cbb878e3dd92efd907e18ba4ac9b635749bce7be6cf8964234db63
6
+ metadata.gz: 72182010d6bb889cc86203e466d1cdcf35a64d47e4e38167414b7d204320558e7659aa3c09c0448e679c10a41a6e9884b278e63b545a4271d3b6f10571222760
7
+ data.tar.gz: cfe7a025c51abc126e4837578815b2139f7c938a0ee41e32f3a5d919589fdb1f03d18c61fa768b299bcd6d2258154dc764ff768c700de6c59c966d14e77bd782
data/README.md CHANGED
@@ -29,11 +29,11 @@ in:
29
29
 
30
30
  - **type**: specify this plugin as `http`
31
31
  - **url**: base url something like api (required)
32
- - **parser**: parser plugin to parse data in response (required)
33
32
  - **params**: pair of name/value to specify query parameter (optional)
34
33
  - **method**: http method, get is used by default (optional)
35
34
  - **user_agent**: the usrr agent to specify request header (optional)
36
- - **charset**: Charset to specify request header (optional, utf-8 is used by default)
35
+ - **charset**: charset to specify request header (optional, utf-8 is used by default)
36
+ - **basic_auth**: username/password for basic authentication (optional)
37
37
  - **open_timeout**: timeout msec to open connection (optional, 2000 is used by default)
38
38
  - **read_timeout**: timeout msec to read content via http (optional, 10000 is used by default)
39
39
  - **max_retries**: max number of retry request if failed (optional, 5 is used by default)
@@ -42,15 +42,39 @@ in:
42
42
 
43
43
  ### Brace expansion style in params
44
44
 
45
- In *params* section, you can specify also multilple params by using **brace expansion style**.
45
+ In *params* section, you can specify also multilple requests by using **values** or **brace expansion style** with set **expand** true.
46
+
47
+ The configuration using **values** is as below:
46
48
 
47
49
  ```yaml
48
- params
50
+ params:
51
+ - {name: id, values: [5, 4, 3, 2, 1]}
52
+ - {name: name, values: ["John", "Paul", "George", "Ringo"], expand: true}
53
+ ```
54
+
55
+ Also You can rewrite this configuration by using **brace expansion style** like as follows:
56
+
57
+
58
+ ```yaml
59
+ params:
49
60
  - {name: id, value "{5,4,3,2,1}", expand: true}
50
61
  - {name: name, value "{John,Paul,George,Ringo}", expand: true}
51
62
  ```
52
63
 
53
- To use this style, you need to set true to parameter *expand*, then all patterns of query will be called in a defferent request.
64
+ Then all patterns of query will be called in a defferent request.
65
+
66
+ By default, **expand** is false. In this case, all values will be multiple params in one request.
67
+
68
+
69
+ ### Use basic authentication
70
+
71
+ You can specify username/password for basic authentication.
72
+
73
+ ```yaml
74
+ basic_auth:
75
+ - user: MyUser
76
+ - password: MyPassword
77
+ ```
54
78
 
55
79
 
56
80
  ## Example
@@ -103,7 +127,6 @@ in:
103
127
  ```
104
128
 
105
129
  ## TODO
106
- - BasicAuth
107
130
  - HTTP-proxy
108
131
  - Custom hedaers
109
132
  - Guess
data/build.gradle CHANGED
@@ -12,7 +12,7 @@ configurations {
12
12
  provided
13
13
  }
14
14
 
15
- version = "0.0.5"
15
+ version = "0.0.6"
16
16
 
17
17
  dependencies {
18
18
  compile "org.embulk:embulk-core:0.5.2"
@@ -7,6 +7,7 @@ in:
7
7
  - {name: method, value: getStations}
8
8
  - {name: x, value: 135.0}
9
9
  - {name: y, value: "{35,34,33,32,31}.0", expand: true}
10
+ - {name: z, values: ["a", "b", "c"], expand: true}
10
11
  method: get
11
12
  user_agent: example_json
12
13
  charset: utf8
@@ -0,0 +1,39 @@
1
+ package org.embulk.input;
2
+
3
+ import com.fasterxml.jackson.annotation.JsonCreator;
4
+ import com.fasterxml.jackson.annotation.JsonProperty;
5
+ import com.google.common.base.Objects;
6
+
7
+ public class BasicAuthConfig {
8
+
9
+ private final String user;
10
+ private final String password;
11
+
12
+ @JsonCreator
13
+ public BasicAuthConfig(
14
+ @JsonProperty("user") String user,
15
+ @JsonProperty("password") String password) {
16
+ this.user = user;
17
+ this.password = password;
18
+ }
19
+
20
+ @JsonProperty("user")
21
+ public String getUser() {
22
+ return user;
23
+ }
24
+
25
+ @JsonProperty("password")
26
+ public String getPassword() {
27
+ return password;
28
+ }
29
+
30
+ @Override
31
+ public int hashCode() {
32
+ return Objects.hashCode(user, password);
33
+ }
34
+
35
+ @Override
36
+ public String toString() {
37
+ return String.format("BasicAuthConfig[%s, %s]", getUser(), getPassword());
38
+ }
39
+ }
@@ -2,13 +2,14 @@ package org.embulk.input;
2
2
 
3
3
  import com.google.common.base.Optional;
4
4
  import com.google.common.base.Throwables;
5
+ import com.google.common.collect.Lists;
5
6
  import org.apache.http.Header;
6
7
  import org.apache.http.HttpException;
7
8
  import org.apache.http.HttpResponse;
8
- import org.apache.http.conn.HttpClientConnectionManager;
9
- import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
10
- import org.apache.http.util.EntityUtils;
11
9
  import org.apache.http.NameValuePair;
10
+ import org.apache.http.auth.AuthScope;
11
+ import org.apache.http.auth.UsernamePasswordCredentials;
12
+ import org.apache.http.client.CredentialsProvider;
12
13
  import org.apache.http.client.HttpClient;
13
14
  import org.apache.http.client.HttpRequestRetryHandler;
14
15
  import org.apache.http.client.config.RequestConfig;
@@ -17,6 +18,7 @@ import org.apache.http.client.methods.HttpGet;
17
18
  import org.apache.http.client.methods.HttpPost;
18
19
  import org.apache.http.client.methods.HttpRequestBase;
19
20
  import org.apache.http.client.utils.URIBuilder;
21
+ import org.apache.http.impl.client.BasicCredentialsProvider;
20
22
  import org.apache.http.impl.client.HttpClientBuilder;
21
23
  import org.apache.http.message.BasicHeader;
22
24
  import org.apache.http.message.BasicNameValuePair;
@@ -31,7 +33,6 @@ import org.slf4j.Logger;
31
33
 
32
34
  import java.io.IOException;
33
35
  import java.io.InputStream;
34
- import java.io.ByteArrayInputStream;
35
36
  import java.io.UnsupportedEncodingException;
36
37
  import java.net.URISyntaxException;
37
38
  import java.util.ArrayList;
@@ -76,19 +77,26 @@ public class HttpInputPlugin implements FileInputPlugin {
76
77
  @Config("sleep_before_request")
77
78
  @ConfigDefault("0")
78
79
  public int getSleepBeforeRequest();
80
+
79
81
  public void setSleepBeforeRequest(int sleepBeforeRequest);
80
82
 
81
83
  @Config("params")
82
84
  @ConfigDefault("null")
83
85
  public Optional<ParamsConfig> getParams();
84
86
 
87
+ @Config("basic_auth")
88
+ @ConfigDefault("null")
89
+ public Optional<BasicAuthConfig> getBasicAuth();
90
+
85
91
  @ConfigInject
86
92
  public BufferAllocator getBufferAllocator();
87
93
 
88
- public List<ParamsConfig> getQueries();
89
- public void setQueries(List<ParamsConfig> queries);
94
+ public List<List<QueryConfig.Query>> getQueries();
95
+
96
+ public void setQueries(List<List<QueryConfig.Query>> queries);
90
97
 
91
98
  public HttpMethod getHttpMethod();
99
+
92
100
  public void setHttpMethod(HttpMethod httpMethod);
93
101
  }
94
102
 
@@ -103,11 +111,11 @@ public class HttpInputPlugin implements FileInputPlugin {
103
111
 
104
112
  int numOfThreads = 1;
105
113
  if (task.getParams().isPresent()) {
106
- List<ParamsConfig> expandedQueries = task.getParams().get().expandQueries();
114
+ List<List<QueryConfig.Query>> expandedQueries = task.getParams().get().expandQueries();
107
115
  task.setQueries(expandedQueries);
108
116
  numOfThreads = expandedQueries.size();
109
117
  } else {
110
- task.setQueries(new ArrayList<ParamsConfig>());
118
+ task.setQueries(Lists.<List<QueryConfig.Query>>newArrayList());
111
119
  }
112
120
 
113
121
  if (numOfThreads == 1) {
@@ -164,6 +172,11 @@ public class HttpInputPlugin implements FileInputPlugin {
164
172
  builder.setRetryHandler(retryHandler);
165
173
  }
166
174
 
175
+ if (task.getBasicAuth().isPresent()) {
176
+ builder.setDefaultCredentialsProvider(makeCredentialsProvider(task.getBasicAuth().get(),
177
+ request));
178
+ }
179
+
167
180
  HttpClient client = builder.build();
168
181
 
169
182
  if (task.getSleepBeforeRequest() > 0) {
@@ -190,26 +203,39 @@ public class HttpInputPlugin implements FileInputPlugin {
190
203
  }
191
204
  }
192
205
 
206
+ private CredentialsProvider makeCredentialsProvider(BasicAuthConfig config, HttpRequestBase scopeRequest) {
207
+ final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
208
+ final AuthScope authScope = new AuthScope(scopeRequest.getURI().getHost(),
209
+ scopeRequest.getURI().getPort());
210
+ credentialsProvider.setCredentials(authScope,
211
+ new UsernamePasswordCredentials(config.getUser(), config.getPassword()));
212
+ return credentialsProvider;
213
+ }
214
+
193
215
  private HttpRequestBase makeRequest(PluginTask task, int taskIndex)
194
216
  throws URISyntaxException, UnsupportedEncodingException {
195
- final ParamsConfig paramsConfig = (task.getQueries().isEmpty()) ?
217
+ final List<QueryConfig.Query> queries = (task.getQueries().isEmpty()) ?
196
218
  null : task.getQueries().get(taskIndex);
197
219
  if (task.getHttpMethod() == HttpMethod.GET) {
198
220
  HttpGet request = new HttpGet(task.getUrl());
199
- if (paramsConfig != null) {
221
+ if (queries != null) {
200
222
  URIBuilder builder = new URIBuilder(request.getURI());
201
- for (QueryConfig p : paramsConfig.getQueries()) {
202
- builder.addParameter(p.getName(), p.getValue());
223
+ for (QueryConfig.Query q : queries) {
224
+ for (String v : q.getValues()) {
225
+ builder.addParameter(q.getName(), v);
226
+ }
203
227
  }
204
228
  request.setURI(builder.build());
205
229
  }
206
230
  return request;
207
231
  } else if (task.getHttpMethod() == HttpMethod.POST) {
208
232
  HttpPost request = new HttpPost(task.getUrl());
209
- if (paramsConfig != null) {
233
+ if (queries != null) {
210
234
  List<NameValuePair> pairs = new ArrayList<>();
211
- for (QueryConfig p : paramsConfig.getQueries()) {
212
- pairs.add(new BasicNameValuePair(p.getName(), p.getValue()));
235
+ for (QueryConfig.Query q : queries) {
236
+ for (String v : q.getValues()) {
237
+ pairs.add(new BasicNameValuePair(q.getName(), v));
238
+ }
213
239
  }
214
240
  request.setEntity(new UrlEncodedFormEntity(pairs));
215
241
  }
@@ -21,26 +21,26 @@ public class ParamsConfig {
21
21
  return queries;
22
22
  }
23
23
 
24
- public List<ParamsConfig> expandQueries() {
25
- List<List<QueryConfig>> base = new ArrayList<>(queries.size());
24
+ public List<List<QueryConfig.Query>> expandQueries() {
25
+ List<List<QueryConfig.Query>> base = new ArrayList<>(queries.size());
26
26
  for (QueryConfig p : queries) {
27
27
  base.add(p.expand());
28
28
  }
29
29
 
30
30
  int productSize = 1;
31
31
  int baseSize = base.size();
32
- for (int i = 0; i < baseSize; productSize *= base.get(i).size(), i++);
32
+ for (int i = 0; i < baseSize; productSize *= base.get(i).size(), i++) ;
33
33
 
34
- List<ParamsConfig> expands = new ArrayList<>(productSize);
35
- for(int i = 0; i < productSize; i++) {
34
+ List<List<QueryConfig.Query>> expands = new ArrayList<>(productSize);
35
+ for (int i = 0; i < productSize; i++) {
36
36
  int j = 1;
37
- List<QueryConfig> query = new ArrayList<>();
38
- for(List<QueryConfig> list : base) {
39
- QueryConfig pc = list.get((i / j) % list.size());
37
+ List<QueryConfig.Query> query = new ArrayList<>();
38
+ for (List<QueryConfig.Query> list : base) {
39
+ QueryConfig.Query pc = list.get((i / j) % list.size());
40
40
  query.add(pc);
41
41
  j *= list.size();
42
42
  }
43
- expands.add(new ParamsConfig(query));
43
+ expands.add(query);
44
44
  }
45
45
 
46
46
  return expands;
@@ -1,8 +1,9 @@
1
1
  package org.embulk.input;
2
2
 
3
- import com.google.common.base.Objects;
4
3
  import com.fasterxml.jackson.annotation.JsonCreator;
5
4
  import com.fasterxml.jackson.annotation.JsonProperty;
5
+ import com.google.common.base.Objects;
6
+ import com.google.common.base.Optional;
6
7
 
7
8
  import java.util.ArrayList;
8
9
  import java.util.List;
@@ -10,30 +11,48 @@ import java.util.List;
10
11
  public class QueryConfig {
11
12
 
12
13
  private final String name;
13
- private final String value;
14
+ private final Optional<String> value;
15
+ private final Optional<List<String>> values;
14
16
  private final boolean expand;
15
17
 
16
18
  @JsonCreator
17
19
  public QueryConfig(
18
20
  @JsonProperty("name") String name,
19
- @JsonProperty("value") String value,
21
+ @JsonProperty("value") Optional<String> value,
22
+ @JsonProperty("values") Optional<List<String>> values,
20
23
  @JsonProperty("expand") boolean expand) {
21
24
  this.name = name;
22
25
  this.value = value;
26
+ this.values = values;
23
27
  this.expand = expand;
24
28
  }
25
29
 
26
- public List<QueryConfig> expand() {
27
- List<QueryConfig> dest;
28
- if (!expand) {
29
- dest = new ArrayList<>(1);
30
- dest.add(this);
31
- } else {
32
- List<String> expanded = BraceExpansion.expand(value);
33
- dest = new ArrayList<>(expanded.size());
34
- for(String s : expanded) {
35
- dest.add(new QueryConfig(name, s, false));
30
+ public List<Query> expand() {
31
+ List<Query> dest;
32
+ if (value.isPresent()) {
33
+ if (expand) {
34
+ List<String> expanded = BraceExpansion.expand(value.get());
35
+ dest = new ArrayList<>(expanded.size());
36
+ for (String s : expanded) {
37
+ dest.add(new Query(name, s));
38
+ }
39
+ } else {
40
+ dest = new ArrayList<>(1);
41
+ dest.add(new Query(name, value.get()));
36
42
  }
43
+ } else if (values.isPresent()) {
44
+ if (expand) {
45
+ dest = new ArrayList<>(values.get().size());
46
+ for (String s : values.get()) {
47
+ dest.add(new Query(name, s));
48
+ }
49
+ } else {
50
+ dest = new ArrayList<>(1);
51
+ final String[] valueArr = values.get().toArray(new String[values.get().size()]);
52
+ dest.add(new Query(name, valueArr));
53
+ }
54
+ } else {
55
+ throw new IllegalArgumentException("value or values must be specified to 'params'");
37
56
  }
38
57
  return dest;
39
58
  }
@@ -44,7 +63,7 @@ public class QueryConfig {
44
63
  }
45
64
 
46
65
  @JsonProperty("value")
47
- public String getValue() {
66
+ public Optional<String> getValue() {
48
67
  return value;
49
68
  }
50
69
 
@@ -78,6 +97,26 @@ public class QueryConfig {
78
97
  getName(), getValue(), isExpand());
79
98
  }
80
99
 
100
+ public static class Query {
101
+ private final String name;
102
+ private final String[] values;
103
+
104
+ public Query(
105
+ @JsonProperty("name") String name,
106
+ @JsonProperty("values") String... values) {
107
+ this.name = name;
108
+ this.values = values;
109
+ }
110
+
111
+ public String getName() {
112
+ return name;
113
+ }
114
+
115
+ public String[] getValues() {
116
+ return values;
117
+ }
118
+ }
119
+
81
120
  private static class BraceExpansion {
82
121
 
83
122
  public static List<String> expand(String s) {
@@ -112,7 +151,9 @@ public class QueryConfig {
112
151
  if (suffix.length() > 0) {
113
152
  expandRecursive(prefix + s, suffix, "", dest);
114
153
  } else {
115
- dest.add(String.format("%s%s%s", prefix, s, suffix));
154
+ final String out = String.format("%s%s%s", prefix, s, suffix).
155
+ replaceAll("[\\\\]{2}", "\\").replaceAll("[\\\\]([,}{])", "$1");
156
+ dest.add(out);
116
157
  }
117
158
  } else {
118
159
  for (String m : sb.substring(i1 + 1, i2).split("\u0000", -1)) {
@@ -31,14 +31,14 @@ public class RetryHandler extends DefaultHttpRequestRetryHandler
31
31
  public boolean retryRequest(final IOException exception,
32
32
  final int executionCount, final HttpContext context)
33
33
  {
34
- final boolean isRertriable = super.retryRequest(exception, executionCount, context);
35
- if (isRertriable) {
34
+ final boolean isRetriable = super.retryRequest(exception, executionCount, context);
35
+ if (isRetriable) {
36
36
  try {
37
37
  logger.info(String.format("Sleep %d msec before retry", interval));
38
38
  Thread.sleep(interval);
39
39
  } catch (InterruptedException e) {}
40
40
  }
41
- return isRertriable;
41
+ return isRetriable;
42
42
  }
43
43
 
44
44
  }
@@ -0,0 +1,101 @@
1
+ package org.embulk.input;
2
+
3
+ import com.google.common.base.Optional;
4
+ import com.google.common.collect.Lists;
5
+ import org.junit.Test;
6
+
7
+ import java.util.List;
8
+
9
+ import static org.junit.Assert.assertEquals;
10
+
11
+ public class TestParamsConfig {
12
+
13
+ @Test
14
+ public void testUnexpandQueriesSinglePair() throws Exception {
15
+ Optional<List<String>> nullValues = Optional.absent();
16
+ QueryConfig q1 = new QueryConfig("test1", Optional.of("awasome1"), nullValues, false);
17
+ QueryConfig q2 = new QueryConfig("test2", Optional.of("awasome2"), nullValues, false);
18
+ ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
19
+ List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
20
+ assertEquals(dest.size(), 1);
21
+ assertEquals(dest.get(0).size(), 2);
22
+ assertEquals(dest.get(0).get(0).getName(), "test1");
23
+ assertEquals(dest.get(0).get(0).getValues()[0], "awasome1");
24
+ assertEquals(dest.get(0).get(1).getName(), "test2");
25
+ assertEquals(dest.get(0).get(1).getValues()[0], "awasome2");
26
+ }
27
+
28
+ @Test
29
+ public void testUnexpandQueriesExpandPair() throws Exception {
30
+ Optional<String> nullValue = Optional.absent();
31
+ List<String> values1 = Lists.newArrayList("a", "b");
32
+ List<String> values2 = Lists.newArrayList("c", "d");
33
+
34
+ QueryConfig q1 = new QueryConfig("test1", nullValue, Optional.of(values1), false);
35
+ QueryConfig q2 = new QueryConfig("test2", nullValue, Optional.of(values2), false);
36
+
37
+ ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
38
+ List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
39
+ assertEquals(dest.size(), 1);
40
+ assertEquals(dest.get(0).size(), 2);
41
+ assertEquals(dest.get(0).get(0).getName(), "test1");
42
+ assertEquals(dest.get(0).get(0).getValues()[0], "a");
43
+ assertEquals(dest.get(0).get(0).getValues()[1], "b");
44
+ assertEquals(dest.get(0).get(1).getName(), "test2");
45
+ assertEquals(dest.get(0).get(1).getValues()[0], "c");
46
+ assertEquals(dest.get(0).get(1).getValues()[1], "d");
47
+ }
48
+
49
+ @Test
50
+ public void testExpandQueriesSinglePair() throws Exception {
51
+ Optional<List<String>> nullValues = Optional.absent();
52
+ QueryConfig q1 = new QueryConfig("test1", Optional.of("awasome1"), nullValues, true);
53
+ QueryConfig q2 = new QueryConfig("test2", Optional.of("awasome2"), nullValues, true);
54
+ ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
55
+ List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
56
+ assertEquals(dest.size(), 1);
57
+ assertEquals(dest.get(0).size(), 2);
58
+ assertEquals(dest.get(0).get(0).getName(), "test1");
59
+ assertEquals(dest.get(0).get(0).getValues()[0], "awasome1");
60
+ assertEquals(dest.get(0).get(1).getName(), "test2");
61
+ assertEquals(dest.get(0).get(1).getValues()[0], "awasome2");
62
+ }
63
+
64
+ @Test
65
+ public void testExpandQueriesExpandPair() throws Exception {
66
+ Optional<String> nullValue = Optional.absent();
67
+ List<String> values1 = Lists.newArrayList("a", "b");
68
+ List<String> values2 = Lists.newArrayList("c", "d");
69
+
70
+ QueryConfig q1 = new QueryConfig("test1", nullValue, Optional.of(values1), true);
71
+ QueryConfig q2 = new QueryConfig("test2", nullValue, Optional.of(values2), true);
72
+
73
+ ParamsConfig paramsConfig = new ParamsConfig(Lists.newArrayList(q1, q2));
74
+ List<List<QueryConfig.Query>> dest = paramsConfig.expandQueries();
75
+ assertEquals(dest.size(), 4);
76
+
77
+ assertEquals(dest.get(0).size(), 2);
78
+ assertEquals(dest.get(0).get(0).getName(), "test1");
79
+ assertEquals(dest.get(0).get(0).getValues()[0], "a");
80
+ assertEquals(dest.get(0).get(1).getName(), "test2");
81
+ assertEquals(dest.get(0).get(1).getValues()[0], "c");
82
+
83
+ assertEquals(dest.get(1).size(), 2);
84
+ assertEquals(dest.get(1).get(0).getName(), "test1");
85
+ assertEquals(dest.get(1).get(0).getValues()[0], "b");
86
+ assertEquals(dest.get(1).get(1).getName(), "test2");
87
+ assertEquals(dest.get(1).get(1).getValues()[0], "c");
88
+
89
+ assertEquals(dest.get(2).size(), 2);
90
+ assertEquals(dest.get(2).get(0).getName(), "test1");
91
+ assertEquals(dest.get(2).get(0).getValues()[0], "a");
92
+ assertEquals(dest.get(2).get(1).getName(), "test2");
93
+ assertEquals(dest.get(2).get(1).getValues()[0], "d");
94
+
95
+ assertEquals(dest.get(3).size(), 2);
96
+ assertEquals(dest.get(3).get(0).getName(), "test1");
97
+ assertEquals(dest.get(3).get(0).getValues()[0], "b");
98
+ assertEquals(dest.get(3).get(1).getName(), "test2");
99
+ assertEquals(dest.get(3).get(1).getValues()[0], "d");
100
+ }
101
+ }
@@ -0,0 +1,125 @@
1
+ package org.embulk.input;
2
+
3
+ import com.google.common.base.Optional;
4
+ import com.google.common.collect.Lists;
5
+ import org.junit.Test;
6
+
7
+ import java.util.List;
8
+
9
+ import static org.junit.Assert.assertEquals;
10
+
11
+ public class TestQueryConfig {
12
+
13
+ @Test
14
+ public void testUnexpandSingleValue() throws Exception {
15
+ Optional<List<String>> nullValues = Optional.absent();
16
+ QueryConfig config = new QueryConfig("test", Optional.of("awesome"), nullValues, false);
17
+ List<QueryConfig.Query> dest = config.expand();
18
+ assertEquals(dest.size(), 1);
19
+ assertEquals(dest.get(0).getName(), "test");
20
+ assertEquals(dest.get(0).getValues().length, 1);
21
+ assertEquals(dest.get(0).getValues()[0], "awesome");
22
+ }
23
+
24
+ @Test
25
+ public void testUnexpandMultiValue() throws Exception {
26
+ Optional<String> nullValue = Optional.absent();
27
+ List<String> values = Lists.newArrayList("a", "b", "c");
28
+ QueryConfig config = new QueryConfig("test", nullValue, Optional.of(values), false);
29
+ List<QueryConfig.Query> dest = config.expand();
30
+ assertEquals(dest.size(), 1);
31
+ assertEquals(dest.get(0).getName(), "test");
32
+
33
+ assertEquals(dest.get(0).getValues().length, 3);
34
+ assertEquals(dest.get(0).getValues()[0], "a");
35
+ assertEquals(dest.get(0).getValues()[1], "b");
36
+ assertEquals(dest.get(0).getValues()[2], "c");
37
+ }
38
+
39
+ @Test
40
+ public void testExpandSingleValue() throws Exception {
41
+ Optional<List<String>> nullValues = Optional.absent();
42
+ QueryConfig config = new QueryConfig("test", Optional.of("awesome"), nullValues, true);
43
+ List<QueryConfig.Query> dest = config.expand();
44
+ assertEquals(dest.size(), 1);
45
+ assertEquals(dest.get(0).getName(), "test");
46
+ assertEquals(dest.get(0).getValues()[0], "awesome");
47
+ }
48
+
49
+ @Test
50
+ public void testExpandMultiValue() throws Exception {
51
+ Optional<String> nullValue = Optional.absent();
52
+ List<String> values = Lists.newArrayList("a", "b", "c");
53
+ QueryConfig config = new QueryConfig("test", nullValue, Optional.of(values), true);
54
+ List<QueryConfig.Query> dest = config.expand();
55
+ assertEquals(dest.size(), 3);
56
+ assertEquals(dest.get(0).getName(), "test");
57
+ assertEquals(dest.get(0).getValues().length, 1);
58
+ assertEquals(dest.get(0).getValues()[0], "a");
59
+
60
+ assertEquals(dest.get(1).getValues().length, 1);
61
+ assertEquals(dest.get(1).getName(), "test");
62
+ assertEquals(dest.get(1).getValues()[0], "b");
63
+
64
+ assertEquals(dest.get(2).getValues().length, 1);
65
+ assertEquals(dest.get(2).getName(), "test");
66
+ assertEquals(dest.get(2).getValues()[0], "c");
67
+ }
68
+
69
+ @Test(expected = IllegalArgumentException.class)
70
+ public void testExpandRaisesExceptionWhenBothValuesAreNull() throws Exception {
71
+ Optional<List<String>> nullValues = Optional.absent();
72
+ Optional<String> nullValue = Optional.absent();
73
+ QueryConfig config = new QueryConfig("test", nullValue, nullValues, false);
74
+ config.expand();
75
+ }
76
+
77
+ @Test
78
+ public void testUnExpandBrace() throws Exception {
79
+ Optional<List<String>> nullValues = Optional.absent();
80
+ QueryConfig config = new QueryConfig("test", Optional.of("{awesome1,awesome2,awesome3}"), nullValues, false);
81
+ List<QueryConfig.Query> dest = config.expand();
82
+ assertEquals(dest.size(), 1);
83
+ assertEquals(dest.get(0).getName(), "test");
84
+ assertEquals(dest.get(0).getValues().length, 1);
85
+ assertEquals(dest.get(0).getValues()[0], "{awesome1,awesome2,awesome3}");
86
+ }
87
+
88
+ @Test
89
+ public void testExpandBrace() throws Exception {
90
+ Optional<List<String>> nullValues = Optional.absent();
91
+ QueryConfig config = new QueryConfig("test", Optional.of("{awesome1,awesome2,awesome3}"), nullValues, true);
92
+ List<QueryConfig.Query> dest = config.expand();
93
+ assertEquals(dest.size(), 3);
94
+ assertEquals(dest.get(0).getName(), "test");
95
+ assertEquals(dest.get(0).getValues().length, 1);
96
+ assertEquals(dest.get(0).getValues()[0], "awesome1");
97
+ assertEquals(dest.get(1).getName(), "test");
98
+
99
+ assertEquals(dest.get(1).getValues().length, 1);
100
+ assertEquals(dest.get(1).getValues()[0], "awesome2");
101
+
102
+ assertEquals(dest.get(2).getValues().length, 1);
103
+ assertEquals(dest.get(2).getName(), "test");
104
+ assertEquals(dest.get(2).getValues()[0], "awesome3");
105
+ }
106
+
107
+ @Test
108
+ public void testExpandEscapedBrace() throws Exception {
109
+ Optional<List<String>> nullValues = Optional.absent();
110
+ QueryConfig config = new QueryConfig("test", Optional.of("{awe\\,some1,awes\\{ome2,awes\\}ome3}"), nullValues, true);
111
+ List<QueryConfig.Query> dest = config.expand();
112
+ assertEquals(dest.get(0).getName(), "test");
113
+ assertEquals(dest.get(0).getValues().length, 1);
114
+ assertEquals(dest.get(0).getValues()[0], "awe,some1");
115
+
116
+ assertEquals(dest.get(1).getName(), "test");
117
+ assertEquals(dest.get(1).getValues().length, 1);
118
+ assertEquals(dest.get(1).getValues()[0], "awes{ome2");
119
+
120
+ assertEquals(dest.get(2).getName(), "test");
121
+ assertEquals(dest.get(2).getValues().length, 1);
122
+ assertEquals(dest.get(2).getValues()[0], "awes}ome3");
123
+ }
124
+
125
+ }
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takuma kanari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-12 00:00:00.000000000 Z
11
+ date: 2015-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
14
  requirement: !ruby/object:Gem::Requirement
21
15
  requirements:
22
16
  - - ~>
23
17
  - !ruby/object:Gem::Version
24
18
  version: '1.0'
19
+ name: bundler
25
20
  prerelease: false
26
21
  type: :development
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
- - - '>='
24
+ - - ~>
32
25
  - !ruby/object:Gem::Version
33
- version: '10.0'
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
34
28
  requirement: !ruby/object:Gem::Requirement
35
29
  requirements:
36
30
  - - '>='
37
31
  - !ruby/object:Gem::Version
38
32
  version: '10.0'
33
+ name: rake
39
34
  prerelease: false
40
35
  type: :development
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
41
  description: Fetch data via http
42
42
  email:
43
43
  - chemtrails.t@gmail.com
@@ -55,16 +55,19 @@ files:
55
55
  - gradlew
56
56
  - gradlew.bat
57
57
  - lib/embulk/input/http.rb
58
+ - src/main/java/org/embulk/input/BasicAuthConfig.java
58
59
  - src/main/java/org/embulk/input/HttpInputPlugin.java
59
60
  - src/main/java/org/embulk/input/ParamsConfig.java
60
61
  - src/main/java/org/embulk/input/QueryConfig.java
61
62
  - src/main/java/org/embulk/input/RetryHandler.java
62
63
  - src/test/java/org/embulk/input/TestHttpInputPlugin.java
63
- - classpath/embulk-input-http-0.0.5.jar
64
+ - src/test/java/org/embulk/input/TestParamsConfig.java
65
+ - src/test/java/org/embulk/input/TestQueryConfig.java
64
66
  - classpath/httpclient-4.4.jar
65
67
  - classpath/commons-logging-1.2.jar
66
68
  - classpath/httpcore-4.4.jar
67
69
  - classpath/commons-codec-1.9.jar
70
+ - classpath/embulk-input-http-0.0.6.jar
68
71
  homepage: https://github.com/takumakanari/embulk-input-http
69
72
  licenses:
70
73
  - MIT