wukong 3.0.0.pre3 → 3.0.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.
- data/Gemfile +1 -0
- data/README.md +689 -50
- data/bin/wu-local +1 -74
- data/diagrams/wu_local.dot +39 -0
- data/diagrams/wu_local.dot.png +0 -0
- data/examples/loadable.rb +2 -0
- data/examples/string_reverser.rb +7 -0
- data/lib/hanuman/stage.rb +2 -2
- data/lib/wukong.rb +21 -10
- data/lib/wukong/dataflow.rb +2 -5
- data/lib/wukong/doc_helpers.rb +14 -0
- data/lib/wukong/doc_helpers/dataflow_handler.rb +29 -0
- data/lib/wukong/doc_helpers/field_handler.rb +91 -0
- data/lib/wukong/doc_helpers/processor_handler.rb +29 -0
- data/lib/wukong/driver.rb +11 -1
- data/lib/wukong/local.rb +40 -0
- data/lib/wukong/local/event_machine_driver.rb +27 -0
- data/lib/wukong/local/runner.rb +98 -0
- data/lib/wukong/local/stdio_driver.rb +44 -0
- data/lib/wukong/local/tcp_driver.rb +47 -0
- data/lib/wukong/logger.rb +16 -7
- data/lib/wukong/plugin.rb +48 -0
- data/lib/wukong/processor.rb +57 -15
- data/lib/wukong/rake_helper.rb +6 -0
- data/lib/wukong/runner.rb +151 -128
- data/lib/wukong/runner/boot_sequence.rb +123 -0
- data/lib/wukong/runner/code_loader.rb +52 -0
- data/lib/wukong/runner/deploy_pack_loader.rb +75 -0
- data/lib/wukong/runner/help_message.rb +42 -0
- data/lib/wukong/spec_helpers.rb +4 -12
- data/lib/wukong/spec_helpers/integration_tests.rb +150 -0
- data/lib/wukong/spec_helpers/{integration_driver_matchers.rb → integration_tests/integration_test_matchers.rb} +28 -62
- data/lib/wukong/spec_helpers/integration_tests/integration_test_runner.rb +97 -0
- data/lib/wukong/spec_helpers/shared_examples.rb +19 -10
- data/lib/wukong/spec_helpers/unit_tests.rb +134 -0
- data/lib/wukong/spec_helpers/{processor_methods.rb → unit_tests/unit_test_driver.rb} +42 -8
- data/lib/wukong/spec_helpers/{spec_driver_matchers.rb → unit_tests/unit_test_matchers.rb} +6 -32
- data/lib/wukong/spec_helpers/unit_tests/unit_test_runner.rb +54 -0
- data/lib/wukong/version.rb +1 -1
- data/lib/wukong/widget/filters.rb +134 -8
- data/lib/wukong/widget/processors.rb +64 -5
- data/lib/wukong/widget/reducers/bin.rb +68 -18
- data/lib/wukong/widget/reducers/count.rb +12 -0
- data/lib/wukong/widget/reducers/group.rb +48 -5
- data/lib/wukong/widget/reducers/group_concat.rb +30 -2
- data/lib/wukong/widget/reducers/moments.rb +4 -4
- data/lib/wukong/widget/reducers/sort.rb +53 -3
- data/lib/wukong/widget/serializers.rb +37 -12
- data/lib/wukong/widget/utils.rb +1 -1
- data/spec/spec_helper.rb +20 -2
- data/spec/wukong/driver_spec.rb +2 -0
- data/spec/wukong/local/runner_spec.rb +40 -0
- data/spec/wukong/local_spec.rb +6 -0
- data/spec/wukong/logger_spec.rb +49 -0
- data/spec/wukong/processor_spec.rb +22 -0
- data/spec/wukong/runner_spec.rb +128 -8
- data/spec/wukong/widget/filters_spec.rb +28 -10
- data/spec/wukong/widget/processors_spec.rb +5 -5
- data/spec/wukong/widget/reducers/bin_spec.rb +14 -14
- data/spec/wukong/widget/reducers/count_spec.rb +1 -1
- data/spec/wukong/widget/reducers/group_spec.rb +7 -6
- data/spec/wukong/widget/reducers/moments_spec.rb +2 -2
- data/spec/wukong/widget/reducers/sort_spec.rb +1 -1
- data/spec/wukong/widget/serializers_spec.rb +84 -88
- data/spec/wukong/wu-local_spec.rb +109 -0
- metadata +43 -20
- data/bin/wu-server +0 -70
- data/lib/wukong/boot.rb +0 -96
- data/lib/wukong/configuration.rb +0 -8
- data/lib/wukong/emitter.rb +0 -22
- data/lib/wukong/server.rb +0 -119
- data/lib/wukong/spec_helpers/integration_driver.rb +0 -157
- data/lib/wukong/spec_helpers/processor_helpers.rb +0 -89
- data/lib/wukong/spec_helpers/spec_driver.rb +0 -28
- data/spec/wukong/local_runner_spec.rb +0 -31
- data/spec/wukong/wu_local_spec.rb +0 -125
data/bin/wu-local
CHANGED
@@ -1,77 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'wukong'
|
4
|
-
|
5
|
-
settings = Wukong::Local::Configuration
|
6
|
-
settings.use(:commandline)
|
7
|
-
|
8
|
-
def settings.usage
|
9
|
-
"usage: #{File.basename($0)} PROCESSOR|FLOW [ --param=value | -p value | --param | -p]"
|
10
|
-
end
|
11
|
-
|
12
|
-
settings.description = <<-EOF
|
13
|
-
wu-local is a tool for running Wukong processors and flows locally on
|
14
|
-
the command-line. Use wu-local by passing it a processor and feeding
|
15
|
-
in some data:
|
16
|
-
|
17
|
-
$ echo 'UNIX is Clever and Fun...' | wu-local tokenizer.rb
|
18
|
-
UNIX
|
19
|
-
is
|
20
|
-
Clever
|
21
|
-
and
|
22
|
-
Fun
|
23
|
-
|
24
|
-
If your processors have named fields you can pass them in as
|
25
|
-
arguments:
|
26
|
-
|
27
|
-
$ echo 'UNIX is clever and fun...' | wu-local tokenizer.rb --min_length=4
|
28
|
-
UNIX
|
29
|
-
Clever
|
30
|
-
|
31
|
-
You can chain processors and calls to wu-local together:
|
32
|
-
|
33
|
-
$ echo 'UNIX is clever and fun...' | wu-local tokenizer.rb --min_length=4 | wu-local downcaser.rb
|
34
|
-
unix
|
35
|
-
clever
|
36
|
-
|
37
|
-
Which is a good way to develop a combined data flow which you can
|
38
|
-
again test locally:
|
39
|
-
|
40
|
-
$ echo 'UNIX is clever and fun...' | wu-local tokenize_and_downcase_big_words.rb
|
41
|
-
unix
|
42
|
-
clever
|
43
|
-
EOF
|
44
|
-
|
45
|
-
settings.define :run, description: "Name of the processor or dataflow to use. Defaults to basename of the given path.", flag: 'r'
|
46
|
-
# settings.define :tcp_server, description: "Run locally as a tcp server on a specified port", default: false, flag: 't'
|
47
|
-
require 'wukong/boot' ; Wukong.boot!(settings)
|
48
|
-
|
49
|
-
thing = settings.rest.first
|
50
|
-
case
|
51
|
-
when thing.nil?
|
52
|
-
settings.dump_help
|
53
|
-
exit(1)
|
54
|
-
when Wukong.registry.registered?(thing.to_sym)
|
55
|
-
processor = thing.to_sym
|
56
|
-
when File.exist?(thing)
|
57
|
-
load thing
|
58
|
-
processor = settings.run || File.basename(thing, '.rb')
|
59
|
-
else
|
60
|
-
settings.dump_help
|
61
|
-
exit(2)
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
begin
|
67
|
-
# EM.run do
|
68
|
-
# settings.tcp_server ? Wu::TCPServer.start(processor.to_sym, settings) : Wu::StdioServer.start(processor.to_sym, settings)
|
69
|
-
# end
|
70
|
-
StupidServer.new(processor.to_sym, settings).run!
|
71
|
-
rescue Wu::Error => e
|
72
|
-
$stderr.puts e.message
|
73
|
-
exit(3)
|
74
|
-
end
|
75
|
-
|
76
|
-
# One day, it will be this easy...
|
77
|
-
# Wukong::LocalRunner.run!
|
4
|
+
Wukong::Local::LocalRunner.run
|
@@ -0,0 +1,39 @@
|
|
1
|
+
digraph WuLocalControlFlow {
|
2
|
+
size ="100,100";
|
3
|
+
stdin [label=<
|
4
|
+
<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
|
5
|
+
<TR><TD><FONT FACE="BOLD" POINT-SIZE="20">STDIN</FONT></TD></TR>
|
6
|
+
<TR><TD><FONT POINT-SIZE="10">The line of input text</FONT></TD></TR>
|
7
|
+
<TR><TD><FONT FACE="MONOSPACE">Shall I compare thee to a summers day?<BR/>Thou art more lovely and more temperate<BR/>...</FONT></TD></TR>
|
8
|
+
|
9
|
+
</TABLE>>];
|
10
|
+
command [shape=diamond,label=<
|
11
|
+
<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
|
12
|
+
<TR><TD><FONT FACE="BOLD" POINT-SIZE="20">Command</FONT></TD></TR>
|
13
|
+
<TR><TD><FONT POINT-SIZE="10">A UNIX process launched on the command line</FONT></TD></TR>
|
14
|
+
<TR><TD><FONT FACE="MONOSPACE">wu-local word_counter</FONT></TD></TR>
|
15
|
+
</TABLE>>];
|
16
|
+
runner [shape=box,label=<
|
17
|
+
<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
|
18
|
+
<TR><TD><FONT FACE="BOLD" POINT-SIZE="20">Runner</FONT></TD></TR>
|
19
|
+
<TR><TD><FONT POINT-SIZE="10">Loads plugins and code, configures and resolves settings, boots plugins, validates command line, then runs.</FONT></TD></TR>
|
20
|
+
<TR><TD><FONT FACE="MONOSPACE">Wukong::Local::LocalRunner</FONT></TD></TR>
|
21
|
+
</TABLE>>];
|
22
|
+
driver [shape=box,label=<
|
23
|
+
<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
|
24
|
+
<TR><TD><FONT FACE="BOLD" POINT-SIZE="20">Driver</FONT></TD></TR>
|
25
|
+
<TR><TD><FONT POINT-SIZE="10">Passes input to processor, handles output</FONT></TD></TR>
|
26
|
+
<TR><TD><FONT FACE="MONOSPACE">Wukong::Local::StdioDriver</FONT></TD></TR>
|
27
|
+
</TABLE>>];
|
28
|
+
stdout [label=<
|
29
|
+
<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
|
30
|
+
<TR><TD><FONT FACE="BOLD" POINT-SIZE="20">STDOUT</FONT></TD></TR>
|
31
|
+
<TR><TD><FONT POINT-SIZE="10">The resulting output lines</FONT></TD></TR>
|
32
|
+
<TR><TD><FONT FACE="MONOSPACE">8<BR/>7<BR/>...</FONT></TD></TR>
|
33
|
+
</TABLE>>];
|
34
|
+
|
35
|
+
command -> runner [label="Implemented By"];
|
36
|
+
runner -> driver [label="Instantiates"];
|
37
|
+
stdin -> driver [label="Reads 1 Line"];
|
38
|
+
driver -> stdout [label="Writes N Lines"];
|
39
|
+
}
|
Binary file
|
data/lib/hanuman/stage.rb
CHANGED
@@ -25,7 +25,7 @@ module Hanuman
|
|
25
25
|
include Gorillib::Model
|
26
26
|
extend StageClassMethods
|
27
27
|
|
28
|
-
field :label, Symbol
|
28
|
+
field :label, Symbol, :doc => false
|
29
29
|
end
|
30
30
|
|
31
31
|
class StageBuilder
|
@@ -43,7 +43,7 @@ module Hanuman
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def build(options = {})
|
46
|
-
for_class.receive self.serialize.merge(options)
|
46
|
+
for_class.receive self.serialize.merge(options).merge(options[label] || {})
|
47
47
|
end
|
48
48
|
|
49
49
|
def handle_extra_attributes(attrs)
|
data/lib/wukong.rb
CHANGED
@@ -4,16 +4,14 @@ require 'multi_json'
|
|
4
4
|
require 'eventmachine'
|
5
5
|
require 'log4r'
|
6
6
|
|
7
|
-
|
7
|
+
require_relative 'hanuman'
|
8
|
+
require_relative 'wukong/logger'
|
9
|
+
require_relative 'wukong/processor'
|
10
|
+
require_relative 'wukong/dataflow'
|
11
|
+
require_relative 'wukong/plugin'
|
12
|
+
require_relative 'wukong/driver'
|
13
|
+
require_relative 'wukong/runner'
|
8
14
|
|
9
|
-
require 'wukong/logger'
|
10
|
-
require 'wukong/processor'
|
11
|
-
require 'wukong/dataflow'
|
12
|
-
require 'wukong/configuration'
|
13
|
-
require 'wukong/widgets'
|
14
|
-
require 'wukong/driver'
|
15
|
-
require 'wukong/server'
|
16
|
-
# require 'wukong/runner'
|
17
15
|
|
18
16
|
# The Wukong module will contain all code for Wukong's core (like
|
19
17
|
# Processors and Dataflows) as well as all plugins.
|
@@ -25,7 +23,15 @@ module Wukong
|
|
25
23
|
|
26
24
|
# A common error class intended to be raised by code within Wukong
|
27
25
|
# or its plugins.
|
28
|
-
Error
|
26
|
+
class Error < StandardError
|
27
|
+
def initialize msg_or_error
|
28
|
+
if msg_or_error.respond_to?(:message) && msg_or_error.respond_to?(:backtrace)
|
29
|
+
super([msg_or_error.message, msg_or_error.backtrace].compact.join("\n"))
|
30
|
+
else
|
31
|
+
super(msg_or_error)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
29
35
|
|
30
36
|
add_shortcut_method_for(:processor, ProcessorBuilder)
|
31
37
|
add_shortcut_method_for(:dataflow, DataflowBuilder)
|
@@ -34,3 +40,8 @@ end
|
|
34
40
|
|
35
41
|
# Alias module name for shorter namespaces
|
36
42
|
Wu = Wukong
|
43
|
+
|
44
|
+
require_relative 'wukong/widgets'
|
45
|
+
require_relative 'wukong/local'
|
46
|
+
|
47
|
+
|
data/lib/wukong/dataflow.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'yard'
|
2
|
+
require 'wukong'
|
3
|
+
require_relative('doc_helpers/processor_handler')
|
4
|
+
require_relative('doc_helpers/dataflow_handler')
|
5
|
+
require_relative('doc_helpers/field_handler')
|
6
|
+
|
7
|
+
module Wukong
|
8
|
+
|
9
|
+
# This module defines several YARD handlers for processing inline
|
10
|
+
# documentation written around Wukong processors and dataflows and
|
11
|
+
# Gorillib fields when using the DSL.
|
12
|
+
module DocHelpers
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Wukong
|
2
|
+
module DocHelpers
|
3
|
+
|
4
|
+
# Handles the Wukong.dataflow syntax.
|
5
|
+
class DataflowHandler < YARD::Handlers::Ruby::ClassHandler
|
6
|
+
|
7
|
+
handles method_call(:dataflow)
|
8
|
+
|
9
|
+
# :nodoc:
|
10
|
+
def base_dataflow_class
|
11
|
+
@base_dataflow_class ||= YARD::CodeObjects::ClassObject.new(namespace, "Wukong::Dataflow")
|
12
|
+
end
|
13
|
+
|
14
|
+
# :nodoc:
|
15
|
+
def process
|
16
|
+
dataflow_name = statement.parameters.first.jump(:tstring_content, :ident).source
|
17
|
+
class_name = Gorillib::Inflector.camelize(dataflow_name)
|
18
|
+
dataflow_class = create_class(class_name, base_dataflow_class)
|
19
|
+
dataflow_body = statement.last.last
|
20
|
+
|
21
|
+
push_state(:owner => dataflow_class, :scope => :class, :namespace => dataflow_class) do
|
22
|
+
parse_block(dataflow_body)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,91 @@
|
|
1
|
+
module Wukong
|
2
|
+
module DocHelpers
|
3
|
+
|
4
|
+
# Handles the syntax
|
5
|
+
#
|
6
|
+
# class Foo
|
7
|
+
# include Gorillib::Model
|
8
|
+
# field :bar, Integer, :default => 3
|
9
|
+
# end
|
10
|
+
class FieldHandler < YARD::Handlers::Ruby::ClassHandler
|
11
|
+
|
12
|
+
handles method_call(:field)
|
13
|
+
namespace_only
|
14
|
+
|
15
|
+
def process
|
16
|
+
register(getter)
|
17
|
+
register(setter)
|
18
|
+
namespace.attributes[:instance][field_name] = { :read => getter, :write => setter }
|
19
|
+
end
|
20
|
+
|
21
|
+
def getter
|
22
|
+
@getter ||= YARD::CodeObjects::MethodObject.new(namespace, field_name, :instance).tap do |method|
|
23
|
+
method.docstring = getter_docstring
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def setter
|
28
|
+
@setter ||= YARD::CodeObjects::MethodObject.new(namespace, field_name + '=', :instance).tap do |method|
|
29
|
+
method.docstring = setter_docstring
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def getter_docstring
|
34
|
+
doc = "@return [#{field_type}]"
|
35
|
+
doc += " #{field_doc}" if field_doc
|
36
|
+
doc += " [Default: #{field_default}]" if field_default
|
37
|
+
doc
|
38
|
+
end
|
39
|
+
|
40
|
+
def setter_docstring
|
41
|
+
doc = "@return [#{field_type}]"
|
42
|
+
doc += " #{field_doc}" if field_doc
|
43
|
+
doc += " [Default: #{field_default}]" if field_default
|
44
|
+
doc
|
45
|
+
end
|
46
|
+
|
47
|
+
def field_name
|
48
|
+
statement.parameters.first.jump(:tstring_content, :ident).source
|
49
|
+
end
|
50
|
+
|
51
|
+
def field_type
|
52
|
+
statement.parameters[1].jump(:string_content, :ident).source
|
53
|
+
end
|
54
|
+
|
55
|
+
def field_options
|
56
|
+
return @field_options if @field_options
|
57
|
+
@field_options = {}
|
58
|
+
field_options_obj = statement.parameters[2]
|
59
|
+
if field_options_obj
|
60
|
+
keys_and_values = field_options_obj.jump(:assoc)
|
61
|
+
until keys_and_values.empty?
|
62
|
+
obj = keys_and_values.shift
|
63
|
+
if obj.type == :symbol_literal
|
64
|
+
key = obj.source.to_s.gsub(/^:/,'').to_sym
|
65
|
+
value_obj = keys_and_values.shift
|
66
|
+
if value_obj
|
67
|
+
value = case key
|
68
|
+
when :doc then value_obj.source.to_s.gsub(/^"/,'').gsub(/"$/,'')
|
69
|
+
else
|
70
|
+
value_obj.source
|
71
|
+
end
|
72
|
+
@field_options[key] = value
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
@field_options
|
78
|
+
end
|
79
|
+
|
80
|
+
def field_doc
|
81
|
+
field_options[:doc]
|
82
|
+
end
|
83
|
+
|
84
|
+
def field_default
|
85
|
+
field_options[:default]
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Wukong
|
2
|
+
module DocHelpers
|
3
|
+
|
4
|
+
# Handles the Wukong.processor syntax.
|
5
|
+
class ProcessorHandler < YARD::Handlers::Ruby::ClassHandler
|
6
|
+
|
7
|
+
handles method_call(:processor)
|
8
|
+
|
9
|
+
# :nodoc:
|
10
|
+
def base_processor_class
|
11
|
+
@base_processor_class ||= YARD::CodeObjects::ClassObject.new(namespace, "Wukong::Processor")
|
12
|
+
end
|
13
|
+
|
14
|
+
# :nodoc:
|
15
|
+
def process
|
16
|
+
processor_name = statement.parameters.first.jump(:tstring_content, :ident).source
|
17
|
+
class_name = Gorillib::Inflector.camelize(processor_name)
|
18
|
+
processor_class = create_class(class_name, base_processor_class)
|
19
|
+
processor_body = statement.last.last
|
20
|
+
|
21
|
+
push_state(:owner => processor_class, :scope => :class, :namespace => processor_class) do
|
22
|
+
parse_block(processor_body)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/lib/wukong/driver.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
module Wukong
|
2
2
|
module DriverMethods
|
3
3
|
|
4
|
+
attr_accessor :dataflow
|
5
|
+
|
6
|
+
attr_accessor :settings
|
7
|
+
|
4
8
|
def driver
|
5
9
|
@driver ||= Driver.new(dataflow)
|
6
10
|
end
|
7
11
|
|
8
12
|
def lookup(label)
|
9
|
-
raise Wukong::Error.new("could not find definition for
|
13
|
+
raise Wukong::Error.new("could not find definition for <#{label}>") unless Wukong.registry.registered?(label.to_sym)
|
10
14
|
Wukong.registry.retrieve(label.to_sym)
|
11
15
|
end
|
12
16
|
|
@@ -29,6 +33,12 @@ module Wukong
|
|
29
33
|
dataflow.each(&:setup)
|
30
34
|
end
|
31
35
|
|
36
|
+
def finalize_dataflow
|
37
|
+
dataflow.each do |stage|
|
38
|
+
stage.finalize(&driver.advance(stage)) if stage.respond_to?(:finalize)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
32
42
|
def finalize_and_stop_dataflow
|
33
43
|
dataflow.each do |stage|
|
34
44
|
stage.finalize(&driver.advance(stage)) if stage.respond_to?(:finalize)
|
data/lib/wukong/local.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Wukong
|
2
|
+
|
3
|
+
# Provides methods for supporting the running of Wukong processors
|
4
|
+
# and dataflows entirely locally, without any frameworks like Hadoop
|
5
|
+
# or Storm.
|
6
|
+
#
|
7
|
+
# This module is actually a plugin for Wukong.
|
8
|
+
module Local
|
9
|
+
include Plugin
|
10
|
+
|
11
|
+
# Configures the given +settings+ object with all settings
|
12
|
+
# specific to Wukong::Local for the given program +name+.
|
13
|
+
#
|
14
|
+
# @param [Configliere::Param] settings the settings to configure
|
15
|
+
# @param [String] program the name of the currently executing program
|
16
|
+
def self.configure settings, program
|
17
|
+
case program
|
18
|
+
when 'wu-local'
|
19
|
+
settings.define :run, description: "Name of the processor or dataflow to use. Defaults to basename of the given path.", flag: 'r'
|
20
|
+
settings.define :tcp_port, description: "Consume TCP requests on the given port instead of lines over STDIN", type: Integer, flag: 't'
|
21
|
+
|
22
|
+
settings.define :from, description: "Parse input from given data format (json, tsv, &c.) before processing"
|
23
|
+
settings.define :to, description: "Convert input to given data format (json, tsv, &c.) before emitting"
|
24
|
+
|
25
|
+
settings.define :consumes, description: "Parse input as instances of given model class before processing", type: Class
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Boots Wukong::Local using the given +settings+ at the given
|
30
|
+
# +root.
|
31
|
+
#
|
32
|
+
# @param [Configliere::Param] settings the settings to use to boot
|
33
|
+
# @param [String] root the root directory to boot in
|
34
|
+
def self.boot(settings, root)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
require_relative('local/runner')
|