tork 18.2.4 → 19.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/HISTORY.markdown +65 -0
- data/README.markdown +60 -298
- data/bin/tork +99 -62
- data/bin/tork-driver +124 -25
- data/bin/tork-engine +45 -23
- data/bin/tork-herald +5 -5
- data/bin/tork-master +79 -32
- data/bin/tork-notify +70 -0
- data/bin/tork-remote +80 -0
- data/lib/tork/cliapp.rb +73 -0
- data/lib/tork/config.rb +14 -97
- data/lib/tork/config/coverage/master.rb +29 -0
- data/lib/tork/config/coverage/worker.rb +1 -0
- data/lib/tork/config/cucumber/driver.rb +11 -0
- data/lib/tork/config/cucumber/worker.rb +14 -0
- data/lib/tork/config/default/config.rb +5 -0
- data/lib/tork/config/dotlog/onfork.rb +2 -0
- data/lib/tork/config/factory_girl/onfork.rb +2 -0
- data/lib/tork/config/factory_girl/worker.rb +1 -0
- data/lib/tork/config/logdir/onfork.rb +4 -0
- data/lib/tork/config/parallel_tests/worker.rb +4 -0
- data/lib/tork/config/rails/driver.rb +15 -0
- data/lib/tork/config/rails/master.rb +12 -0
- data/lib/tork/config/rails/worker.rb +21 -0
- data/lib/tork/config/spec/driver.rb +17 -0
- data/lib/tork/config/spec/master.rb +3 -0
- data/lib/tork/config/spec/worker.rb +3 -0
- data/lib/tork/config/test/driver.rb +17 -0
- data/lib/tork/config/test/master.rb +3 -0
- data/lib/tork/config/test/worker.rb +23 -0
- data/lib/tork/driver.rb +68 -36
- data/lib/tork/engine.rb +57 -44
- data/lib/tork/master.rb +34 -34
- data/lib/tork/server.rb +118 -17
- data/lib/tork/version.rb +1 -1
- data/man/man1/tork-driver.1 +165 -37
- data/man/man1/tork-engine.1 +50 -32
- data/man/man1/tork-herald.1 +5 -8
- data/man/man1/tork-master.1 +95 -42
- data/man/man1/tork-notify.1 +27 -0
- data/man/man1/tork-remote.1 +38 -0
- data/man/man1/tork.1 +116 -8
- data/tork.gemspec +3 -3
- metadata +36 -25
- data/lib/tork/client.rb +0 -53
- data/lib/tork/config/coverage.rb +0 -40
- data/lib/tork/config/cucumber.rb +0 -32
- data/lib/tork/config/dotlog.rb +0 -8
- data/lib/tork/config/factory_girl.rb +0 -10
- data/lib/tork/config/logdir.rb +0 -10
- data/lib/tork/config/notify.rb +0 -34
- data/lib/tork/config/parallel_tests.rb +0 -9
- data/lib/tork/config/rails.rb +0 -39
data/bin/tork-herald
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
=begin =======================================================================
|
3
3
|
|
4
|
-
# TORK-HERALD 1 2012-10-
|
4
|
+
# TORK-HERALD 1 2012-10-17 19.0.0
|
5
5
|
|
6
6
|
## NAME
|
7
7
|
|
@@ -13,9 +13,9 @@ tork-herald - reports modified files
|
|
13
13
|
|
14
14
|
## DESCRIPTION
|
15
15
|
|
16
|
-
This program monitors the current working directory and
|
17
|
-
|
18
|
-
|
16
|
+
This program monitors the current working directory and all those below it
|
17
|
+
recursively. When any files therein are modified, it prints their relative
|
18
|
+
paths in a single-line JSON array to stdout.
|
19
19
|
|
20
20
|
## OPTIONS
|
21
21
|
|
@@ -24,7 +24,7 @@ stream.
|
|
24
24
|
|
25
25
|
## SEE ALSO
|
26
26
|
|
27
|
-
tork(1), tork-
|
27
|
+
tork(1), tork-driver(1)
|
28
28
|
|
29
29
|
=end =========================================================================
|
30
30
|
|
data/bin/tork-master
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
=begin =======================================================================
|
3
3
|
|
4
|
-
# TORK-MASTER 1 2012-10-
|
4
|
+
# TORK-MASTER 1 2012-10-17 19.0.0
|
5
5
|
|
6
6
|
## NAME
|
7
7
|
|
@@ -13,39 +13,47 @@ tork-master - absorbs overhead and runs tests
|
|
13
13
|
|
14
14
|
## DESCRIPTION
|
15
15
|
|
16
|
-
This program absorbs
|
17
|
-
|
18
|
-
|
16
|
+
This program absorbs your Ruby application's test execution overhead once and
|
17
|
+
simply fork(3)s worker processses to run your tests thereafter. As a result,
|
18
|
+
your tests run faster because they no longer spend any time absorbing the test
|
19
|
+
execution overhead: worker processes simply inherit the overhead when forked.
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
This program can be controlled remotely by multiple tork-remote(1) instances.
|
22
|
+
|
23
|
+
### Input
|
24
|
+
|
25
|
+
This program reads the following commands, which are single-line JSON arrays,
|
26
|
+
from stdin and performs the actions described respectively.
|
24
27
|
|
25
28
|
`["test",` *test_file*`,` *line_numbers*`]`
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
Forks a worker process to run tests that correspond to the given
|
30
|
+
*line_numbers* in the given *test_file*. If *line_numbers* is empty, then
|
31
|
+
the entire *test_file* will be run.
|
32
|
+
|
33
|
+
`["stop",` *signal*`]`
|
34
|
+
Stops all tests that are currently running by sending the given *signal*
|
35
|
+
(optional; defaults to "SIGTERM") to their respective worker processes.
|
36
|
+
|
37
|
+
`["quit"]`
|
38
|
+
Stops all tests that are currently running and exits.
|
29
39
|
|
30
|
-
|
31
|
-
standard output and error streams of the forked child process are captured
|
32
|
-
in the *log_file* specified in these status messages.
|
40
|
+
### Output
|
33
41
|
|
34
|
-
|
35
|
-
|
42
|
+
This program prints the following messages, which are single-line JSON arrays,
|
43
|
+
to stdout.
|
36
44
|
|
37
|
-
|
38
|
-
|
45
|
+
`["absorb"]`
|
46
|
+
Test execution overhead has been absorbed. We are ready for testing!
|
39
47
|
|
40
|
-
|
41
|
-
|
48
|
+
`["test",` *test_file*`,` *line_numbers*`,` *log_file*`,` *worker_number*`]`
|
49
|
+
Test has begun running. Its output (both stdout and stderr) is being
|
50
|
+
captured into *log_file* in real time, so you can watch it with `tail -f`.
|
42
51
|
|
43
|
-
`["
|
44
|
-
|
45
|
-
to the standard output stream.
|
52
|
+
`["pass",` *test_file*`,` *line_numbers*`,` *log_file*`,` *worker_number*`,` *exit_code*`,` *exit_info*`]`
|
53
|
+
Test has passed.
|
46
54
|
|
47
|
-
`["
|
48
|
-
|
55
|
+
`["fail",` *test_file*`,` *line_numbers*`,` *log_file*`,` *worker_number*`,` *exit_code*`,` *exit_info*`]`
|
56
|
+
Test has failed.
|
49
57
|
|
50
58
|
## OPTIONS
|
51
59
|
|
@@ -54,19 +62,58 @@ input stream and performs the respective actions as described below.
|
|
54
62
|
|
55
63
|
## FILES
|
56
64
|
|
57
|
-
*.tork.rb*
|
58
|
-
Optional Ruby script
|
65
|
+
*.tork/config.rb*
|
66
|
+
Optional Ruby script that is loaded inside the driver process on startup.
|
67
|
+
It can read and change the `ENV['TORK_CONFIGS']` environment variable.
|
68
|
+
|
69
|
+
*.tork/master.rb*
|
70
|
+
Optional Ruby script that is loaded inside the master process on startup.
|
71
|
+
It can read and change the following variables.
|
72
|
+
|
73
|
+
> `Tork::Master::MAX_CONCURRENT_WORKERS`
|
74
|
+
> Maximum number of worker processes that are allowed to be running
|
75
|
+
> simultaneously at any given time. The default value is either the
|
76
|
+
> number of processors detected on your system or 1 if detection failed.
|
77
|
+
|
78
|
+
*.tork/onfork.rb*
|
79
|
+
Optional Ruby script that is loaded inside the master process just before a
|
80
|
+
worker process is forked. It can read and change the following variables.
|
81
|
+
|
82
|
+
> `$tork_test_file`
|
83
|
+
> Path of the test file that will be run by the worker process.
|
84
|
+
>
|
85
|
+
> `$tork_line_numbers`
|
86
|
+
> Array of line numbers in the test file that were requested to be run.
|
87
|
+
>
|
88
|
+
> `$tork_log_file`
|
89
|
+
> Path of the log file that will hold the output of the worker process.
|
90
|
+
>
|
91
|
+
> `$tork_worker_number`
|
92
|
+
> Sequence number of the worker process that will be forked shortly.
|
93
|
+
|
94
|
+
*.tork/worker.rb*
|
95
|
+
Optional Ruby script that is loaded inside a worker process just after
|
96
|
+
it is forked. It can read and change the following variables.
|
97
|
+
|
98
|
+
> `$tork_test_file`
|
99
|
+
> Path of the test file that will be run by this worker process.
|
100
|
+
>
|
101
|
+
> `$tork_line_numbers`
|
102
|
+
> Array of line numbers in the test file that were requested to be run.
|
103
|
+
>
|
104
|
+
> `$tork_log_file`
|
105
|
+
> Path of the log file that will hold the output of this worker process.
|
106
|
+
>
|
107
|
+
> `$tork_worker_number`
|
108
|
+
> Sequence number of this worker process.
|
59
109
|
|
60
110
|
## ENVIRONMENT
|
61
111
|
|
62
|
-
|
63
|
-
A single-line JSON array containing paths to actual files or names of
|
64
|
-
helper libraries in the tork/config/ namespace of Ruby's load path.
|
65
|
-
These configuration files are loaded just before *.tork.rb* is loaded.
|
112
|
+
See tork(1).
|
66
113
|
|
67
114
|
## SEE ALSO
|
68
115
|
|
69
|
-
tork(1), tork-
|
116
|
+
tork(1), tork-remote(1)
|
70
117
|
|
71
118
|
=end =========================================================================
|
72
119
|
|
data/bin/tork-notify
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
=begin =======================================================================
|
3
|
+
|
4
|
+
# TORK-NOTIFY 1 2012-10-17 19.0.0
|
5
|
+
|
6
|
+
## NAME
|
7
|
+
|
8
|
+
tork-notify - notifies you of test status changes
|
9
|
+
|
10
|
+
## SYNOPSIS
|
11
|
+
|
12
|
+
`tork-notify` [*OPTION*]...
|
13
|
+
|
14
|
+
## DESCRIPTION
|
15
|
+
|
16
|
+
This program serves as an example of how to receive and process messages sent
|
17
|
+
by the various programs in the tork(1) suite. It notifies you when previously
|
18
|
+
passing tests fail (or vice versa) through libnotify, xmessage, or growl. If
|
19
|
+
none are available on your system, then the notification is printed to stdout.
|
20
|
+
|
21
|
+
## OPTIONS
|
22
|
+
|
23
|
+
`-h`, `--help`
|
24
|
+
Show this help manual.
|
25
|
+
|
26
|
+
## EXIT STATUS
|
27
|
+
|
28
|
+
See tork-remote(1).
|
29
|
+
|
30
|
+
## SEE ALSO
|
31
|
+
|
32
|
+
tork-remote(1), tork-engine(1)
|
33
|
+
|
34
|
+
=end =========================================================================
|
35
|
+
|
36
|
+
$0 = File.basename(__FILE__) # for easier identification in ps(1) output
|
37
|
+
|
38
|
+
require 'binman'
|
39
|
+
BinMan.help
|
40
|
+
|
41
|
+
require 'json'
|
42
|
+
IO.popen('tork-remote tork-engine', 'r+') do |remote|
|
43
|
+
while message = remote.gets
|
44
|
+
event, test_file, *details = JSON.load(message)
|
45
|
+
|
46
|
+
# make notifications edge-triggered: pass => fail or vice versa.
|
47
|
+
# we do not care about pass => pass or fail => fail transitions.
|
48
|
+
icon = case event.to_sym
|
49
|
+
when :fail_now_pass then 'dialog-information'
|
50
|
+
when :pass_now_fail then 'dialog-error'
|
51
|
+
end
|
52
|
+
|
53
|
+
if icon
|
54
|
+
_, _, line_numbers, log_file = details.first
|
55
|
+
|
56
|
+
title = [event.upcase, test_file].join(' ')
|
57
|
+
|
58
|
+
statistics = File.readlines(log_file).grep(/^\d+ \w+,/).join.
|
59
|
+
gsub(/\e\[\d+(;\d+)?m/, '') # strip ANSI SGR escape codes
|
60
|
+
|
61
|
+
Thread.new do # run in background
|
62
|
+
system 'notify-send', '-i', icon, title, statistics or
|
63
|
+
system 'growlnotify', '-a', 'Xcode', '-m', statistics, title or
|
64
|
+
system 'xmessage', '-timeout', '5', '-title', title, statistics or
|
65
|
+
puts title, statistics, nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
exit $?.exitstatus
|
data/bin/tork-remote
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
=begin =======================================================================
|
3
|
+
|
4
|
+
# TORK-REMOTE 1 2012-09-26 18.2.3
|
5
|
+
|
6
|
+
## NAME
|
7
|
+
|
8
|
+
tork-remote - controls tork(1) programs
|
9
|
+
|
10
|
+
## SYNOPSIS
|
11
|
+
|
12
|
+
`tork-remote` [*OPTION*]... *PROGRAM*
|
13
|
+
|
14
|
+
## DESCRIPTION
|
15
|
+
|
16
|
+
This program sends single-line JSON messages read from its stdin to the given
|
17
|
+
*PROGRAM* which is already running in the same working directory as this one.
|
18
|
+
|
19
|
+
If lines read from stdin are not single-line JSON messages, then they are
|
20
|
+
split into an array of words, using the same word-splitting algorithm as
|
21
|
+
sh(1), before being sent to the *PROGRAM* as a single-line JSON message.
|
22
|
+
|
23
|
+
If the *PROGRAM* sends any messages in response, then they are printed to
|
24
|
+
stdout if they are valid single-line JSON messages or to stderr otherwise.
|
25
|
+
|
26
|
+
## OPTIONS
|
27
|
+
|
28
|
+
`-h`, `--help`
|
29
|
+
Show this help manual.
|
30
|
+
|
31
|
+
## EXIT STATUS
|
32
|
+
|
33
|
+
1
|
34
|
+
Could not connect to the *PROGRAM*.
|
35
|
+
|
36
|
+
2
|
37
|
+
Lost connection to the *PROGRAM*.
|
38
|
+
|
39
|
+
## SEE ALSO
|
40
|
+
|
41
|
+
tork(1), tork-driver(1), tork-engine(1), tork-master(1)
|
42
|
+
|
43
|
+
=end =========================================================================
|
44
|
+
|
45
|
+
$0 = File.basename(__FILE__) # for easier identification in ps(1) output
|
46
|
+
|
47
|
+
require 'binman'
|
48
|
+
BinMan.help
|
49
|
+
|
50
|
+
require 'socket'
|
51
|
+
require 'shellwords'
|
52
|
+
require 'tork/server'
|
53
|
+
|
54
|
+
program = ARGV.shift or raise ArgumentError, 'PROGRAM not given'
|
55
|
+
address = Tork::Server.address(program)
|
56
|
+
|
57
|
+
begin
|
58
|
+
UNIXSocket.open(address) do |socket|
|
59
|
+
# messages to remote from server
|
60
|
+
Thread.new do
|
61
|
+
while input = socket.gets
|
62
|
+
stream = input =~ Tork::Server::JSON_REGEXP ? STDOUT : STDERR
|
63
|
+
stream.puts input
|
64
|
+
stream.flush
|
65
|
+
end
|
66
|
+
warn "#{$0}: lost connection to #{program}"
|
67
|
+
exit 2
|
68
|
+
end
|
69
|
+
|
70
|
+
# messages from remote to server
|
71
|
+
while output = STDIN.gets
|
72
|
+
socket.puts output
|
73
|
+
end
|
74
|
+
end
|
75
|
+
# ECONNREFUSED is for abstract namespace UNIXSocket
|
76
|
+
rescue Errno::ENOENT, Errno::ECONNREFUSED => error
|
77
|
+
warn "#{$0}: could not connect to #{program}"
|
78
|
+
warn "#{error}#{address.inspect}"
|
79
|
+
exit 1
|
80
|
+
end
|
data/lib/tork/cliapp.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'tork/server'
|
2
|
+
|
3
|
+
module Tork
|
4
|
+
class CLIApp < Server
|
5
|
+
|
6
|
+
COMMANDS = {
|
7
|
+
't' => :run_test_file,
|
8
|
+
'a' => :run_all_test_files,
|
9
|
+
's' => :stop_running_test_files,
|
10
|
+
'k' => [:stop_running_test_files, :SIGKILL],
|
11
|
+
'p' => :rerun_passed_test_files,
|
12
|
+
'f' => :rerun_failed_test_files,
|
13
|
+
'o' => :reabsorb_overhead,
|
14
|
+
'q' => :quit,
|
15
|
+
}
|
16
|
+
|
17
|
+
def loop
|
18
|
+
tell @clients, 'Absorbing test execution overhead...', false
|
19
|
+
@driver = popen('tork-driver')
|
20
|
+
super
|
21
|
+
ensure
|
22
|
+
pclose @driver
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def recv client, message
|
28
|
+
case client
|
29
|
+
when @driver
|
30
|
+
event, *details = message
|
31
|
+
|
32
|
+
case event_sym = event.to_sym
|
33
|
+
when :absorb
|
34
|
+
tell @clients, 'Overhead absorbed. Ready for testing!', false
|
35
|
+
|
36
|
+
when :reabsorb
|
37
|
+
tell @clients, 'Reabsorbing changed overhead files...', false
|
38
|
+
|
39
|
+
when :test, :pass, :fail
|
40
|
+
test_file, line_numbers, log_file, worker_number, exit_status = details
|
41
|
+
message = [event.upcase, [test_file, *line_numbers].join(':'),
|
42
|
+
exit_status].compact.join(' ')
|
43
|
+
|
44
|
+
color = case event_sym
|
45
|
+
when :pass then "\e[34m%s\e[0m" # blue
|
46
|
+
when :fail then "\e[31m%s\e[0m" # red
|
47
|
+
end
|
48
|
+
message = color % message if color and STDOUT.tty?
|
49
|
+
message = [message, File.read(log_file), message] if event_sym == :fail
|
50
|
+
|
51
|
+
tell @clients, message, false
|
52
|
+
end
|
53
|
+
else
|
54
|
+
key, *args = message
|
55
|
+
key &&= key.lstrip[0,1].downcase
|
56
|
+
|
57
|
+
if cmd = COMMANDS[key]
|
58
|
+
quit if cmd == :quit
|
59
|
+
call = Array(cmd) + args
|
60
|
+
tell @clients, "Sending #{call.inspect} command...", false
|
61
|
+
send @driver, call
|
62
|
+
else
|
63
|
+
# user typed an invalid command so help them along
|
64
|
+
COMMANDS.each do |key, cmd|
|
65
|
+
desc = Array(cmd).join(' with ').to_s.tr('_', ' ')
|
66
|
+
tell @client, "Type #{key} then ENTER to #{desc}.", false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
data/lib/tork/config.rb
CHANGED
@@ -1,100 +1,17 @@
|
|
1
1
|
module Tork
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
Config.max_forked_workers = [
|
14
|
-
# http://stackoverflow.com/questions/891537#6420817
|
15
|
-
'fgrep -c processor /proc/cpuinfo', # Linux
|
16
|
-
'sysctl -n hw.ncpu', # BSD
|
17
|
-
'hwprefs cpu_count', # Darwin 9
|
18
|
-
'hwprefs thread_count', # Darwin 10
|
19
|
-
].map {|cmd| `#{cmd} 2>/dev/null`.to_i }.push(1).max
|
20
|
-
|
21
|
-
Config.overhead_load_paths = ['lib', 'test', 'spec']
|
22
|
-
|
23
|
-
Config.overhead_file_globs = ['{test,spec}/{test,spec}_helper.rb']
|
24
|
-
|
25
|
-
Config.reabsorb_file_greps = [%r<^(test|spec)/\1_helper\.rb$>]
|
26
|
-
|
27
|
-
Config.all_test_file_globs = ['{test,spec}/**/*_{test,spec}.rb',
|
28
|
-
'{test,spec}/**/{test,spec}_*.rb']
|
29
|
-
|
30
|
-
Config.test_file_globbers = {
|
31
|
-
# source files that correspond to test files
|
32
|
-
%r<^lib/.*?([^/]+)\.rb$> => lambda do |matches|
|
33
|
-
name = matches[1]
|
34
|
-
["{test,spec}/**/#{name}_{test,spec}.rb",
|
35
|
-
"{test,spec}/**/{test,spec}_#{name}.rb"]
|
36
|
-
end,
|
37
|
-
|
38
|
-
# the actual test files themselves
|
39
|
-
%r<^(test|spec)/.*?(\1_[^/]+|[^/]+_\1)\.rb$> => lambda {|m| m[0] }
|
40
|
-
}
|
41
|
-
|
42
|
-
Config.before_fork_hooks = []
|
43
|
-
|
44
|
-
Config.after_fork_hooks = [
|
45
|
-
# instruct the testing framework to only run those
|
46
|
-
# tests that are defined on the given line numbers
|
47
|
-
lambda do |test_file, line_numbers, log_file, worker_number|
|
48
|
-
case File.basename(test_file)
|
49
|
-
when /(\b|_)spec(\b|_).*\.rb$/ # RSpec
|
50
|
-
line_numbers.each {|line| ARGV.push '--line_number', line.to_s }
|
51
|
-
|
52
|
-
when /(\b|_)test(\b|_).*\.rb$/ # Test::Unit
|
53
|
-
# find which tests have changed inside the test file
|
54
|
-
test_file_lines = File.readlines(test_file)
|
55
|
-
test_names = line_numbers.map do |line|
|
56
|
-
catch :found do
|
57
|
-
# search backwards from the line that changed up to
|
58
|
-
# the first line in the file for test definitions
|
59
|
-
line.downto(0) do |i|
|
60
|
-
test_name =
|
61
|
-
case test_file_lines[i]
|
62
|
-
when /^\s*def\s+test_(\w+)/ then $1
|
63
|
-
when /^\s*(test|context|should|describe|it)\b.+?(['"])(.*?)\2/
|
64
|
-
# elide string interpolation and invalid method name characters
|
65
|
-
$3.gsub(/\#\{.*?\}/, ' ').strip.gsub(/\W+/, '.*')
|
66
|
-
end \
|
67
|
-
and throw :found, test_name
|
68
|
-
end; nil # prevent unsuccessful search from returning an integer
|
69
|
-
end
|
70
|
-
end.compact.uniq
|
71
|
-
|
72
|
-
unless test_names.empty?
|
73
|
-
ARGV.push '--name', "/(?i:#{test_names.join('|')})/"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
]
|
78
|
-
|
79
|
-
Config.test_event_hooks = []
|
80
|
-
|
81
|
-
#---------------------------------------------------------------------------
|
82
|
-
# overrides
|
83
|
-
#---------------------------------------------------------------------------
|
84
|
-
|
85
|
-
if File.exist? user_config_file = '.tork.rb'
|
86
|
-
load user_config_file
|
87
|
-
end
|
88
|
-
|
89
|
-
if ENV.key? 'TORK_CONFIGS'
|
90
|
-
require 'json'
|
91
|
-
JSON.load(ENV['TORK_CONFIGS']).each do |config|
|
92
|
-
if File.file? config
|
93
|
-
load File.expand_path(config)
|
94
|
-
else
|
95
|
-
require "tork/config/#{config}"
|
96
|
-
end
|
97
|
-
end
|
2
|
+
# Loads all Ruby scripts found having the given name in (1) the directories
|
3
|
+
# specified in the TORK_CONFIGS environment variable, (2) the subdirectories
|
4
|
+
# of lib/tork/config/, and (3) the user's .tork/ directory; in that order.
|
5
|
+
#
|
6
|
+
# @return [Array] paths of Ruby scripts that were loaded
|
7
|
+
#
|
8
|
+
def self.config name
|
9
|
+
dirs = ENV['TORK_CONFIGS'].strip.split(/:+/).reject(&:empty?).uniq.
|
10
|
+
map {|dir| [dir, __FILE__.sub(/\.rb$/, "/#{dir}")] }.flatten
|
11
|
+
|
12
|
+
Dir["{#{dirs.join(',')},.tork}/#{name}.rb"].each {|script| load script }
|
98
13
|
end
|
99
|
-
|
100
14
|
end
|
15
|
+
|
16
|
+
ENV['TORK_CONFIGS'] ||= 'default'.freeze # ENV values come frozen by default
|
17
|
+
Tork.config :config
|