embulk 0.8.24 → 0.8.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/build.gradle +1 -1
- data/embulk-cli/src/main/bat/selfrun.bat +4 -1
- data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +1 -1
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +6 -2
- data/embulk-core/src/main/java/org/embulk/plugin/DefaultPluginType.java +50 -0
- data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +5 -1
- data/embulk-core/src/main/java/org/embulk/plugin/MavenPluginType.java +97 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +43 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +95 -21
- data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +45 -4
- data/embulk-core/src/test/java/org/embulk/plugin/TestPluginTypeSerDe.java +50 -0
- data/embulk-docs/src/release.rst +1 -0
- data/embulk-docs/src/release/release-0.8.25.rst +14 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +5 -5
- data/lib/embulk/command/embulk_bundle.rb +3 -2
- data/lib/embulk/version.rb +1 -1
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbfb023e1126cdf0cfda470fb03e10c4f6182dcf
|
4
|
+
data.tar.gz: 1be1cd41399316a5bc33bfe7535a93cb3cf9c21f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7a985e9c29d4b3e834cd6f38c3b549ccb2972648eb830559fb792f9d3070dd04a0f084d6e7420638f840bf57a436a687409f1ce46c6a5736f35d2eaa6c58f95
|
7
|
+
data.tar.gz: 88a1578919f3c3de6cad9b3626c48787e23f6244a798a53cac75ce4ac409a43308bb5f94409e0bf9c5fc946333738dc2030a8378a69239fe74b8a767a92ab6d1
|
data/build.gradle
CHANGED
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
setlocal
|
4
4
|
|
5
|
+
rem Do not use %0 to identify the JAR (bat) file.
|
6
|
+
rem %0 is just "embulk" when run by just "> embulk" while %0 is "embulk.bat" when run by "> embulk.bat".
|
5
7
|
set this=%~f0
|
8
|
+
|
6
9
|
set java_args=
|
7
10
|
set jruby_args=
|
8
11
|
set default_optimize=
|
@@ -76,7 +79,7 @@ endlocal && set BUNDLE_GEMFILE=%bundle_gemfile%
|
|
76
79
|
setlocal enabledelayedexpansion
|
77
80
|
|
78
81
|
if not defined EMBULK_BUNDLE_PATH (
|
79
|
-
for /f "delims=" %%w in ('java -cp %
|
82
|
+
for /f "delims=" %%w in ('java -cp %this% org.jruby.Main -e "print RbConfig::CONFIG['ruby_version']"') do set ruby_version=%%w
|
80
83
|
set gem_home=%USERPROFILE%\.embulk\jruby\!ruby_version!
|
81
84
|
) else (
|
82
85
|
set gem_home=
|
@@ -528,7 +528,7 @@ public class BulkLoader
|
|
528
528
|
private ExecutorPlugin newExecutorPlugin(BulkLoaderTask task)
|
529
529
|
{
|
530
530
|
return Exec.newPlugin(ExecutorPlugin.class,
|
531
|
-
task.getExecConfig().get(PluginType.class, "type",
|
531
|
+
task.getExecConfig().get(PluginType.class, "type", PluginType.LOCAL));
|
532
532
|
}
|
533
533
|
|
534
534
|
private ExecutionResult doRun(ConfigSource config)
|
@@ -36,9 +36,13 @@ public class JRubyPluginSource
|
|
36
36
|
|
37
37
|
public <T> T newPlugin(Class<T> iface, PluginType type) throws PluginSourceNotMatchException
|
38
38
|
{
|
39
|
-
|
39
|
+
if (type.getSourceType() != PluginSource.Type.DEFAULT) {
|
40
|
+
throw new PluginSourceNotMatchException();
|
41
|
+
}
|
42
|
+
|
43
|
+
final String name = type.getName();
|
40
44
|
|
41
|
-
String category;
|
45
|
+
final String category;
|
42
46
|
if (InputPlugin.class.isAssignableFrom(iface)) {
|
43
47
|
category = "input";
|
44
48
|
} else if (OutputPlugin.class.isAssignableFrom(iface)) {
|
@@ -0,0 +1,50 @@
|
|
1
|
+
package org.embulk.plugin;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.annotation.JsonValue;
|
4
|
+
import java.util.Objects;
|
5
|
+
|
6
|
+
public final class DefaultPluginType
|
7
|
+
extends PluginType
|
8
|
+
{
|
9
|
+
private DefaultPluginType(final String name)
|
10
|
+
{
|
11
|
+
super("default", name);
|
12
|
+
}
|
13
|
+
|
14
|
+
public static PluginType create(final String name)
|
15
|
+
{
|
16
|
+
if (name == null) {
|
17
|
+
throw new NullPointerException("name must not be null");
|
18
|
+
}
|
19
|
+
return new DefaultPluginType(name);
|
20
|
+
}
|
21
|
+
|
22
|
+
@JsonValue
|
23
|
+
public final String getJsonValue()
|
24
|
+
{
|
25
|
+
return this.getName();
|
26
|
+
}
|
27
|
+
|
28
|
+
@Override
|
29
|
+
public final int hashCode()
|
30
|
+
{
|
31
|
+
return Objects.hash(getSourceType(), getName());
|
32
|
+
}
|
33
|
+
|
34
|
+
@Override
|
35
|
+
public final boolean equals(final Object objectOther)
|
36
|
+
{
|
37
|
+
if (!(objectOther instanceof DefaultPluginType)) {
|
38
|
+
return false;
|
39
|
+
}
|
40
|
+
final DefaultPluginType other = (DefaultPluginType) objectOther;
|
41
|
+
return (this.getSourceType().equals(other.getSourceType()) &&
|
42
|
+
this.getName().equals(other.getName()));
|
43
|
+
}
|
44
|
+
|
45
|
+
@Override
|
46
|
+
public final String toString()
|
47
|
+
{
|
48
|
+
return this.getName();
|
49
|
+
}
|
50
|
+
}
|
@@ -44,7 +44,11 @@ public class InjectedPluginSource
|
|
44
44
|
|
45
45
|
public <T> T newPlugin(Class<T> iface, PluginType type) throws PluginSourceNotMatchException
|
46
46
|
{
|
47
|
-
|
47
|
+
if (type.getSourceType() != PluginSource.Type.DEFAULT) {
|
48
|
+
throw new PluginSourceNotMatchException();
|
49
|
+
}
|
50
|
+
|
51
|
+
final String name = type.getName();
|
48
52
|
try {
|
49
53
|
@SuppressWarnings("unchecked")
|
50
54
|
PluginFactory<T> factory = (PluginFactory<T>) injector.getInstance(
|
@@ -0,0 +1,97 @@
|
|
1
|
+
package org.embulk.plugin;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
4
|
+
import com.fasterxml.jackson.annotation.JsonValue;
|
5
|
+
import java.util.Collections;
|
6
|
+
import java.util.HashMap;
|
7
|
+
import java.util.Map;
|
8
|
+
import java.util.Objects;
|
9
|
+
|
10
|
+
public final class MavenPluginType
|
11
|
+
extends PluginType
|
12
|
+
{
|
13
|
+
private MavenPluginType(final String name, final String group, final String version)
|
14
|
+
{
|
15
|
+
super("maven", name);
|
16
|
+
this.group = group;
|
17
|
+
this.version = version;
|
18
|
+
|
19
|
+
final StringBuilder fullNameBuilder = new StringBuilder();
|
20
|
+
fullNameBuilder.append("maven:");
|
21
|
+
fullNameBuilder.append(group);
|
22
|
+
fullNameBuilder.append(":");
|
23
|
+
fullNameBuilder.append(name);
|
24
|
+
fullNameBuilder.append(":");
|
25
|
+
fullNameBuilder.append(version);
|
26
|
+
this.fullName = fullNameBuilder.toString();
|
27
|
+
|
28
|
+
final HashMap<String, String> fullMapMutable = new HashMap<String, String>();
|
29
|
+
fullMapMutable.put("source", "maven");
|
30
|
+
fullMapMutable.put("name", name);
|
31
|
+
fullMapMutable.put("group", group);
|
32
|
+
fullMapMutable.put("version", version);
|
33
|
+
this.fullMap = Collections.unmodifiableMap(fullMapMutable);
|
34
|
+
}
|
35
|
+
|
36
|
+
public static MavenPluginType create(final String name, final String group, final String version)
|
37
|
+
{
|
38
|
+
if (name == null) {
|
39
|
+
throw new NullPointerException("\"name\" must not present.");
|
40
|
+
}
|
41
|
+
return new MavenPluginType(name, group, version);
|
42
|
+
}
|
43
|
+
|
44
|
+
@JsonValue
|
45
|
+
public final Map<String, String> getJsonValue()
|
46
|
+
{
|
47
|
+
return this.fullMap;
|
48
|
+
}
|
49
|
+
|
50
|
+
@JsonProperty("group")
|
51
|
+
public final String getGroup()
|
52
|
+
{
|
53
|
+
return this.group;
|
54
|
+
}
|
55
|
+
|
56
|
+
@JsonProperty("version")
|
57
|
+
public final String getVersion()
|
58
|
+
{
|
59
|
+
return this.version;
|
60
|
+
}
|
61
|
+
|
62
|
+
public final String getFullName()
|
63
|
+
{
|
64
|
+
return this.fullName;
|
65
|
+
}
|
66
|
+
|
67
|
+
@Override
|
68
|
+
public final int hashCode()
|
69
|
+
{
|
70
|
+
return Objects.hash(getSourceType(), getName(), this.group, this.version);
|
71
|
+
}
|
72
|
+
|
73
|
+
@Override
|
74
|
+
public boolean equals(Object objectOther)
|
75
|
+
{
|
76
|
+
if (!(objectOther instanceof MavenPluginType)) {
|
77
|
+
return false;
|
78
|
+
}
|
79
|
+
MavenPluginType other = (MavenPluginType) objectOther;
|
80
|
+
return (this.getSourceType().equals(other.getSourceType()) &&
|
81
|
+
this.getName().equals(other.getName()) &&
|
82
|
+
this.getGroup().equals(other.getGroup()) &&
|
83
|
+
this.getVersion().equals(other.getVersion()));
|
84
|
+
}
|
85
|
+
|
86
|
+
@JsonValue
|
87
|
+
@Override
|
88
|
+
public String toString()
|
89
|
+
{
|
90
|
+
return this.fullName;
|
91
|
+
}
|
92
|
+
|
93
|
+
private final String group;
|
94
|
+
private final String version;
|
95
|
+
private final String fullName;
|
96
|
+
private final Map<String, String> fullMap;
|
97
|
+
}
|
@@ -1,6 +1,49 @@
|
|
1
1
|
package org.embulk.plugin;
|
2
2
|
|
3
|
+
import java.util.Collections;
|
4
|
+
import java.util.HashMap;
|
5
|
+
import java.util.Map;
|
6
|
+
|
3
7
|
public interface PluginSource
|
4
8
|
{
|
5
9
|
<T> T newPlugin(Class<T> iface, PluginType type) throws PluginSourceNotMatchException;
|
10
|
+
|
11
|
+
public enum Type
|
12
|
+
{
|
13
|
+
DEFAULT("default"), // DEFAULT includes InjectedPluginSource and JRubyPluginSource.
|
14
|
+
MAVEN("maven"),
|
15
|
+
;
|
16
|
+
|
17
|
+
private Type(final String sourceTypeName)
|
18
|
+
{
|
19
|
+
this.sourceTypeName = sourceTypeName;
|
20
|
+
}
|
21
|
+
|
22
|
+
public static Type of(final String sourceTypeName)
|
23
|
+
{
|
24
|
+
final Type found = MAP_FROM_STRING.get(sourceTypeName);
|
25
|
+
if (found == null) {
|
26
|
+
throw new IllegalArgumentException("\"" + sourceTypeName + "\" is not a plugin source.");
|
27
|
+
}
|
28
|
+
return found;
|
29
|
+
}
|
30
|
+
|
31
|
+
@Override
|
32
|
+
public final String toString()
|
33
|
+
{
|
34
|
+
return this.sourceTypeName;
|
35
|
+
}
|
36
|
+
|
37
|
+
static
|
38
|
+
{
|
39
|
+
final HashMap<String, Type> mapToBuild = new HashMap<String, Type>();
|
40
|
+
for (Type type : values()) {
|
41
|
+
mapToBuild.put(type.sourceTypeName, type);
|
42
|
+
}
|
43
|
+
MAP_FROM_STRING = Collections.unmodifiableMap(mapToBuild);
|
44
|
+
}
|
45
|
+
|
46
|
+
private static final Map<String, Type> MAP_FROM_STRING;
|
47
|
+
private final String sourceTypeName;
|
48
|
+
}
|
6
49
|
}
|
@@ -1,47 +1,121 @@
|
|
1
1
|
package org.embulk.plugin;
|
2
2
|
|
3
3
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
4
|
-
import com.fasterxml.jackson.annotation.
|
4
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
5
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
6
|
+
import com.fasterxml.jackson.databind.node.ContainerNode;
|
7
|
+
import com.fasterxml.jackson.databind.node.ObjectNode;
|
8
|
+
import com.fasterxml.jackson.databind.node.TextNode;
|
9
|
+
import com.google.common.annotations.VisibleForTesting;
|
10
|
+
import java.util.HashMap;
|
11
|
+
import java.util.Iterator;
|
12
|
+
import java.util.Map;
|
5
13
|
|
6
|
-
public class PluginType
|
14
|
+
public abstract class PluginType
|
7
15
|
{
|
8
|
-
|
16
|
+
public static final PluginType LOCAL = DefaultPluginType.create("local");
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Constructs {@code PluginType}.
|
20
|
+
*
|
21
|
+
* The constructor is {@code protected} to be called from subclasses, e.g. {@code DefaultPluginType}.
|
22
|
+
*/
|
23
|
+
protected PluginType(final String source, final String name)
|
24
|
+
{
|
25
|
+
this.sourceType = PluginSource.Type.of(source);
|
26
|
+
this.name = name;
|
27
|
+
}
|
9
28
|
|
10
|
-
// TODO accept isObject()/ObjectNode for complex PluginSource
|
11
29
|
@JsonCreator
|
12
|
-
|
30
|
+
private static PluginType create(final JsonNode typeJson)
|
31
|
+
{
|
32
|
+
if (typeJson.isTextual()) {
|
33
|
+
return createFromString(((TextNode) typeJson).textValue());
|
34
|
+
}
|
35
|
+
else if (typeJson.isObject()) {
|
36
|
+
final HashMap<String, String> stringMap = new HashMap<String, String>();
|
37
|
+
final ObjectNode typeObject = (ObjectNode) typeJson;
|
38
|
+
final Iterator<Map.Entry<String, JsonNode>> fieldIterator = typeObject.fields();
|
39
|
+
while (fieldIterator.hasNext()) {
|
40
|
+
final Map.Entry<String, JsonNode> field = fieldIterator.next();
|
41
|
+
final JsonNode fieldValue = field.getValue();
|
42
|
+
if (fieldValue instanceof ContainerNode) {
|
43
|
+
throw new IllegalArgumentException("\"type\" must be a string or a 1-depth mapping.");
|
44
|
+
}
|
45
|
+
stringMap.put(field.getKey(), fieldValue.textValue());
|
46
|
+
}
|
47
|
+
return createFromStringMap(stringMap);
|
48
|
+
}
|
49
|
+
else {
|
50
|
+
throw new IllegalArgumentException("\"type\" must be a string or a 1-depth mapping.");
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
private static PluginType createFromString(String name)
|
13
55
|
{
|
14
56
|
if (name == null) {
|
15
57
|
throw new NullPointerException("name must not be null");
|
16
58
|
}
|
17
|
-
|
59
|
+
return DefaultPluginType.create(name);
|
18
60
|
}
|
19
61
|
|
20
|
-
|
21
|
-
public String getName()
|
62
|
+
private static PluginType createFromStringMap(Map<String, String> stringMap)
|
22
63
|
{
|
23
|
-
|
64
|
+
final PluginSource.Type sourceType;
|
65
|
+
if (stringMap.containsKey("source")) {
|
66
|
+
sourceType = PluginSource.Type.of(stringMap.get("source"));
|
67
|
+
}
|
68
|
+
else {
|
69
|
+
sourceType = PluginSource.Type.DEFAULT;
|
70
|
+
}
|
71
|
+
|
72
|
+
switch (sourceType) {
|
73
|
+
case DEFAULT:
|
74
|
+
{
|
75
|
+
final String name = stringMap.get("name");
|
76
|
+
return createFromString(name);
|
77
|
+
}
|
78
|
+
case MAVEN:
|
79
|
+
{
|
80
|
+
final String name = stringMap.get("name");
|
81
|
+
final String group = stringMap.get("group");
|
82
|
+
final String version = stringMap.get("version");
|
83
|
+
return MavenPluginType.create(name, group, version);
|
84
|
+
}
|
85
|
+
default:
|
86
|
+
throw new IllegalArgumentException("\"source\" must be one of: [\"default\", \"maven\"]");
|
87
|
+
}
|
24
88
|
}
|
25
89
|
|
26
|
-
@
|
27
|
-
|
90
|
+
@VisibleForTesting
|
91
|
+
static PluginType createFromStringForTesting(final String name)
|
28
92
|
{
|
29
|
-
return name
|
93
|
+
return createFromString(name);
|
30
94
|
}
|
31
95
|
|
32
|
-
@
|
33
|
-
|
96
|
+
@VisibleForTesting
|
97
|
+
static PluginType createFromStringMapForTesting(final Map<String, String> stringMap)
|
34
98
|
{
|
35
|
-
|
36
|
-
return false;
|
37
|
-
}
|
38
|
-
PluginType o = (PluginType) other;
|
39
|
-
return name.equals(o.name);
|
99
|
+
return createFromStringMap(stringMap);
|
40
100
|
}
|
41
101
|
|
42
|
-
|
43
|
-
|
102
|
+
public final PluginSource.Type getSourceType()
|
103
|
+
{
|
104
|
+
return sourceType;
|
105
|
+
}
|
106
|
+
|
107
|
+
@JsonProperty("source")
|
108
|
+
public final String getSourceName()
|
109
|
+
{
|
110
|
+
return sourceType.toString();
|
111
|
+
}
|
112
|
+
|
113
|
+
@JsonProperty("name")
|
114
|
+
public final String getName()
|
44
115
|
{
|
45
116
|
return name;
|
46
117
|
}
|
118
|
+
|
119
|
+
private final PluginSource.Type sourceType;
|
120
|
+
private final String name;
|
47
121
|
}
|
@@ -1,7 +1,10 @@
|
|
1
1
|
package org.embulk.plugin;
|
2
2
|
|
3
3
|
import static org.junit.Assert.assertEquals;
|
4
|
+
import static org.junit.Assert.assertFalse;
|
5
|
+
import static org.junit.Assert.assertTrue;
|
4
6
|
|
7
|
+
import java.util.HashMap;
|
5
8
|
import org.junit.Test;
|
6
9
|
|
7
10
|
public class TestPluginType
|
@@ -9,10 +12,48 @@ public class TestPluginType
|
|
9
12
|
@Test
|
10
13
|
public void testEquals()
|
11
14
|
{
|
12
|
-
PluginType type =
|
13
|
-
|
15
|
+
PluginType type = PluginType.createFromStringForTesting("a");
|
16
|
+
assertTrue(type instanceof DefaultPluginType);
|
17
|
+
assertEquals(PluginSource.Type.DEFAULT, type.getSourceType());
|
18
|
+
assertTrue(type.equals(type));
|
14
19
|
|
15
|
-
|
16
|
-
|
20
|
+
assertTrue(type.equals(PluginType.createFromStringForTesting("a")));
|
21
|
+
assertFalse(type.equals(PluginType.createFromStringForTesting("b")));
|
22
|
+
}
|
23
|
+
|
24
|
+
@Test
|
25
|
+
public void testMapping1()
|
26
|
+
{
|
27
|
+
HashMap<String, String> mapping = new HashMap<String, String>();
|
28
|
+
mapping.put("source", "default");
|
29
|
+
mapping.put("name", "c");
|
30
|
+
|
31
|
+
PluginType type = PluginType.createFromStringMapForTesting(mapping);
|
32
|
+
assertTrue(type instanceof DefaultPluginType);
|
33
|
+
assertEquals(PluginSource.Type.DEFAULT, type.getSourceType());
|
34
|
+
assertTrue(type.equals(type));
|
35
|
+
|
36
|
+
assertTrue(type.equals(PluginType.createFromStringForTesting("c")));
|
37
|
+
assertFalse(type.equals(PluginType.createFromStringForTesting("d")));
|
38
|
+
}
|
39
|
+
|
40
|
+
@Test
|
41
|
+
public void testMapping2()
|
42
|
+
{
|
43
|
+
HashMap<String, String> mapping = new HashMap<String, String>();
|
44
|
+
mapping.put("source", "maven");
|
45
|
+
mapping.put("name", "e");
|
46
|
+
mapping.put("group", "org.embulk.foobar");
|
47
|
+
mapping.put("version", "0.1.2");
|
48
|
+
|
49
|
+
PluginType type = PluginType.createFromStringMapForTesting(mapping);
|
50
|
+
assertTrue(type instanceof MavenPluginType);
|
51
|
+
assertEquals(PluginSource.Type.MAVEN, type.getSourceType());
|
52
|
+
MavenPluginType mavenType = (MavenPluginType) type;
|
53
|
+
assertTrue(mavenType.equals(mavenType));
|
54
|
+
assertEquals("e", mavenType.getName());
|
55
|
+
assertEquals("org.embulk.foobar", mavenType.getGroup());
|
56
|
+
assertEquals("0.1.2", mavenType.getVersion());
|
57
|
+
assertEquals("maven:org.embulk.foobar:e:0.1.2", mavenType.getFullName());
|
17
58
|
}
|
18
59
|
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
package org.embulk.plugin;
|
2
|
+
|
3
|
+
import static org.junit.Assert.assertEquals;
|
4
|
+
import static org.junit.Assert.assertTrue;
|
5
|
+
|
6
|
+
import org.embulk.EmbulkTestRuntime;
|
7
|
+
import org.junit.Rule;
|
8
|
+
import org.junit.Test;
|
9
|
+
|
10
|
+
public class TestPluginTypeSerDe
|
11
|
+
{
|
12
|
+
@Rule
|
13
|
+
public EmbulkTestRuntime testRuntime = new EmbulkTestRuntime();
|
14
|
+
|
15
|
+
@Test
|
16
|
+
public void testParseTypeString()
|
17
|
+
{
|
18
|
+
PluginType pluginType = testRuntime.getModelManager().readObjectWithConfigSerDe(
|
19
|
+
PluginType.class,
|
20
|
+
"\"file\"");
|
21
|
+
assertTrue(pluginType instanceof DefaultPluginType);
|
22
|
+
assertEquals(PluginSource.Type.DEFAULT, pluginType.getSourceType());
|
23
|
+
assertEquals("file", pluginType.getName());
|
24
|
+
}
|
25
|
+
|
26
|
+
@Test
|
27
|
+
public void testParseTypeMapping()
|
28
|
+
{
|
29
|
+
PluginType pluginType = testRuntime.getModelManager().readObjectWithConfigSerDe(
|
30
|
+
PluginType.class,
|
31
|
+
"{ \"name\": \"dummy\" }");
|
32
|
+
assertTrue(pluginType instanceof DefaultPluginType);
|
33
|
+
assertEquals(PluginSource.Type.DEFAULT, pluginType.getSourceType());
|
34
|
+
assertEquals("dummy", pluginType.getName());
|
35
|
+
}
|
36
|
+
|
37
|
+
@Test
|
38
|
+
public void testParseTypeMaven()
|
39
|
+
{
|
40
|
+
PluginType pluginType = testRuntime.getModelManager().readObjectWithConfigSerDe(
|
41
|
+
PluginType.class,
|
42
|
+
"{ \"name\": \"foo\", \"source\": \"maven\", \"group\": \"org.embulk.bar\", \"version\": \"0.1.2\" }");
|
43
|
+
assertTrue(pluginType instanceof MavenPluginType);
|
44
|
+
assertEquals(PluginSource.Type.MAVEN, pluginType.getSourceType());
|
45
|
+
MavenPluginType mavenPluginType = (MavenPluginType) pluginType;
|
46
|
+
assertEquals(mavenPluginType.getName(), "foo");
|
47
|
+
assertEquals(mavenPluginType.getGroup(), "org.embulk.bar");
|
48
|
+
assertEquals(mavenPluginType.getVersion(), "0.1.2");
|
49
|
+
}
|
50
|
+
}
|
data/embulk-docs/src/release.rst
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
Release 0.8.25
|
2
|
+
==================================
|
3
|
+
|
4
|
+
General Changes
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* Prepare for JAR/Maven-based pure-Java plugins [#666] [#669]
|
8
|
+
* Fix "could not find or load main class org.jruby.Main" when run as just "embulk" on Windows. [#676]
|
9
|
+
* Fix "NameError: undefined local variable or method `bundle_path_index' for main:Object" when using Bundler. [#681]
|
10
|
+
|
11
|
+
|
12
|
+
Release Date
|
13
|
+
------------------
|
14
|
+
2017-06-16
|
@@ -10,7 +10,7 @@ import org.embulk.spi.OutputPlugin;
|
|
10
10
|
import org.embulk.spi.ParserPlugin;
|
11
11
|
import org.embulk.spi.DecoderPlugin;
|
12
12
|
import org.embulk.spi.EncoderPlugin;
|
13
|
-
import org.embulk.plugin.
|
13
|
+
import org.embulk.plugin.DefaultPluginType;
|
14
14
|
import static org.embulk.plugin.InjectedPluginSource.registerPluginTo;
|
15
15
|
import static org.embulk.exec.GuessExecutor.registerDefaultGuessPluginTo;
|
16
16
|
|
@@ -50,10 +50,10 @@ public class StandardPluginModule
|
|
50
50
|
registerPluginTo(binder, FilterPlugin.class, "remove_columns", RemoveColumnsFilterPlugin.class);
|
51
51
|
|
52
52
|
// default guess plugins
|
53
|
-
registerDefaultGuessPluginTo(binder,
|
54
|
-
registerDefaultGuessPluginTo(binder,
|
55
|
-
registerDefaultGuessPluginTo(binder,
|
56
|
-
registerDefaultGuessPluginTo(binder,
|
53
|
+
registerDefaultGuessPluginTo(binder, DefaultPluginType.create("gzip"));
|
54
|
+
registerDefaultGuessPluginTo(binder, DefaultPluginType.create("bzip2"));
|
55
|
+
registerDefaultGuessPluginTo(binder, DefaultPluginType.create("json")); // should be registered before CsvGuessPlugin
|
56
|
+
registerDefaultGuessPluginTo(binder, DefaultPluginType.create("csv"));
|
57
57
|
// charset and newline guess plugins are loaded and invoked by CsvGuessPlugin
|
58
58
|
}
|
59
59
|
}
|
@@ -2,8 +2,9 @@ bundle_path = ENV['EMBULK_BUNDLE_PATH'].to_s
|
|
2
2
|
bundle_path = nil if bundle_path.empty?
|
3
3
|
|
4
4
|
# Search for -b or --bundle, and remove it.
|
5
|
-
|
6
|
-
|
5
|
+
bundle_option_index = ARGV.find_index {|arg| arg == '-b' || arg == '--bundle' }
|
6
|
+
if bundle_option_index
|
7
|
+
ARGV.slice!(bundle_option_index, 2)[1]
|
7
8
|
end
|
8
9
|
|
9
10
|
if bundle_path
|
data/lib/embulk/version.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Embulk
|
4
4
|
@@warned = false
|
5
5
|
|
6
|
-
VERSION_INTERNAL = '0.8.
|
6
|
+
VERSION_INTERNAL = '0.8.25'
|
7
7
|
|
8
8
|
DEPRECATED_MESSAGE = 'Embulk::VERSION in (J)Ruby is deprecated. Use org.embulk.EmbulkVersion::VERSION instead. If this message is from a plugin, please tell this to the author of the plugin!'
|
9
9
|
def self.const_missing(name)
|
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.
|
4
|
+
version: 0.8.25
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jruby-jars
|
@@ -110,9 +110,9 @@ files:
|
|
110
110
|
- classpath/commons-compress-1.10.jar
|
111
111
|
- classpath/commons-lang-2.4.jar
|
112
112
|
- classpath/commons-lang3-3.4.jar
|
113
|
-
- classpath/embulk-cli-0.8.
|
114
|
-
- classpath/embulk-core-0.8.
|
115
|
-
- classpath/embulk-standards-0.8.
|
113
|
+
- classpath/embulk-cli-0.8.25.jar
|
114
|
+
- classpath/embulk-core-0.8.25.jar
|
115
|
+
- classpath/embulk-standards-0.8.25.jar
|
116
116
|
- classpath/guava-18.0.jar
|
117
117
|
- classpath/guice-4.0.jar
|
118
118
|
- classpath/guice-bootstrap-0.1.1.jar
|
@@ -206,7 +206,9 @@ files:
|
|
206
206
|
- embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java
|
207
207
|
- embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java
|
208
208
|
- embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java
|
209
|
+
- embulk-core/src/main/java/org/embulk/plugin/DefaultPluginType.java
|
209
210
|
- embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java
|
211
|
+
- embulk-core/src/main/java/org/embulk/plugin/MavenPluginType.java
|
210
212
|
- embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java
|
211
213
|
- embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderFactory.java
|
212
214
|
- embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java
|
@@ -339,6 +341,7 @@ files:
|
|
339
341
|
- embulk-core/src/test/java/org/embulk/config/TestTaskSource.java
|
340
342
|
- embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java
|
341
343
|
- embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java
|
344
|
+
- embulk-core/src/test/java/org/embulk/plugin/TestPluginTypeSerDe.java
|
342
345
|
- embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java
|
343
346
|
- embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java
|
344
347
|
- embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java
|
@@ -463,6 +466,7 @@ files:
|
|
463
466
|
- embulk-docs/src/release/release-0.8.22.rst
|
464
467
|
- embulk-docs/src/release/release-0.8.23.rst
|
465
468
|
- embulk-docs/src/release/release-0.8.24.rst
|
469
|
+
- embulk-docs/src/release/release-0.8.25.rst
|
466
470
|
- embulk-docs/src/release/release-0.8.3.rst
|
467
471
|
- embulk-docs/src/release/release-0.8.4.rst
|
468
472
|
- embulk-docs/src/release/release-0.8.5.rst
|