embulk 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.travis.yml +16 -0
- data/Gemfile +0 -1
- data/README.md +37 -19
- data/Rakefile +5 -37
- data/bin/embulk +1 -1
- data/build.gradle +178 -95
- data/embulk-core/build.gradle +1 -1
- data/embulk-core/src/main/java/org/embulk/command/Runner.java +11 -10
- data/embulk-core/src/main/java/org/embulk/config/ConfigDiff.java +26 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +14 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +2 -2
- data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +4 -3
- data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +5 -3
- data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +1 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +6 -6
- data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +19 -19
- data/embulk-core/src/main/java/org/embulk/exec/LocalExecutor.java +61 -36
- data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +4 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +16 -1
- data/embulk-core/src/main/java/org/embulk/spi/Column.java +1 -1
- data/embulk-core/src/main/java/org/embulk/spi/{SchemaVisitor.java → ColumnVisitor.java} +1 -1
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +1 -1
- data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/PluginClassLoader.java +80 -0
- data/embulk-core/src/main/java/org/embulk/spi/Schema.java +1 -1
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +1 -1
- data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +2 -2
- data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +6 -6
- data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +6 -6
- data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +1 -1
- data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +1 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +2 -2
- data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +1 -1
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +3 -3
- data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +4 -4
- data/embulk-docs/Makefile +178 -0
- data/embulk-docs/build.gradle +20 -0
- data/embulk-docs/make.bat +243 -0
- data/embulk-docs/push-gh-pages.sh +29 -0
- data/embulk-docs/src/conf.py +260 -0
- data/embulk-docs/src/index.rst +19 -0
- data/embulk-docs/src/release.rst +14 -0
- data/embulk-docs/src/release/release-0.1.0.rst +8 -0
- data/embulk-docs/src/release/release-0.2.0.rst +16 -0
- data/embulk-docs/src/release/release-0.2.1.rst +19 -0
- data/embulk-docs/src/release/release-0.3.0.rst +34 -0
- data/embulk-docs/src/release/release-0.3.1.rst +11 -0
- data/embulk-docs/src/release/release-0.3.2.rst +15 -0
- data/embulk-docs/src/release/release-0.4.0.rst +74 -0
- data/embulk-standards/build.gradle +0 -1
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +2 -2
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +12 -3
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +2 -2
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +49 -26
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +16 -17
- data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +4 -4
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +0 -1
- data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +5 -5
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +2 -2
- data/lib/embulk/buffer.rb +2 -2
- data/lib/embulk/column.rb +6 -6
- data/lib/embulk/command/embulk_example.rb +1 -1
- data/lib/embulk/command/embulk_new_plugin.rb +87 -0
- data/lib/embulk/command/embulk_run.rb +84 -26
- data/lib/embulk/data/bundle/Gemfile +12 -20
- data/lib/embulk/data/bundle/embulk/{filter_example.rb → filter/example.rb} +3 -3
- data/lib/embulk/data/bundle/embulk/{input_example.rb → input/example.rb} +3 -3
- data/lib/embulk/data/bundle/embulk/{output_example.rb → output/example.rb} +3 -3
- data/lib/embulk/data/new/LICENSE.txt +21 -0
- data/lib/embulk/data/new/README.md.erb +75 -0
- data/lib/embulk/data/new/gitignore.erb +12 -0
- data/lib/embulk/data/new/java/build.gradle.erb +57 -0
- data/lib/embulk/data/new/java/decoder.java.erb +40 -0
- data/lib/embulk/data/new/java/encoder.java.erb +40 -0
- data/lib/embulk/data/new/java/file_input.java.erb +64 -0
- data/lib/embulk/data/new/java/file_output.java.erb +66 -0
- data/lib/embulk/data/new/java/filter.java.erb +47 -0
- data/lib/embulk/data/new/java/formatter.java.erb +45 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/lib/embulk/data/new/java/gradlew +164 -0
- data/lib/embulk/data/new/java/gradlew.bat +90 -0
- data/lib/embulk/data/new/java/input.java.erb +69 -0
- data/lib/embulk/data/new/java/output.java.erb +65 -0
- data/lib/embulk/data/new/java/parser.java.erb +51 -0
- data/lib/embulk/data/new/java/plugin_loader.rb.erb +3 -0
- data/lib/embulk/data/new/java/test.java.erb +5 -0
- data/lib/embulk/data/new/ruby/Gemfile +2 -0
- data/lib/embulk/data/new/ruby/Rakefile +1 -0
- data/lib/embulk/data/new/ruby/filter.rb.erb +39 -0
- data/lib/embulk/data/new/ruby/gemspec.erb +19 -0
- data/lib/embulk/data/new/ruby/input.rb.erb +47 -0
- data/lib/embulk/data/new/ruby/output.rb.erb +59 -0
- data/lib/embulk/data/package_data.rb +64 -0
- data/lib/embulk/data_source.rb +2 -2
- data/lib/embulk/decoder_plugin.rb +27 -0
- data/lib/embulk/encoder_plugin.rb +27 -0
- data/lib/embulk/error.rb +3 -0
- data/lib/embulk/file_input_plugin.rb +27 -0
- data/lib/embulk/file_output_plugin.rb +27 -0
- data/lib/embulk/filter_plugin.rb +28 -9
- data/lib/embulk/formatter_plugin.rb +105 -0
- data/lib/embulk/guess_csv.rb +10 -1
- data/lib/embulk/guess_plugin.rb +22 -27
- data/lib/embulk/input_plugin.rb +34 -20
- data/lib/embulk/java/bootstrap.rb +5 -0
- data/lib/embulk/java/imports.rb +7 -0
- data/lib/embulk/java_plugin.rb +84 -0
- data/lib/embulk/output_plugin.rb +35 -19
- data/lib/embulk/page.rb +1 -1
- data/lib/embulk/page_builder.rb +1 -1
- data/lib/embulk/parser_plugin.rb +76 -0
- data/lib/embulk/plugin.rb +130 -65
- data/lib/embulk/plugin_registry.rb +19 -8
- data/lib/embulk/schema.rb +4 -4
- data/lib/embulk/version.rb +1 -1
- data/settings.gradle +1 -0
- metadata +123 -90
- data/ChangeLog +0 -46
- data/embulk-cli/pom.xml +0 -94
- data/embulk-core/pom.xml +0 -148
- data/embulk-core/src/main/java/org/embulk/config/NextConfig.java +0 -26
- data/embulk-standards/pom.xml +0 -68
- data/embulk-standards/src/main/java/org/embulk/standards/S3FileInputPlugin.java +0 -250
- data/embulk-standards/src/test/java/org/embulk/standards/TestS3FileInputPlugin.java +0 -43
- data/pom.xml +0 -541
@@ -0,0 +1,87 @@
|
|
1
|
+
module Embulk
|
2
|
+
def self.new_plugin(name, language, category)
|
3
|
+
require 'embulk/data/package_data'
|
4
|
+
require 'embulk/version'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
embulk_category = category
|
8
|
+
embulk_category = :input if category == :file_input
|
9
|
+
embulk_category = :output if category == :file_output
|
10
|
+
|
11
|
+
project_name = "embulk-#{embulk_category}-#{name}"
|
12
|
+
plugin_path = "lib/embulk/#{embulk_category}/#{name}.rb"
|
13
|
+
|
14
|
+
if File.exist?(project_name)
|
15
|
+
raise "./#{project_name} already exists. Please delete it first."
|
16
|
+
end
|
17
|
+
FileUtils.mkdir_p(project_name)
|
18
|
+
|
19
|
+
puts "Creating #{project_name}/"
|
20
|
+
|
21
|
+
success = false
|
22
|
+
begin
|
23
|
+
author = `git config user.name`.strip
|
24
|
+
author = "YOUR_NAME" if author.empty?
|
25
|
+
email = `git config user.email`.strip
|
26
|
+
email = "YOUR_NAME" if email.empty?
|
27
|
+
|
28
|
+
ruby_class_name = name.split('-').map {|a| a.capitalize }.join + category.to_s.split('_').map {|a| a.capitalize }.join + "Plugin"
|
29
|
+
java_iface = category.to_s.split('_').map {|a| a.capitalize }.join
|
30
|
+
java_class_name = name.split('-').map {|a| a.capitalize }.join + java_iface + "Plugin"
|
31
|
+
display_name = name.split('-').map {|a| a.capitalize }.join(' ')
|
32
|
+
display_category = category.to_s.gsub('_', ' ')
|
33
|
+
|
34
|
+
description =
|
35
|
+
case category
|
36
|
+
when :input
|
37
|
+
%[that loads records from #{display_name} so that any output plugins can receive the records. Search the output plugins by "embulk-output" keyword.]
|
38
|
+
when :file_input
|
39
|
+
%[that reads files from #{display_name} and parses the file using any parser plugins. Search the parser plugins by "embulk-parser" keyword.]
|
40
|
+
when :parser
|
41
|
+
%[that parses #{display_name} file format read by any file input plugins. Search the file input plugins by "embulk-input file" keywords.]
|
42
|
+
when :decoder
|
43
|
+
%[that decodes files encoded by #{display_name} read by any file input plugins. Search the file input plugins by "embulk-input file" keywords.]
|
44
|
+
when :output
|
45
|
+
%[that loads records to #{display_name} read by any input plugins. Search the input plugins by "embulk-input" keyword.]
|
46
|
+
when :file_output
|
47
|
+
%[that stores files to #{display_name} formatted by any formatter plugins. Search the formatter plugins by "embulk-formatter" keyword.]
|
48
|
+
when :formtter
|
49
|
+
%[that formats records using #{display_name} file format and so that any file output plugins can store the files. Search the file output plugins by "embulk-output file" keywords.]
|
50
|
+
when :encoder
|
51
|
+
%[that encodes files using #{display_name} so that any file output plugins can store the files. Search the file output plugins by "embulk-output file" keywords.]
|
52
|
+
when :filter
|
53
|
+
%[that converts records read by an input plugin before passing it to an output plugins. Search the input and plugins by "embulk-input" and "embulk-output" plugins.]
|
54
|
+
end
|
55
|
+
|
56
|
+
pkg = Embulk::PackageData.new("new", project_name, binding())
|
57
|
+
|
58
|
+
pkg.cp_erb("README.md.erb", "README.md")
|
59
|
+
pkg.cp("LICENSE.txt", "LICENSE.txt")
|
60
|
+
pkg.cp_erb("gitignore.erb", ".gitignore")
|
61
|
+
|
62
|
+
case language
|
63
|
+
when :ruby
|
64
|
+
pkg.cp("ruby/Rakefile", "Rakefile")
|
65
|
+
pkg.cp("ruby/Gemfile", "Gemfile")
|
66
|
+
pkg.cp_erb("ruby/gemspec.erb", "#{project_name}.gemspec")
|
67
|
+
pkg.cp_erb("ruby/#{category}.rb.erb", plugin_path)
|
68
|
+
|
69
|
+
when :java
|
70
|
+
pkg.cp("java/gradle/wrapper/gradle-wrapper.jar", "gradle/wrapper/gradle-wrapper.jar")
|
71
|
+
pkg.cp("java/gradle/wrapper/gradle-wrapper.properties", "gradle/wrapper/gradle-wrapper.properties")
|
72
|
+
pkg.cp("java/gradlew.bat", "gradlew.bat")
|
73
|
+
pkg.cp("java/gradlew", "gradlew")
|
74
|
+
pkg.set_executable("gradlew")
|
75
|
+
pkg.cp_erb("java/build.gradle.erb", "build.gradle")
|
76
|
+
pkg.cp_erb("java/plugin_loader.rb.erb", plugin_path)
|
77
|
+
pkg.cp_erb("java/#{category}.java.erb", "src/main/java/org/embulk/#{embulk_category}/#{java_class_name}.java")
|
78
|
+
pkg.cp_erb("java/test.java.erb", "src/test/java/org/embulk/#{embulk_category}/Test#{java_class_name}.java")
|
79
|
+
end
|
80
|
+
|
81
|
+
success = true
|
82
|
+
puts ""
|
83
|
+
ensure
|
84
|
+
FileUtils.rm_rf project_name unless success
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -14,13 +14,19 @@ module Embulk
|
|
14
14
|
Gem.clear_paths # force rubygems to reload GEM_HOME
|
15
15
|
end
|
16
16
|
|
17
|
+
# to make sure org.embulk.jruby.JRubyScriptingModule can require 'embulk/java/bootstrap'
|
18
|
+
$LOAD_PATH << Embulk.home('lib')
|
19
|
+
|
20
|
+
if argv.include?('--version')
|
21
|
+
require 'embulk/version'
|
22
|
+
puts "embulk #{Embulk::VERSION}"
|
23
|
+
exit 1
|
24
|
+
end
|
25
|
+
|
17
26
|
i = argv.find_index {|arg| arg !~ /^\-/ }
|
18
27
|
usage nil unless i
|
19
28
|
subcmd = argv.slice!(i)
|
20
29
|
|
21
|
-
# to make sure org.embulk.jruby.JRubyScriptingModule can require 'embulk/java/bootstrap'
|
22
|
-
$LOAD_PATH << Embulk.home('lib')
|
23
|
-
|
24
30
|
require 'java'
|
25
31
|
require 'optparse'
|
26
32
|
op = OptionParser.new
|
@@ -36,6 +42,7 @@ module Embulk
|
|
36
42
|
|
37
43
|
case subcmd.to_sym
|
38
44
|
when :bundle
|
45
|
+
op.remove # remove --bundle
|
39
46
|
if default_bundle_path
|
40
47
|
op.banner = "Usage: bundle [directory=#{default_bundle_path}]"
|
41
48
|
args = 0..1
|
@@ -46,8 +53,6 @@ module Embulk
|
|
46
53
|
|
47
54
|
when :run
|
48
55
|
op.banner = "Usage: run <config.yml>"
|
49
|
-
op.on('-b', '--bundle BUNDLE_DIR', 'Path to a Gemfile directory') do |path|
|
50
|
-
end
|
51
56
|
op.on('-I', '--load-path PATH', 'Add ruby script directory path ($LOAD_PATH)') do |load_path|
|
52
57
|
load_paths << load_path
|
53
58
|
end
|
@@ -64,8 +69,6 @@ module Embulk
|
|
64
69
|
|
65
70
|
when :cleanup
|
66
71
|
op.banner = "Usage: run <config.yml>"
|
67
|
-
op.on('-b', '--bundle BUNDLE_DIR', 'Path to a Gemfile directory') do |path|
|
68
|
-
end
|
69
72
|
op.on('-I', '--load-path PATH', 'Add ruby script directory path ($LOAD_PATH)') do |load_path|
|
70
73
|
load_paths << load_path
|
71
74
|
end
|
@@ -79,8 +82,6 @@ module Embulk
|
|
79
82
|
|
80
83
|
when :preview
|
81
84
|
op.banner = "Usage: preview <config.yml>"
|
82
|
-
op.on('-b', '--bundle BUNDLE_DIR', 'Path to a Gemfile directory') do |path|
|
83
|
-
end
|
84
85
|
op.on('-I', '--load-path PATH', 'Add ruby script directory path ($LOAD_PATH)') do |load_path|
|
85
86
|
load_paths << load_path
|
86
87
|
end
|
@@ -102,8 +103,34 @@ module Embulk
|
|
102
103
|
end
|
103
104
|
args = 1..1
|
104
105
|
|
105
|
-
|
106
|
-
#
|
106
|
+
when :new
|
107
|
+
op.remove # remove --bundle
|
108
|
+
op.banner = "Usage: new <category> <name>" + %[
|
109
|
+
categories:
|
110
|
+
ruby-input Ruby record input plugin (like "mysql")
|
111
|
+
ruby-output Ruby record output plugin (like "mysql")
|
112
|
+
ruby-filter Ruby record filter plugin (like "add-hostname")
|
113
|
+
#ruby-file-input Ruby file input plugin (like "ftp") # not implemented yet [#21]
|
114
|
+
#ruby-file-output Ruby file output plugin (like "ftp") # not implemented yet [#22]
|
115
|
+
#ruby-parser Ruby file parser plugin (like "csv") # not implemented yet [#33]
|
116
|
+
#ruby-formatter Ruby file formatter plugin (like "csv") # not implemented yet [#34]
|
117
|
+
#ruby-decoder Ruby file decoder plugin (like "gzip") # not implemented yet [#31]
|
118
|
+
#ruby-encoder Ruby file encoder plugin (like "gzip") # not implemented yet [#32]
|
119
|
+
java-input Java record input plugin (like "mysql")
|
120
|
+
java-output Java record output plugin (like "mysql")
|
121
|
+
java-filter Java record filter plugin (like "add-hostname")
|
122
|
+
java-file-input Java file input plugin (like "ftp")
|
123
|
+
java-file-output Java file output plugin (like "ftp")
|
124
|
+
java-parser Java file parser plugin (like "csv")
|
125
|
+
java-formatter Java file formatter plugin (like "csv")
|
126
|
+
java-decoder Java file decoder plugin (like "gzip")
|
127
|
+
java-encoder Java file encoder plugin (like "gzip")
|
128
|
+
|
129
|
+
examples:
|
130
|
+
new ruby-output hbase
|
131
|
+
new ruby-filter int-to-string
|
132
|
+
]
|
133
|
+
args = 2..2
|
107
134
|
|
108
135
|
when :gem
|
109
136
|
require 'rubygems/gem_runner'
|
@@ -124,10 +151,10 @@ module Embulk
|
|
124
151
|
begin
|
125
152
|
op.parse!(argv)
|
126
153
|
unless args.include?(argv.length)
|
127
|
-
|
154
|
+
usage_op op, nil
|
128
155
|
end
|
129
156
|
rescue => e
|
130
|
-
|
157
|
+
usage_op op, e.to_s
|
131
158
|
end
|
132
159
|
|
133
160
|
case subcmd.to_sym
|
@@ -146,19 +173,10 @@ module Embulk
|
|
146
173
|
success = false
|
147
174
|
|
148
175
|
# copy embulk/data/bundle/ directory
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
url = resource_class.resource("/embulk/data/bundle/#{file}").to_s
|
154
|
-
dst = File.join(path, file)
|
155
|
-
FileUtils.mkdir_p File.dirname(dst)
|
156
|
-
FileUtils.cp(url, dst)
|
157
|
-
end
|
158
|
-
else
|
159
|
-
#tmpl = File.join(File.dirname(__FILE__), '../data/bundle')
|
160
|
-
tmpl = File.join(Embulk.home('lib'), 'embulk', 'data', 'bundle')
|
161
|
-
FileUtils.cp_r tmpl, path
|
176
|
+
require 'embulk/data/package_data'
|
177
|
+
pkg = PackageData.new("bundle", path)
|
178
|
+
%w[.bundle/config embulk/input/example.rb embulk/output/example.rb embulk/filter/example.rb Gemfile].each do |file|
|
179
|
+
pkg.cp(file, file)
|
162
180
|
end
|
163
181
|
|
164
182
|
## TODO this is disabled for now. enable this if you want to use
|
@@ -207,6 +225,36 @@ module Embulk
|
|
207
225
|
puts " 3. run config.yml"
|
208
226
|
puts ""
|
209
227
|
|
228
|
+
when :new
|
229
|
+
lang_cate = ARGV[0]
|
230
|
+
name = ARGV[1]
|
231
|
+
|
232
|
+
language, category = case lang_cate
|
233
|
+
when "java-input" then [:java, :input]
|
234
|
+
when "java-output" then [:java, :output]
|
235
|
+
when "java-filter" then [:java, :filter]
|
236
|
+
when "java-file-input" then [:java, :file_input]
|
237
|
+
when "java-file-output" then [:java, :file_output]
|
238
|
+
when "java-parser" then [:java, :parser]
|
239
|
+
when "java-formatter" then [:java, :formatter]
|
240
|
+
when "java-decoder" then [:java, :decoder]
|
241
|
+
when "java-encoder" then [:java, :encoder]
|
242
|
+
when "ruby-input" then [:ruby, :input]
|
243
|
+
when "ruby-output" then [:ruby, :output]
|
244
|
+
when "ruby-filter" then [:ruby, :filter]
|
245
|
+
when "ruby-file-input" then raise "ruby-file-input is not implemented yet. See #21 on github." #[:ruby, :file_input]
|
246
|
+
when "ruby-file-output" then raise "ruby-file-output is not implemented yet. See #22 on github." #[:ruby, :file_output]
|
247
|
+
when "ruby-parser" then raise "ruby-parser is not implemented yet. See #33 on github." #[:ruby, :parser]
|
248
|
+
when "ruby-formatter" then raise "ruby-formatter is not implemented yet. See #34 on github." #[:ruby, :formatter]
|
249
|
+
when "ruby-decoder" then raise "ruby-decoder is not implemented yet. See #31 on github." #[:ruby, :decoder]
|
250
|
+
when "ruby-encoder" then raise "ruby-decoder is not implemented yet. See #32 on github." #[:ruby, :encoder]
|
251
|
+
else
|
252
|
+
usage_op op, "Unknown category '#{lang_cate}'"
|
253
|
+
end
|
254
|
+
|
255
|
+
require 'embulk/command/embulk_new_plugin'
|
256
|
+
Embulk.new_plugin(name, language, category)
|
257
|
+
|
210
258
|
else
|
211
259
|
require 'json'
|
212
260
|
|
@@ -265,6 +313,7 @@ module Embulk
|
|
265
313
|
STDERR.puts " guess <partial-config.yml> -o <output.yml> # guess missing parameters to create a complete configuration file."
|
266
314
|
STDERR.puts " gem <install | list | help> # install a plugin or show installed plugins."
|
267
315
|
STDERR.puts " # plugin path is #{ENV['GEM_HOME']}"
|
316
|
+
STDERR.puts " new <category> <name> # generates new plugin template"
|
268
317
|
STDERR.puts " example [path] # creates an example config file and csv file to try embulk."
|
269
318
|
STDERR.puts ""
|
270
319
|
if message
|
@@ -274,4 +323,13 @@ module Embulk
|
|
274
323
|
end
|
275
324
|
exit 1
|
276
325
|
end
|
326
|
+
|
327
|
+
def self.usage_op(op, message)
|
328
|
+
STDERR.puts op.help
|
329
|
+
STDERR.puts
|
330
|
+
if message
|
331
|
+
STDERR.puts message
|
332
|
+
end
|
333
|
+
exit 1
|
334
|
+
end
|
277
335
|
end
|
@@ -1,31 +1,23 @@
|
|
1
1
|
source 'https://rubygems.org/'
|
2
|
-
|
3
|
-
# Plugin bundle:
|
4
2
|
#
|
5
|
-
#
|
6
|
-
# You can write plugin names (and versions) to this file to include
|
7
|
-
# the plugins released on RubyGems. To use those plugins,
|
3
|
+
# Note: After updating this file, run this command to update Gemfile.lock:
|
8
4
|
#
|
9
|
-
#
|
10
|
-
# 2. update Gemfile.lock using: embulk bundle <this dir>
|
11
|
-
# 3. run embulk with -b option: embulk run -b <this dir> example.yml
|
5
|
+
# embulk bundle <this_dir>
|
12
6
|
#
|
13
|
-
|
14
|
-
# You can put a simple ruby plugins to <this dir>/embulk directory.
|
15
|
-
# When you run embulk with -b <this dir> option, embulk loads them:
|
7
|
+
|
16
8
|
#
|
17
|
-
#
|
9
|
+
# RubyGems Plugins
|
18
10
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
11
|
+
#gem 'embulk-output-mysql'
|
12
|
+
#gem 'embulk-output-postgresql', '>= 0.1.0'
|
13
|
+
#gem 'embulk-input-baz', '= 0.2.0'
|
14
|
+
#gem 'embulk-input-xyz', '~> 0.3.0'
|
22
15
|
#
|
23
16
|
|
24
|
-
# Plugins
|
25
17
|
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#gem 'embulk-
|
29
|
-
#gem 'embulk-
|
18
|
+
# Private plugins
|
19
|
+
#
|
20
|
+
#gem 'embulk-inupt-awesome', path: '/path/to/your/embulk-input-awesome'
|
21
|
+
#gem 'embulk-output-awesome', git: 'https://github.com/you/embulk-output-awesome.git', branch: 'master'
|
30
22
|
#
|
31
23
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Embulk
|
2
|
-
module
|
2
|
+
module Filter
|
3
3
|
|
4
|
-
class
|
5
|
-
# filter plugin file name must be: embulk/
|
4
|
+
class ExampleFilterPlugin < FilterPlugin
|
5
|
+
# filter plugin file name must be: embulk/filter/<name>.rb
|
6
6
|
Plugin.register_filter('example', self)
|
7
7
|
|
8
8
|
def self.transaction(config, in_schema, &control)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Embulk
|
2
|
-
module
|
2
|
+
module Input
|
3
3
|
|
4
|
-
class
|
5
|
-
# input plugin file name must be: embulk/
|
4
|
+
class ExampleInputPlugin < InputPlugin
|
5
|
+
# input plugin file name must be: embulk/input/<name>.rb
|
6
6
|
Plugin.register_input('example', self)
|
7
7
|
|
8
8
|
def self.transaction(config, &control)
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Embulk
|
2
|
-
module
|
2
|
+
module Output
|
3
3
|
|
4
|
-
class
|
5
|
-
# output plugin file name must be: embulk/
|
4
|
+
class ExampleOutputPlugin < OutputPlugin
|
5
|
+
# output plugin file name must be: embulk/output/<name>.rb
|
6
6
|
Plugin.register_output('example', self)
|
7
7
|
|
8
8
|
def self.transaction(config, schema, count, &control)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
MIT License
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# <%= display_name %> <%= display_category %> plugin for Embulk
|
2
|
+
|
3
|
+
TODO: Write short description here
|
4
|
+
|
5
|
+
## Overview
|
6
|
+
|
7
|
+
* **Plugin type**: <%= embulk_category %>
|
8
|
+
* **Load all or nothing**: yes
|
9
|
+
* **Resume supported**: no
|
10
|
+
|
11
|
+
## Configuration
|
12
|
+
|
13
|
+
- **property1**: description (string, required)
|
14
|
+
- **property2**: description (integer, default: default-value)
|
15
|
+
|
16
|
+
## Example
|
17
|
+
|
18
|
+
```yaml
|
19
|
+
%case category
|
20
|
+
%when :input, :file_input
|
21
|
+
in:
|
22
|
+
type: <%= name %>
|
23
|
+
property1: example1
|
24
|
+
property2: example2
|
25
|
+
%when :output, :file_output
|
26
|
+
out:
|
27
|
+
type: <%= name %>
|
28
|
+
property1: example1
|
29
|
+
property2: example2
|
30
|
+
%when :filter
|
31
|
+
filters:
|
32
|
+
- type: <%= name %>
|
33
|
+
property1: example1
|
34
|
+
property2: example2
|
35
|
+
%when :parser
|
36
|
+
in:
|
37
|
+
type: any file input plugin type
|
38
|
+
parser:
|
39
|
+
type: <%= name %>
|
40
|
+
property1: example1
|
41
|
+
property2: example2
|
42
|
+
%when :formatter
|
43
|
+
out:
|
44
|
+
type: any output input plugin type
|
45
|
+
formatter:
|
46
|
+
type: <%= name %>
|
47
|
+
property1: example1
|
48
|
+
property2: example2
|
49
|
+
%when :decoder
|
50
|
+
in:
|
51
|
+
type: any output input plugin type
|
52
|
+
decoders:
|
53
|
+
- type: <%= name %>
|
54
|
+
property1: example1
|
55
|
+
property2: example2
|
56
|
+
%when :encoder
|
57
|
+
out:
|
58
|
+
type: any output input plugin type
|
59
|
+
encoders:
|
60
|
+
- type: <%= name %>
|
61
|
+
property1: example1
|
62
|
+
property2: example2
|
63
|
+
%end
|
64
|
+
```
|
65
|
+
|
66
|
+
## Build
|
67
|
+
|
68
|
+
```
|
69
|
+
%case language
|
70
|
+
%when :ruby
|
71
|
+
$ rake
|
72
|
+
%when :java
|
73
|
+
$ ./gradlew gem
|
74
|
+
% end
|
75
|
+
```
|