methadone 0.4.1 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/methadone +7 -3
- data/features/license.feature +6 -1
- data/lib/methadone/cli_logging.rb +9 -2
- data/lib/methadone/main.rb +34 -1
- data/lib/methadone/version.rb +1 -1
- data/methadone.gemspec +1 -1
- data/test/base_test.rb +2 -19
- data/test/test_cli_logging.rb +26 -11
- data/test/test_main.rb +29 -0
- metadata +21 -21
data/bin/methadone
CHANGED
@@ -32,9 +32,13 @@ main do |app_name|
|
|
32
32
|
|
33
33
|
license = options[:license]
|
34
34
|
if license
|
35
|
-
|
35
|
+
if license == 'NONE'
|
36
|
+
license = nil
|
37
|
+
else
|
38
|
+
copy_file "#{options[:license]}_LICENSE.txt", :as => "LICENSE.txt"
|
39
|
+
end
|
36
40
|
else
|
37
|
-
warn "your app has no license"
|
41
|
+
warn "warning: your app has no license"
|
38
42
|
end
|
39
43
|
|
40
44
|
|
@@ -61,7 +65,7 @@ description "Kick the bash habit by bootstrapping your Ruby command-line apps"
|
|
61
65
|
on("--force","Overwrite files if they exist")
|
62
66
|
on("--[no-]readme","[Do not ]produce a README file")
|
63
67
|
|
64
|
-
licenses = %w(mit apache custom)
|
68
|
+
licenses = %w(mit apache custom NONE)
|
65
69
|
on("-l LICENSE","--license",licenses,"Specify the license for your project (#{licenses.join('|')})")
|
66
70
|
|
67
71
|
arg :app_name, :required
|
data/features/license.feature
CHANGED
@@ -28,5 +28,10 @@ Feature: Users should get the license included
|
|
28
28
|
|
29
29
|
Scenario: No license specified
|
30
30
|
When I successfully run `methadone tmp/newgem`
|
31
|
-
Then the stderr should contain "your app has no license"
|
31
|
+
Then the stderr should contain "warning: your app has no license"
|
32
|
+
And the README should not reference a license
|
33
|
+
|
34
|
+
Scenario: No license specified explicitly
|
35
|
+
When I successfully run `methadone -l NONE tmp/newgem`
|
36
|
+
Then the stderr should not contain "warning: your app has no license"
|
32
37
|
And the README should not reference a license
|
@@ -30,14 +30,21 @@ module Methadone
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# Change the global logger that includers will use. Useful if you
|
33
|
-
# don't want the default configured logger.
|
33
|
+
# don't want the default configured logger. Note that the +change_logger+
|
34
|
+
# version is preferred because Ruby will often parse <tt>logger = Logger.new</tt> as
|
35
|
+
# the declaration of, and assignment to, of a local variable. You'd need to
|
36
|
+
# do <tt>self.logger=Logger.new</tt> to be sure. This method
|
37
|
+
# is a bit easier.
|
34
38
|
#
|
35
39
|
# +new_logger+:: the new logger. May not be nil and should be a logger of some kind
|
36
|
-
def
|
40
|
+
def change_logger(new_logger)
|
37
41
|
raise ArgumentError,"Logger may not be nil" if new_logger.nil?
|
38
42
|
@@logger = new_logger
|
39
43
|
end
|
40
44
|
|
45
|
+
alias logger= change_logger
|
46
|
+
|
47
|
+
|
41
48
|
# pass-through to <tt>logger.debug(progname,&block)</tt>
|
42
49
|
def debug(progname = nil, &block); logger.debug(progname,&block); end
|
43
50
|
# pass-through to <tt>logger.info(progname,&block)</tt>
|
data/lib/methadone/main.rb
CHANGED
@@ -195,7 +195,23 @@ module Methadone
|
|
195
195
|
end
|
196
196
|
|
197
197
|
# Returns a Hash that you can use to store or retrieve options
|
198
|
-
# parsed from the command line
|
198
|
+
# parsed from the command line. When you put values in here, if you do so
|
199
|
+
# *before* you've declared your command-line interface via #on, the value
|
200
|
+
# will be used in the docstring to indicate it is the default.
|
201
|
+
#
|
202
|
+
# Example
|
203
|
+
#
|
204
|
+
# main do
|
205
|
+
# puts options[:foo] # put the value of --foo that the user provided
|
206
|
+
# end
|
207
|
+
#
|
208
|
+
# options[:foo] = "bar" # set "bar" as the default value for --foo, which
|
209
|
+
# # will cause us to include "(default: bar)" in the
|
210
|
+
# # docstring
|
211
|
+
#
|
212
|
+
# on("--foo FOO","Sets the foo")
|
213
|
+
# go!
|
214
|
+
#
|
199
215
|
def options
|
200
216
|
@options
|
201
217
|
end
|
@@ -291,6 +307,7 @@ module Methadone
|
|
291
307
|
# for how that works.
|
292
308
|
def on(*args,&block)
|
293
309
|
@accept_options = true
|
310
|
+
args = add_default_value_to_docstring(*args)
|
294
311
|
if block
|
295
312
|
@option_parser.on(*args,&block)
|
296
313
|
else
|
@@ -345,6 +362,22 @@ module Methadone
|
|
345
362
|
|
346
363
|
private
|
347
364
|
|
365
|
+
def add_default_value_to_docstring(*args)
|
366
|
+
default_value = nil
|
367
|
+
option_names_from(args).each do |option|
|
368
|
+
default_value = (@options[option.to_s] || @options[option.to_sym]) if default_value.nil?
|
369
|
+
end
|
370
|
+
if default_value.nil?
|
371
|
+
args
|
372
|
+
else
|
373
|
+
args + ["(default: #{default_value})"]
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
def option_names_from(args)
|
378
|
+
args.select { |_| _ =~ /^\-/ }.map { |_| _.gsub(/^\-+/,'').gsub(/\s.*$/,'') }
|
379
|
+
end
|
380
|
+
|
348
381
|
def set_banner
|
349
382
|
unless @user_specified_banner
|
350
383
|
new_banner="Usage: #{::File.basename($0)}"
|
data/lib/methadone/version.rb
CHANGED
data/methadone.gemspec
CHANGED
@@ -25,5 +25,5 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_development_dependency("cucumber","~> 1.1.1")
|
26
26
|
s.add_development_dependency("aruba")
|
27
27
|
s.add_development_dependency("simplecov", "~> 0.5")
|
28
|
-
s.add_development_dependency("
|
28
|
+
s.add_development_dependency("clean_test", "~> 0.10")
|
29
29
|
end
|
data/test/base_test.rb
CHANGED
@@ -4,24 +4,7 @@ SimpleCov.start do
|
|
4
4
|
end
|
5
5
|
require 'test/unit'
|
6
6
|
require 'rspec/expectations'
|
7
|
-
require '
|
7
|
+
require 'clean_test/test_case'
|
8
8
|
|
9
|
-
class BaseTest < Test::
|
10
|
-
# Copied from Rails; makes a test method using a string
|
11
|
-
def self.test(name, &block)
|
12
|
-
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
13
|
-
defined = instance_method(test_name) rescue false
|
14
|
-
raise "#{test_name} is already defined in #{self}" if defined
|
15
|
-
if block_given?
|
16
|
-
define_method(test_name, &block)
|
17
|
-
else
|
18
|
-
define_method(test_name) do
|
19
|
-
raise "No implementation provided for #{name}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_nothing
|
25
|
-
# Seems 1.8 wants to have a test here?
|
26
|
-
end
|
9
|
+
class BaseTest < Clean::Test::TestCase
|
27
10
|
end
|
data/test/test_cli_logging.rb
CHANGED
@@ -45,14 +45,33 @@ class TestCLILogging < BaseTest
|
|
45
45
|
}
|
46
46
|
end
|
47
47
|
|
48
|
-
test_that "we can change the global logger" do
|
48
|
+
test_that "we can change the global logger via self." do
|
49
49
|
Given {
|
50
50
|
@first = MyClassThatLogsToStdout.new
|
51
51
|
@second = MyOtherClassThatLogsToStdout.new
|
52
52
|
@logger_id = @second.logger_id
|
53
53
|
}
|
54
54
|
When {
|
55
|
-
@second.
|
55
|
+
@second.instance_eval do
|
56
|
+
self.logger=(Methadone::CLILogger.new)
|
57
|
+
end
|
58
|
+
}
|
59
|
+
Then {
|
60
|
+
@logger_id.should_not == @second.logger_id
|
61
|
+
@first.logger_id.should == @second.logger_id
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
test_that "we can change the global logger change_logger()" do
|
66
|
+
Given {
|
67
|
+
@first = MyClassThatLogsToStdout.new
|
68
|
+
@second = MyOtherClassThatLogsToStdout.new
|
69
|
+
@logger_id = @second.logger_id
|
70
|
+
}
|
71
|
+
When {
|
72
|
+
@second.instance_eval do
|
73
|
+
change_logger(Logger.new(STDERR))
|
74
|
+
end
|
56
75
|
}
|
57
76
|
Then {
|
58
77
|
@logger_id.should_not == @second.logger_id
|
@@ -65,7 +84,11 @@ class TestCLILogging < BaseTest
|
|
65
84
|
@other_class = MyOtherClassThatLogsToStdout.new
|
66
85
|
}
|
67
86
|
Then {
|
68
|
-
lambda {
|
87
|
+
lambda {
|
88
|
+
MyOtherClassThatLogsToStdout.new.instance_eval do
|
89
|
+
self.logger=(nil)
|
90
|
+
end
|
91
|
+
}.should raise_error(ArgumentError)
|
69
92
|
}
|
70
93
|
end
|
71
94
|
|
@@ -108,14 +131,6 @@ class TestCLILogging < BaseTest
|
|
108
131
|
fatal("fatal")
|
109
132
|
end
|
110
133
|
|
111
|
-
def change_logger
|
112
|
-
self.logger=Methadone::CLILogger.new
|
113
|
-
end
|
114
|
-
|
115
|
-
def change_to_nil_logger
|
116
|
-
self.logger = nil
|
117
|
-
end
|
118
|
-
|
119
134
|
def logger_id; logger.object_id; end
|
120
135
|
end
|
121
136
|
end
|
data/test/test_main.rb
CHANGED
@@ -468,6 +468,35 @@ class TestMain < BaseTest
|
|
468
468
|
}
|
469
469
|
end
|
470
470
|
|
471
|
+
test_that "default values for options are put into the docstring" do
|
472
|
+
Given {
|
473
|
+
main {}
|
474
|
+
options[:foo] = "bar"
|
475
|
+
on("--foo ARG","Indicate the type of foo")
|
476
|
+
}
|
477
|
+
When {
|
478
|
+
@help_string = opts.to_s
|
479
|
+
}
|
480
|
+
When {
|
481
|
+
@help_string.should match /\(default: bar\)/
|
482
|
+
}
|
483
|
+
|
484
|
+
end
|
485
|
+
|
486
|
+
test_that "default values for options with several names are put into the docstring" do
|
487
|
+
Given {
|
488
|
+
main {}
|
489
|
+
options[:foo] = "bar"
|
490
|
+
on("-f ARG","--foo","Indicate the type of foo")
|
491
|
+
}
|
492
|
+
When {
|
493
|
+
@help_string = opts.to_s
|
494
|
+
}
|
495
|
+
When {
|
496
|
+
@help_string.should match /\(default: bar\)/
|
497
|
+
}
|
498
|
+
end
|
499
|
+
|
471
500
|
private
|
472
501
|
|
473
502
|
def main_shouldve_been_called
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: methadone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-18 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &70157645151840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70157645151840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec-expectations
|
27
|
-
requirement: &
|
27
|
+
requirement: &70157645151280 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.6'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70157645151280
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70157645150780 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70157645150780
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rdoc
|
49
|
-
requirement: &
|
49
|
+
requirement: &70157645150160 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '3.9'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70157645150160
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: cucumber
|
60
|
-
requirement: &
|
60
|
+
requirement: &70157645149420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.1.1
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70157645149420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: aruba
|
71
|
-
requirement: &
|
71
|
+
requirement: &70157645143000 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70157645143000
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: simplecov
|
82
|
-
requirement: &
|
82
|
+
requirement: &70157645142460 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,18 +87,18 @@ dependencies:
|
|
87
87
|
version: '0.5'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70157645142460
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
|
-
name:
|
93
|
-
requirement: &
|
92
|
+
name: clean_test
|
93
|
+
requirement: &70157645141960 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
|
-
- -
|
96
|
+
- - ~>
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0.
|
98
|
+
version: '0.10'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70157645141960
|
102
102
|
description: Methadone provides a lot of small but useful features for developing
|
103
103
|
a command-line app, including an opinionated bootstrapping process, some helpful
|
104
104
|
cucumber steps, and some classes to bridge logging and output into a simple, unified,
|