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
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'wu-local' do
|
4
|
+
|
5
|
+
let(:input) { %w[1 2 3] }
|
6
|
+
|
7
|
+
context "without any arguments" do
|
8
|
+
subject { wu_local() }
|
9
|
+
it {should exit_with(:non_zero) }
|
10
|
+
it "displays help on STDERR" do
|
11
|
+
should have_stderr(/provide a processor.*to run/)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "running outside any Ruby project" do
|
16
|
+
subject { wu_local('count').in(examples_dir('empty')) < input }
|
17
|
+
it { should exit_with(0) }
|
18
|
+
it "runs the processor" do
|
19
|
+
should have_stdout("3")
|
20
|
+
end
|
21
|
+
context "when passed a BUNDLE_GEMFILE" do
|
22
|
+
context "that doesn't belong to a deploy pack" do
|
23
|
+
subject { wu_local('count').in(examples_dir('empty')).using(integration_env.merge("BUNDLE_GEMFILE" => examples_dir('ruby_project', 'Gemfile').to_s)) < input }
|
24
|
+
it { should exit_with(0) }
|
25
|
+
it "runs the processor" do
|
26
|
+
should have_stdout("3")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
context "that belongs to a deploy pack" do
|
30
|
+
subject { wu_local('count').in(examples_dir('empty')).using(integration_env.merge("BUNDLE_GEMFILE" => examples_dir('deploy_pack', 'Gemfile').to_s)) < input }
|
31
|
+
it { should exit_with(0) }
|
32
|
+
it "runs the processor" do
|
33
|
+
should have_stdout("3")
|
34
|
+
end
|
35
|
+
context "loading the deploy pack" do
|
36
|
+
subject { wu_local('string_reverser').in(examples_dir('empty')).using(integration_env.merge("BUNDLE_GEMFILE" => examples_dir('deploy_pack', 'Gemfile').to_s)) < 'hi' }
|
37
|
+
it { should exit_with(0) }
|
38
|
+
it "runs the processor" do
|
39
|
+
should have_stdout("ih")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "running within a Ruby project" do
|
47
|
+
context "at its root" do
|
48
|
+
subject { wu_local('count').in(examples_dir('ruby_project')) < input }
|
49
|
+
it { should exit_with(0) }
|
50
|
+
it "runs the processor" do
|
51
|
+
should have_stdout("3")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
context "deep within it" do
|
55
|
+
subject { wu_local('count').in(examples_dir('ruby_project')) < input }
|
56
|
+
it { should exit_with(0) }
|
57
|
+
it "runs the processor" do
|
58
|
+
should have_stdout("3")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "running within a deploy pack" do
|
64
|
+
context "at its root" do
|
65
|
+
subject { wu_local('count').in(examples_dir('deploy_pack')) < input }
|
66
|
+
it { should exit_with(0) }
|
67
|
+
it "runs the processor" do
|
68
|
+
should have_stdout("3")
|
69
|
+
end
|
70
|
+
context "loading the deploy pack" do
|
71
|
+
subject { wu_local('string_reverser').in(examples_dir('deploy_pack')) < 'hi' }
|
72
|
+
it { should exit_with(0) }
|
73
|
+
it "runs the processor" do
|
74
|
+
should have_stdout("ih")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
context "deep within it" do
|
79
|
+
subject { wu_local('count').in(examples_dir('deploy_pack')) < input }
|
80
|
+
it { should exit_with(0) }
|
81
|
+
it "runs the processor" do
|
82
|
+
should have_stdout("3")
|
83
|
+
end
|
84
|
+
context "loading the deploy pack" do
|
85
|
+
subject { wu_local('string_reverser').in(examples_dir('deploy_pack')) < 'hi' }
|
86
|
+
it { should exit_with(0) }
|
87
|
+
it "runs the processor" do
|
88
|
+
should have_stdout("ih")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context "parsing records with the --from argument" do
|
95
|
+
subject { wu_local('identity --from=tsv') < "1\t2\t3" }
|
96
|
+
it { should exit_with(0) }
|
97
|
+
it "should emit a row for each input column" do
|
98
|
+
should have_stdout("1\n2\n3")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "formatting records with the --to argument" do
|
103
|
+
subject { wu_local('identity --from=tsv --to=json') < "1\t2\t3" }
|
104
|
+
it { should exit_with(0) }
|
105
|
+
it "should emit a single JSON array for the input record" do
|
106
|
+
should have_stdout('["1","2","3"]')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wukong
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0
|
5
|
-
prerelease:
|
4
|
+
version: 3.0.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Infochimps
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2013-02-20 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: configliere
|
@@ -181,8 +181,9 @@ files:
|
|
181
181
|
- bin/wu-lign
|
182
182
|
- bin/wu-local
|
183
183
|
- bin/wu-plus
|
184
|
-
- bin/wu-server
|
185
184
|
- bin/wu-sum
|
185
|
+
- diagrams/wu_local.dot
|
186
|
+
- diagrams/wu_local.dot.png
|
186
187
|
- examples/Gemfile
|
187
188
|
- examples/README.md
|
188
189
|
- examples/basic/string_reverser.rb
|
@@ -214,6 +215,7 @@ files:
|
|
214
215
|
- examples/geo/tile_fetcher.rb
|
215
216
|
- examples/graph/implied_geolocation/README.md
|
216
217
|
- examples/graph/minimum_spanning_tree/airfares_graphviz.rb
|
218
|
+
- examples/loadable.rb
|
217
219
|
- examples/munging/airline_flights/airline_flights.rake
|
218
220
|
- examples/munging/airline_flights/airplane.rb
|
219
221
|
- examples/munging/airline_flights/airport_id_unification.rb
|
@@ -264,6 +266,7 @@ files:
|
|
264
266
|
- examples/serverlogs/visit_paths/serverlogs-02-histograms-mapper.rb
|
265
267
|
- examples/serverlogs/visit_paths/serverlogs-03-breadcrumbs-full.rb
|
266
268
|
- examples/serverlogs/visit_paths/serverlogs-04-page_page_edges-full.rb
|
269
|
+
- examples/string_reverser.rb
|
267
270
|
- examples/text/pig_latin/pig_latinizer.rb
|
268
271
|
- examples/text/pig_latin/pig_latinizer_widget.rb
|
269
272
|
- examples/text/regional_flavor/README.md
|
@@ -288,11 +291,17 @@ files:
|
|
288
291
|
- lib/wu/social/models/twitter.rb
|
289
292
|
- lib/wu/wikipedia/models.rb
|
290
293
|
- lib/wukong.rb
|
291
|
-
- lib/wukong/boot.rb
|
292
|
-
- lib/wukong/configuration.rb
|
293
294
|
- lib/wukong/dataflow.rb
|
295
|
+
- lib/wukong/doc_helpers.rb
|
296
|
+
- lib/wukong/doc_helpers/dataflow_handler.rb
|
297
|
+
- lib/wukong/doc_helpers/field_handler.rb
|
298
|
+
- lib/wukong/doc_helpers/processor_handler.rb
|
294
299
|
- lib/wukong/driver.rb
|
295
|
-
- lib/wukong/
|
300
|
+
- lib/wukong/local.rb
|
301
|
+
- lib/wukong/local/event_machine_driver.rb
|
302
|
+
- lib/wukong/local/runner.rb
|
303
|
+
- lib/wukong/local/stdio_driver.rb
|
304
|
+
- lib/wukong/local/tcp_driver.rb
|
296
305
|
- lib/wukong/logger.rb
|
297
306
|
- lib/wukong/model/faker.rb
|
298
307
|
- lib/wukong/model/flatpack_parser/flat.rb
|
@@ -300,17 +309,23 @@ files:
|
|
300
309
|
- lib/wukong/model/flatpack_parser/lang.rb
|
301
310
|
- lib/wukong/model/flatpack_parser/parser.rb
|
302
311
|
- lib/wukong/model/flatpack_parser/tokens.rb
|
312
|
+
- lib/wukong/plugin.rb
|
303
313
|
- lib/wukong/processor.rb
|
314
|
+
- lib/wukong/rake_helper.rb
|
304
315
|
- lib/wukong/runner.rb
|
305
|
-
- lib/wukong/
|
316
|
+
- lib/wukong/runner/boot_sequence.rb
|
317
|
+
- lib/wukong/runner/code_loader.rb
|
318
|
+
- lib/wukong/runner/deploy_pack_loader.rb
|
319
|
+
- lib/wukong/runner/help_message.rb
|
306
320
|
- lib/wukong/spec_helpers.rb
|
307
|
-
- lib/wukong/spec_helpers/
|
308
|
-
- lib/wukong/spec_helpers/
|
309
|
-
- lib/wukong/spec_helpers/
|
310
|
-
- lib/wukong/spec_helpers/processor_methods.rb
|
321
|
+
- lib/wukong/spec_helpers/integration_tests.rb
|
322
|
+
- lib/wukong/spec_helpers/integration_tests/integration_test_matchers.rb
|
323
|
+
- lib/wukong/spec_helpers/integration_tests/integration_test_runner.rb
|
311
324
|
- lib/wukong/spec_helpers/shared_examples.rb
|
312
|
-
- lib/wukong/spec_helpers/
|
313
|
-
- lib/wukong/spec_helpers/
|
325
|
+
- lib/wukong/spec_helpers/unit_tests.rb
|
326
|
+
- lib/wukong/spec_helpers/unit_tests/unit_test_driver.rb
|
327
|
+
- lib/wukong/spec_helpers/unit_tests/unit_test_matchers.rb
|
328
|
+
- lib/wukong/spec_helpers/unit_tests/unit_test_runner.rb
|
314
329
|
- lib/wukong/version.rb
|
315
330
|
- lib/wukong/widget/filters.rb
|
316
331
|
- lib/wukong/widget/processors.rb
|
@@ -351,8 +366,12 @@ files:
|
|
351
366
|
- spec/wu/geo/geolocated_spec.rb
|
352
367
|
- spec/wu/model/reconcilable_spec.rb
|
353
368
|
- spec/wukong/dataflow_spec.rb
|
354
|
-
- spec/wukong/
|
369
|
+
- spec/wukong/driver_spec.rb
|
370
|
+
- spec/wukong/local/runner_spec.rb
|
371
|
+
- spec/wukong/local_spec.rb
|
372
|
+
- spec/wukong/logger_spec.rb
|
355
373
|
- spec/wukong/model/faker_spec.rb
|
374
|
+
- spec/wukong/processor_spec.rb
|
356
375
|
- spec/wukong/runner_spec.rb
|
357
376
|
- spec/wukong/widget/filters_spec.rb
|
358
377
|
- spec/wukong/widget/processors_spec.rb
|
@@ -364,7 +383,7 @@ files:
|
|
364
383
|
- spec/wukong/widget/serializers_spec.rb
|
365
384
|
- spec/wukong/widget/sink_spec.rb
|
366
385
|
- spec/wukong/widget/source_spec.rb
|
367
|
-
- spec/wukong/
|
386
|
+
- spec/wukong/wu-local_spec.rb
|
368
387
|
- spec/wukong/wukong_spec.rb
|
369
388
|
- wukong.gemspec
|
370
389
|
homepage: https://github.com/infochimps-labs/wukong
|
@@ -383,9 +402,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
383
402
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
384
403
|
none: false
|
385
404
|
requirements:
|
386
|
-
- - ! '
|
405
|
+
- - ! '>='
|
387
406
|
- !ruby/object:Gem::Version
|
388
|
-
version:
|
407
|
+
version: '0'
|
389
408
|
requirements: []
|
390
409
|
rubyforge_project:
|
391
410
|
rubygems_version: 1.8.23
|
@@ -420,8 +439,12 @@ test_files:
|
|
420
439
|
- spec/wu/geo/geolocated_spec.rb
|
421
440
|
- spec/wu/model/reconcilable_spec.rb
|
422
441
|
- spec/wukong/dataflow_spec.rb
|
423
|
-
- spec/wukong/
|
442
|
+
- spec/wukong/driver_spec.rb
|
443
|
+
- spec/wukong/local/runner_spec.rb
|
444
|
+
- spec/wukong/local_spec.rb
|
445
|
+
- spec/wukong/logger_spec.rb
|
424
446
|
- spec/wukong/model/faker_spec.rb
|
447
|
+
- spec/wukong/processor_spec.rb
|
425
448
|
- spec/wukong/runner_spec.rb
|
426
449
|
- spec/wukong/widget/filters_spec.rb
|
427
450
|
- spec/wukong/widget/processors_spec.rb
|
@@ -433,6 +456,6 @@ test_files:
|
|
433
456
|
- spec/wukong/widget/serializers_spec.rb
|
434
457
|
- spec/wukong/widget/sink_spec.rb
|
435
458
|
- spec/wukong/widget/source_spec.rb
|
436
|
-
- spec/wukong/
|
459
|
+
- spec/wukong/wu-local_spec.rb
|
437
460
|
- spec/wukong/wukong_spec.rb
|
438
461
|
has_rdoc:
|
data/bin/wu-server
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'configliere'
|
3
|
-
require 'wukong'
|
4
|
-
require 'eventmachine'
|
5
|
-
require 'em-synchrony'
|
6
|
-
require 'multi_json'
|
7
|
-
|
8
|
-
Settings({
|
9
|
-
host: "localhost",
|
10
|
-
port: 9500
|
11
|
-
})
|
12
|
-
|
13
|
-
Settings.use :commandline
|
14
|
-
Settings.resolve!
|
15
|
-
|
16
|
-
# Load the file on the command line
|
17
|
-
wu_file = ARGV.shift
|
18
|
-
load wu_file
|
19
|
-
$processor = File.basename(wu_file, '.rb').to_sym
|
20
|
-
|
21
|
-
class Wukong::Server
|
22
|
-
def prepare(options = {})
|
23
|
-
dataflow_class = Wukong.dataflow(:server){ send(options[:processor]) }
|
24
|
-
flow_builder = Wukong.registry.retrieve(:server)
|
25
|
-
flow = flow_builder.build(processor: $processor)
|
26
|
-
|
27
|
-
@buffer = []
|
28
|
-
@processor = flow.stages.values.first
|
29
|
-
@processor.emitter = ->(value){ @buffer << value }
|
30
|
-
end
|
31
|
-
|
32
|
-
def process(record)
|
33
|
-
@process.process(record)
|
34
|
-
end
|
35
|
-
|
36
|
-
def cleanup
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
# EventMachine server
|
42
|
-
|
43
|
-
class WukongMachine < EM::Protocols::LineAndTextProtocol
|
44
|
-
def post_init
|
45
|
-
puts "[server] Client connected"
|
46
|
-
@wukong = WukongInterface.new
|
47
|
-
@wukong.prepare(processor: $processor)
|
48
|
-
end
|
49
|
-
|
50
|
-
def receive_data(data)
|
51
|
-
@buffer = []
|
52
|
-
input = MultiJson.load data
|
53
|
-
|
54
|
-
op = proc { @wukong.process(input) }
|
55
|
-
callback = proc { send_data MultiJson.dump(@buffer) + "\n" }
|
56
|
-
EM.defer(op, callback)
|
57
|
-
|
58
|
-
rescue MultiJson::DecodeError => ex
|
59
|
-
STDERR.puts "[server] Dropped: Malformed request"
|
60
|
-
end
|
61
|
-
|
62
|
-
def unbind
|
63
|
-
puts "[server] Client disconnected."
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
EM::run {
|
68
|
-
EM::start_server(Settings[:host], Settings[:port], WukongMachine)
|
69
|
-
puts "Listening on #{Settings[:host]}:#{Settings[:port]}"
|
70
|
-
}
|
data/lib/wukong/boot.rb
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
module Wukong
|
2
|
-
|
3
|
-
# Boots Wukong, reading any and all relevant `settings` for your
|
4
|
-
# processors.
|
5
|
-
#
|
6
|
-
# This is most useful for any script which wants to run within a
|
7
|
-
# deploy. See Wukong::Deploy for more details.
|
8
|
-
#
|
9
|
-
# @param [Configliere::Param] settings the relevant settings object that should be configured to boot within a deploy pack
|
10
|
-
def self.boot! settings
|
11
|
-
# First we load the deploy pack's environment, but only if we seem
|
12
|
-
# to be running within a deploy pack.
|
13
|
-
Boot.load_environment if in_deploy_pack?
|
14
|
-
|
15
|
-
# Next pass the `settings` to the Deploy pack itself to add
|
16
|
-
# options it needs.
|
17
|
-
Deploy.configure(settings) if loaded_deploy_pack?
|
18
|
-
|
19
|
-
# Resolve the `settings` so we can capture all the options we need
|
20
|
-
# from the command line, the environment, &c.
|
21
|
-
settings.resolve!
|
22
|
-
|
23
|
-
# Now boot the deploy pack itself, passing in its known location
|
24
|
-
# and the `settings`
|
25
|
-
Deploy.boot!(settings, Boot.deploy_pack_dir) if loaded_deploy_pack?
|
26
|
-
end
|
27
|
-
|
28
|
-
# Is execution likely happening within a deploy pack?
|
29
|
-
#
|
30
|
-
# See Wukong::Deploy for more information on deploy packs.
|
31
|
-
#
|
32
|
-
# @return [true, false]
|
33
|
-
def self.in_deploy_pack?
|
34
|
-
return @in_deploy_pack unless @in_deploy_pack.nil?
|
35
|
-
@in_deploy_pack = (Boot.deploy_pack_dir != '/')
|
36
|
-
end
|
37
|
-
|
38
|
-
# Have we already loaded the environment of a deploy pack?
|
39
|
-
#
|
40
|
-
# See Wukong::Deploy for more information on deploy packs.
|
41
|
-
#
|
42
|
-
# @return [true, false]
|
43
|
-
def self.loaded_deploy_pack?
|
44
|
-
in_deploy_pack? && defined?(::Wukong::Deploy)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Lets Wukong bootstrap by requiring an enclosing deploy pack's
|
48
|
-
# environment file if available.
|
49
|
-
#
|
50
|
-
# We use a simple heuristic (presence of 'Gemfile' and
|
51
|
-
# 'config/environment.rb' in a non-root parent directory) to
|
52
|
-
# determine whether or not we are in a deploy pack.
|
53
|
-
module Boot
|
54
|
-
|
55
|
-
# Return the directory of the enclosing deploy pack. Will return
|
56
|
-
# the root ('/') if no deeper directory is identified as a deploy
|
57
|
-
# pack.
|
58
|
-
#
|
59
|
-
# @return [String]
|
60
|
-
def self.deploy_pack_dir
|
61
|
-
return File.dirname(ENV["BUNDLE_GEMFILE"]) if ENV["BUNDLE_GEMFILE"] && is_deploy_pack_dir?(File.dirname(ENV["BUNDLE_GEMFILE"]))
|
62
|
-
return @deploy_pack_dir if @deploy_pack_dir
|
63
|
-
wd = Dir.pwd
|
64
|
-
parent = File.dirname(wd)
|
65
|
-
until wd == parent
|
66
|
-
return wd if is_deploy_pack_dir?(wd)
|
67
|
-
wd = parent
|
68
|
-
parent = File.dirname(wd)
|
69
|
-
end
|
70
|
-
@deploy_pack_dir = wd
|
71
|
-
end
|
72
|
-
|
73
|
-
# The default environment file that will be require'd when
|
74
|
-
# booting.
|
75
|
-
#
|
76
|
-
# @return [String]
|
77
|
-
def self.environment_file
|
78
|
-
File.join(deploy_pack_dir, 'config', 'environment.rb')
|
79
|
-
end
|
80
|
-
|
81
|
-
# Load the actual deploy pack environment. Will not swallow any
|
82
|
-
# load errors.
|
83
|
-
def self.load_environment
|
84
|
-
require environment_file
|
85
|
-
end
|
86
|
-
|
87
|
-
# Could `dir` be a deploy pack dir?
|
88
|
-
#
|
89
|
-
# @param [String] dir
|
90
|
-
# @return [true, false]
|
91
|
-
def self.is_deploy_pack_dir? dir
|
92
|
-
dir && !dir.empty? && File.directory?(dir) && File.exist?(File.join(dir, 'Gemfile')) && File.exist?(File.join(dir, 'config', 'environment.rb'))
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
data/lib/wukong/configuration.rb
DELETED
data/lib/wukong/emitter.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
module Wukong
|
2
|
-
class Emitter < Hanuman::DirectedLink
|
3
|
-
|
4
|
-
def initialize(from, into)
|
5
|
-
@from = from
|
6
|
-
@into = into
|
7
|
-
@from.write_attribute(:emitter, self)
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(record)
|
11
|
-
into.process(record)
|
12
|
-
end
|
13
|
-
|
14
|
-
def to_s
|
15
|
-
"#<#{self.class}(#{from.label} -> #{into.label})>"
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
Hanuman::LinkFactory.register(:emitter, ->(from_stage, into_stage){ Wukong::Emitter.new(from_stage, into_stage) })
|
21
|
-
|
22
|
-
end
|