methadone 1.6.0 → 1.7.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.
- checksums.yaml +4 -4
- data/README.rdoc +3 -6
- data/lib/methadone/cli_logging.rb +42 -2
- data/lib/methadone/execution_strategy/base.rb +3 -3
- data/lib/methadone/version.rb +1 -1
- data/templates/full/bin/executable.erb +1 -1
- data/test/test_cli_logging.rb +59 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f6cada4890a57e4aaee044b291ed1a345e0cdc0
|
4
|
+
data.tar.gz: 3c2616c59e9a043980fa2d690934ba6877da0d00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5f40dd8ff1d8903c4447529b663c52c27063ccf718a8ece6937e6011ce53669840fb14e65c2094b8e92e460bf2156b1e1f15ed9ddc3c080e445d73edca8b0dc
|
7
|
+
data.tar.gz: 1c0d003dcf3cdc66937b8bfd3979a2b749e7b3fa09acdbc2a5a9ee5428e371834b243bcc38b23c3da100e1000b280e50db1e94679fe26bb4ede1d60b541bfc8b
|
data/README.rdoc
CHANGED
@@ -32,15 +32,12 @@ http://a1.mzstatic.com/us/r30/Publication/v4/2c/f7/90/2cf7902f-f709-9125-c73d-87
|
|
32
32
|
== Platforms
|
33
33
|
|
34
34
|
* The build runs on Travis for:
|
35
|
-
* MRI Ruby 1.8.7
|
36
35
|
* MRI Ruby 1.9.2
|
37
36
|
* MRI Ruby 1.9.3
|
38
|
-
*
|
39
|
-
*
|
37
|
+
* MRI Ruby 2.0.0
|
38
|
+
* MRI Ruby 2.1.0
|
40
39
|
* JRuby in both 1.8 and 1.9 mode
|
41
40
|
|
42
|
-
It should work on 2.0.0 but there's a weird bundler issue where some of the aruba tests fail in odd ways.
|
43
|
-
|
44
41
|
== Bootstrapping a new CLI App
|
45
42
|
|
46
43
|
The +methadone+ command-line app will bootstrap a new command-line app, setting up a proper gem structure, unit tests, and cucumber-based tests with aruba:
|
@@ -129,7 +126,7 @@ Methadone::CLILogger is designed to handle this. It's a proper subclass of Ruby
|
|
129
126
|
See {CLILogger's rdoc}[http://davetron5000.github.com/methadone/rdoc/classes/Methadone/CLILogger.html] and then {CLILogging's}[http://davetron5000.github.com/methadone/rdoc/classes/Methadone/CLILogging.html] for more.
|
130
127
|
|
131
128
|
|
132
|
-
Currently, there are classes
|
129
|
+
Currently, there are classes that assist in directing output logger-style to the right place; basically ensuring that errors go to +STDERR+ and everything else goes to +STDOUT+. All of this is, of course, configurable
|
133
130
|
|
134
131
|
== Cucumber Steps
|
135
132
|
|
@@ -74,7 +74,11 @@ module Methadone
|
|
74
74
|
}
|
75
75
|
|
76
76
|
# Call this *if* you've included Methadone::Main to set up a <tt>--log-level</tt> option for your app
|
77
|
-
# that will allow the user to configure the logging level.
|
77
|
+
# that will allow the user to configure the logging level. You can pass an optional hash with
|
78
|
+
# <tt>:toggle_debug_on_signal => <SIGNAME></tt> to enable runtime toggling of the log level by sending the
|
79
|
+
# signal <tt><SIGNAME></tt> to your app
|
80
|
+
#
|
81
|
+
# +args+:: optional hash
|
78
82
|
#
|
79
83
|
# Example:
|
80
84
|
#
|
@@ -86,12 +90,48 @@ module Methadone
|
|
86
90
|
#
|
87
91
|
# go!
|
88
92
|
#
|
89
|
-
|
93
|
+
# Example with runtime toggling:
|
94
|
+
#
|
95
|
+
#
|
96
|
+
# main do
|
97
|
+
# # your app
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# use_log_level_option :toggle_debug_on_signal => 'USR1'
|
101
|
+
#
|
102
|
+
# go!
|
103
|
+
def use_log_level_option(args = {})
|
90
104
|
on("--log-level LEVEL",LOG_LEVELS,'Set the logging level',
|
91
105
|
'(' + LOG_LEVELS.keys.join('|') + ')',
|
92
106
|
'(Default: info)') do |level|
|
93
107
|
@log_level = level
|
108
|
+
@log_level_original = level
|
109
|
+
@log_level_toggled = false
|
94
110
|
logger.level = level
|
111
|
+
|
112
|
+
setup_toggle_trap(args[:toggle_debug_on_signal])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
private
|
117
|
+
|
118
|
+
# Call this to toggle the log level between <tt>debug</tt> and its initial value
|
119
|
+
def toggle_log_level
|
120
|
+
@log_level_original = logger.level unless @log_level_toggled
|
121
|
+
logger.level = if @log_level_toggled
|
122
|
+
@log_level_original
|
123
|
+
else
|
124
|
+
LOG_LEVELS['debug']
|
125
|
+
end
|
126
|
+
@log_level_toggled = !@log_level_toggled
|
127
|
+
@log_level = logger.level
|
128
|
+
end
|
129
|
+
|
130
|
+
def setup_toggle_trap(signal)
|
131
|
+
if signal
|
132
|
+
Signal.trap(signal) do
|
133
|
+
toggle_log_level
|
134
|
+
end
|
95
135
|
end
|
96
136
|
end
|
97
137
|
end
|
@@ -18,17 +18,17 @@ module Methadone
|
|
18
18
|
# <tt>[2]</tt>:: A Process::Status-like objects that responds to <tt>exitstatus</tt> which returns
|
19
19
|
# the exit code of the command (e.g. 0 for success).
|
20
20
|
def run_command(command)
|
21
|
-
|
21
|
+
subclass_must_implement!
|
22
22
|
end
|
23
23
|
|
24
24
|
# Returns the class that, if caught by calling #run_command, represents the underlying command
|
25
25
|
# not existing. For example, in MRI Ruby, if you try to execute a non-existent command,
|
26
26
|
# you get a Errno::ENOENT.
|
27
27
|
def exception_meaning_command_not_found
|
28
|
-
|
28
|
+
subclass_must_implement!
|
29
29
|
end
|
30
30
|
protected
|
31
|
-
def
|
31
|
+
def subclass_must_implement!; raise "subclass must implement"; end
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/lib/methadone/version.rb
CHANGED
data/test/test_cli_logging.rb
CHANGED
@@ -5,6 +5,8 @@ require 'stringio'
|
|
5
5
|
class TestCLILogging < BaseTest
|
6
6
|
include Methadone
|
7
7
|
|
8
|
+
SLEEP_TIME = 0.1
|
9
|
+
|
8
10
|
def setup
|
9
11
|
@blank_format = proc do |severity,datetime,progname,msg|
|
10
12
|
msg + "\n"
|
@@ -122,11 +124,61 @@ class TestCLILogging < BaseTest
|
|
122
124
|
}
|
123
125
|
end
|
124
126
|
|
127
|
+
|
128
|
+
test_that "when we enable runtime log level toggling, it toggles the log level on receiving the set signal" do
|
129
|
+
Given {
|
130
|
+
@app = MyAppThatActsLikeItUsesMain.new
|
131
|
+
@app.call_use_log_level_option( :toggle_debug_on_signal => 'USR2' )
|
132
|
+
@level = Logger::INFO
|
133
|
+
@app.use_option(@level)
|
134
|
+
}
|
135
|
+
When {
|
136
|
+
send_signal_and_wait_a_moment('USR2')
|
137
|
+
}
|
138
|
+
Then {
|
139
|
+
@app.logger.level.should == Logger::DEBUG
|
140
|
+
}
|
141
|
+
end
|
142
|
+
|
143
|
+
test_that "when we toggle the log level and change the logger, the new logger has also it's log level increased" do
|
144
|
+
Given {
|
145
|
+
@app = MyAppThatActsLikeItUsesMain.new
|
146
|
+
@app.call_use_log_level_option( :toggle_debug_on_signal => 'USR2' )
|
147
|
+
@level = Logger::INFO
|
148
|
+
@app.use_option(@level)
|
149
|
+
}
|
150
|
+
When {
|
151
|
+
send_signal_and_wait_a_moment('USR2')
|
152
|
+
@other_logger = OpenStruct.new
|
153
|
+
@app.change_logger(@other_logger)
|
154
|
+
}
|
155
|
+
Then {
|
156
|
+
@other_logger.level.should == Logger::DEBUG
|
157
|
+
}
|
158
|
+
end
|
159
|
+
|
160
|
+
test_that "when we enable runtime log level toggling and send the signal twice, the original log level is restored" do
|
161
|
+
Given {
|
162
|
+
@app = MyAppThatActsLikeItUsesMain.new
|
163
|
+
@app.call_use_log_level_option( :toggle_debug_on_signal => 'USR2' )
|
164
|
+
@level = Logger::INFO
|
165
|
+
@app.use_option(@level)
|
166
|
+
}
|
167
|
+
When {
|
168
|
+
send_signal_and_wait_a_moment('USR2')
|
169
|
+
send_signal_and_wait_a_moment('USR2')
|
170
|
+
}
|
171
|
+
Then {
|
172
|
+
@app.logger.level.should == Logger::INFO
|
173
|
+
}
|
174
|
+
end
|
175
|
+
|
176
|
+
|
125
177
|
class MyAppThatActsLikeItUsesMain
|
126
178
|
include Methadone::CLILogging
|
127
179
|
|
128
|
-
def call_use_log_level_option
|
129
|
-
use_log_level_option
|
180
|
+
def call_use_log_level_option(args = {})
|
181
|
+
use_log_level_option(args)
|
130
182
|
end
|
131
183
|
|
132
184
|
def use_option(level)
|
@@ -183,4 +235,9 @@ class TestCLILogging < BaseTest
|
|
183
235
|
|
184
236
|
def logger_id; logger.object_id; end
|
185
237
|
end
|
238
|
+
|
239
|
+
def send_signal_and_wait_a_moment(signal)
|
240
|
+
Process.kill(signal, $$)
|
241
|
+
sleep(SLEEP_TIME) # call sleep to give the trap handler a chance to kick in
|
242
|
+
end
|
186
243
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: methadone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- davetron5000
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|