rake-commander 0.1.4 → 0.2.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/.gitignore +8 -0
- data/.rubocop.yml +12 -8
- data/CHANGELOG.md +69 -4
- data/LICENSE +21 -0
- data/README.md +94 -2
- data/Rakefile +11 -13
- data/examples/01_basic_example.rb +28 -0
- data/examples/02_a_chainer_example.rb +66 -0
- data/examples/02_a_chainer_options_set.rb +8 -0
- data/examples/02_b_chained_example.rb +13 -0
- data/examples/03_a_chainer_plus_example.rb +34 -0
- data/examples/03_b_chained_plus_example.rb +17 -0
- data/examples/Examples.rake +7 -0
- data/examples/README.md +79 -0
- data/examples/libs/shell_helpers.rb +81 -0
- data/lib/rake-commander/base/class_auto_loader.rb +45 -7
- data/lib/rake-commander/base/class_helpers.rb +16 -61
- data/lib/rake-commander/base/class_inheritable.rb +122 -0
- data/lib/rake-commander/base/custom_error.rb +52 -0
- data/lib/rake-commander/base/object_helpers.rb +42 -0
- data/lib/rake-commander/base.rb +16 -2
- data/lib/rake-commander/option.rb +115 -25
- data/lib/rake-commander/options/arguments.rb +206 -94
- data/lib/rake-commander/options/description.rb +17 -0
- data/lib/rake-commander/options/error/base.rb +86 -0
- data/lib/rake-commander/options/error/handling.rb +106 -0
- data/lib/rake-commander/options/error/invalid_argument.rb +21 -0
- data/lib/rake-commander/options/error/invalid_option.rb +9 -0
- data/lib/rake-commander/options/error/missing_argument.rb +10 -0
- data/lib/rake-commander/options/error/missing_option.rb +48 -0
- data/lib/rake-commander/options/error/unknown_argument.rb +32 -0
- data/lib/rake-commander/options/error.rb +75 -10
- data/lib/rake-commander/options/name.rb +67 -23
- data/lib/rake-commander/options/result.rb +107 -0
- data/lib/rake-commander/options/set.rb +7 -1
- data/lib/rake-commander/options.rb +175 -98
- data/lib/rake-commander/patcher/README.md +79 -0
- data/lib/rake-commander/patcher/application/run_method.rb +46 -0
- data/lib/rake-commander/patcher/application/top_level_method.rb +74 -0
- data/lib/rake-commander/patcher/application.rb +16 -0
- data/lib/rake-commander/patcher/base.rb +45 -0
- data/lib/rake-commander/patcher/debug.rb +32 -0
- data/lib/rake-commander/patcher/helpers.rb +44 -0
- data/lib/rake-commander/patcher.rb +26 -0
- data/lib/rake-commander/rake_context/wrapper.rb +2 -0
- data/lib/rake-commander/rake_task.rb +49 -54
- data/lib/rake-commander/version.rb +1 -1
- data/lib/rake-commander.rb +4 -0
- data/rake-commander.gemspec +4 -1
- metadata +74 -6
- data/examples/basic.rb +0 -30
- data/lib/rake-commander/options/error_rely.rb +0 -58
@@ -0,0 +1,44 @@
|
|
1
|
+
class RakeCommander
|
2
|
+
module Patcher
|
3
|
+
# Helpers to patch
|
4
|
+
module Helpers
|
5
|
+
# For a given method `meth` it gives the index of the parameter `arg_name`
|
6
|
+
# @return [Integer, NilClass] the position of `arg_name` in parameters.
|
7
|
+
def method_argument_idx(meth, arg_name)
|
8
|
+
arg_name = arg_name.to_sym
|
9
|
+
meth.parameters.each_with_index do |(_type, name), i|
|
10
|
+
return i if name == arg_name
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Its usage only makes sense if you extended an existing method you are patching.
|
15
|
+
# Therefore it is expected that `super` exists, so the original parameters definition
|
16
|
+
# of the method can be accessed.
|
17
|
+
# @note although the signature of a method can change through different versions
|
18
|
+
# the name of the parameters is generally preserved (specially when they are core parameters).
|
19
|
+
# @example
|
20
|
+
# module Rake
|
21
|
+
# class Application
|
22
|
+
# def init(*args)
|
23
|
+
# args = RakeCommander::Patcher.change_method_argument(:argv, method: method(__method__), args: args) do |value|
|
24
|
+
# RakeCommander.argv_rake_native_arguments(value)
|
25
|
+
# end
|
26
|
+
# super(*args)
|
27
|
+
# end
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# @param arg_name [Symbol, String] the name of the parameter as it reads in the original method.
|
32
|
+
# @param method [Method] the extended method (not its `super` method)
|
33
|
+
# @return [Array] the original arguments where `arg_name` has been changed.
|
34
|
+
def change_method_argument(arg_name, method:, args:)
|
35
|
+
raise ArgumentError, 'Expecting block' unless block_given?
|
36
|
+
raise ArgumentError, "Expecting Method. Given #{method.class}" unless method.is_a?(Method)
|
37
|
+
if idx = method_argument_idx(method.super_method, arg_name.to_sym)
|
38
|
+
args[idx] = yield(args[idx])
|
39
|
+
end
|
40
|
+
args
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'patcher/helpers'
|
2
|
+
require_relative 'patcher/debug'
|
3
|
+
require_relative 'patcher/base'
|
4
|
+
require_relative 'patcher/application'
|
5
|
+
|
6
|
+
class RakeCommander
|
7
|
+
module Patcher
|
8
|
+
extend RakeCommander::Patcher::Helpers
|
9
|
+
include RakeCommander::Patcher::Base
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def patch_include(base)
|
13
|
+
base.send :include, Application
|
14
|
+
end
|
15
|
+
|
16
|
+
def debug=(value)
|
17
|
+
@debug = !!value
|
18
|
+
end
|
19
|
+
|
20
|
+
def debug?
|
21
|
+
@debug = false unless instance_variable_defined?(:@debug)
|
22
|
+
@debug
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -3,66 +3,52 @@ require_relative 'rake_context/wrapper'
|
|
3
3
|
class RakeCommander
|
4
4
|
module RakeTask
|
5
5
|
NAMESPACE_DELIMITER = /:/.freeze
|
6
|
-
RAKE_END_COMMAND = '--'.freeze
|
7
6
|
INHERITABLE_ATTRS = [:namespace].freeze
|
8
7
|
|
9
8
|
class << self
|
10
9
|
def included(base)
|
11
10
|
super(base)
|
11
|
+
base.extend RakeCommander::Base::ClassHelpers
|
12
|
+
base.extend RakeCommander::Base::ClassInheritable
|
12
13
|
base.extend ClassMethods
|
13
|
-
base.
|
14
|
+
base.attr_inheritable(*INHERITABLE_ATTRS)
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
18
|
module ClassMethods
|
18
|
-
include RakeCommander::Base::ClassHelpers
|
19
|
-
|
20
19
|
# The rake context wrapper (to invoke rake commands)
|
21
20
|
def rake
|
22
21
|
@rake ||= RakeCommander::RakeContext::Wrapper.new
|
23
22
|
end
|
24
23
|
|
25
|
-
#
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
# and that ARGV is only parsed after `--`
|
31
|
-
# do an `exit(0)` right at the end
|
32
|
-
task_method = task_context(&task_method) if options?
|
33
|
-
|
34
|
-
if namespaced?
|
35
|
-
namespaced do
|
36
|
-
rake.desc desc
|
37
|
-
rake.task task, &task_method
|
38
|
-
end
|
39
|
-
else
|
40
|
-
rake.desc desc
|
41
|
-
rake.task task, &task_method
|
42
|
-
end
|
24
|
+
# Give a description to the task
|
25
|
+
# @return [String] the description of the task
|
26
|
+
def desc(str = :not_used)
|
27
|
+
return @desc if str == :not_used
|
28
|
+
@desc = str.to_s
|
43
29
|
end
|
44
30
|
|
45
31
|
# Give a name to the task
|
46
32
|
# @return [Symbol] the task name
|
47
|
-
def task(name =
|
48
|
-
return @task if name
|
33
|
+
def task(name = :not_used)
|
34
|
+
return @task if name == :not_used
|
49
35
|
@task = name.to_sym
|
50
36
|
end
|
51
37
|
|
52
|
-
# Give a description to the task
|
53
|
-
# @return [String] the description of the task
|
54
|
-
def desc(str = nil)
|
55
|
-
return @desc if str.nil?
|
56
|
-
@desc = str.to_s
|
57
|
-
end
|
58
|
-
|
59
38
|
# It can be hierarchical by using `NAMESPACE_DELIMITER`
|
60
39
|
# @return [String] the namespace defined for this `RakeCommander` class.
|
61
|
-
def namespace(name =
|
62
|
-
return @namespace if name
|
40
|
+
def namespace(name = :not_used)
|
41
|
+
return @namespace if name == :not_used
|
63
42
|
@namespace = namespace_str(name)
|
64
43
|
end
|
65
44
|
|
45
|
+
# It gives the task full name (including namespacing)
|
46
|
+
# @return [String]
|
47
|
+
def task_fullname
|
48
|
+
"#{namespace}:#{task}"
|
49
|
+
end
|
50
|
+
alias_method :name, :task_fullname
|
51
|
+
|
66
52
|
# Is this rake context namespaced?
|
67
53
|
# @note Rake allows to namespace tasks (i.e. `task :"run:this"`)
|
68
54
|
# Although supported by this integration, namespace detection
|
@@ -82,6 +68,28 @@ class RakeCommander
|
|
82
68
|
rake.namespace top, &block
|
83
69
|
end
|
84
70
|
|
71
|
+
# Does the final rake `task` definition
|
72
|
+
# @note although it will exist, the task won't be listed with `rake -T`
|
73
|
+
# unless it has a description (`desc`).
|
74
|
+
# @note this method is extended by some modules
|
75
|
+
# 1. `RakeCommander::Options::Result`: Ensure options are parsed before calling task
|
76
|
+
# 2. `RakeCommander::Options::Arguments`: `exit(0)` when `Rake` interprets the full `ARGV`
|
77
|
+
# rather than stopping at the delimiter (`--`)
|
78
|
+
# @return [@see Rake::Task] same results as if you used `task :name {}` or `namespace :space {}`
|
79
|
+
def install_task(&task_method)
|
80
|
+
raise "Expected task_block." unless task_method
|
81
|
+
|
82
|
+
if namespaced?
|
83
|
+
namespaced do
|
84
|
+
rake.desc desc
|
85
|
+
rake.task task, &task_method
|
86
|
+
end
|
87
|
+
else
|
88
|
+
rake.desc desc
|
89
|
+
rake.task task, &task_method
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
85
93
|
protected
|
86
94
|
|
87
95
|
# Converstion of `namespace` name to string
|
@@ -99,6 +107,14 @@ class RakeCommander
|
|
99
107
|
respond_to?(:task) ? "Usage: #{str_space}#{task} -- [options]" : nil
|
100
108
|
end
|
101
109
|
|
110
|
+
# Offer a wrapper to build the task conext througout all inheritance chain.
|
111
|
+
# @note
|
112
|
+
# - This method offers children classes a way to add their on middleware.
|
113
|
+
# @return [Proc] our wrapped task block.
|
114
|
+
def task_context(&task_method)
|
115
|
+
task_method
|
116
|
+
end
|
117
|
+
|
102
118
|
private
|
103
119
|
|
104
120
|
# Split into `Array` the namespace based on `NAMESPACE_DELIMITER`
|
@@ -114,27 +130,6 @@ class RakeCommander
|
|
114
130
|
proc { namespace name, &block }
|
115
131
|
end
|
116
132
|
end
|
117
|
-
|
118
|
-
# Rake command ends at `--` (`RAKE_END_COMMAND`).
|
119
|
-
# We only want to parse the options that come afterwards
|
120
|
-
# @note
|
121
|
-
# 1. Without `ARGV` cut, it will throw `OptionParser::InvalidOption` error
|
122
|
-
# 2. **Work-around**: We also add an `exit(0)` at the end to prevent `Rake` chaining
|
123
|
-
# option arguments as if they were actual tasks.
|
124
|
-
# @return [Proc]
|
125
|
-
def task_context(&task_method)
|
126
|
-
object = eval('self', task_method.binding, __FILE__, __LINE__)
|
127
|
-
return task_method unless object.is_a?(self)
|
128
|
-
proc do |*args|
|
129
|
-
argv = ARGV
|
130
|
-
if idx = argv.index(RAKE_END_COMMAND)
|
131
|
-
argv = argv[idx+1..-1]
|
132
|
-
end
|
133
|
-
object.options(argv)
|
134
|
-
task_method.call(*args)
|
135
|
-
exit(0)
|
136
|
-
end
|
137
|
-
end
|
138
133
|
end
|
139
134
|
|
140
135
|
def initialize
|
data/lib/rake-commander.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require_relative 'rake-commander/base'
|
3
|
+
require_relative 'rake-commander/patcher'
|
3
4
|
|
4
5
|
class RakeCommander
|
5
6
|
include RakeCommander::Base
|
7
|
+
include RakeCommander::Patcher
|
6
8
|
end
|
7
9
|
|
8
10
|
require_relative 'rake-commander/version'
|
9
11
|
require_relative 'rake-commander/custom'
|
12
|
+
|
13
|
+
RakeCommander.self_load
|
data/rake-commander.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ["Oscar Segura Samper"]
|
9
9
|
spec.email = ["oscar@ecoportal.co.nz"]
|
10
10
|
|
11
|
-
spec.summary = '
|
11
|
+
spec.summary = 'Classing rake tasks with options. Creating re-usable tasks, options and samples thereof.'
|
12
12
|
spec.homepage = "https://github.com/rellampec/rake-commander"
|
13
13
|
spec.licenses = %w[MIT]
|
14
14
|
|
@@ -22,8 +22,11 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.required_ruby_version = '>= 2.7.2'
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", ">= 2.4.9", "< 3"
|
25
|
+
spec.add_development_dependency 'dotenv', '>= 2.7.6', '< 3'
|
25
26
|
spec.add_development_dependency "rake", ">= 13.0.6", "< 14"
|
26
27
|
spec.add_development_dependency "redcarpet", ">= 3.6.0", "< 4"
|
27
28
|
spec.add_development_dependency "rspec", ">= 3.10.0", "< 4"
|
28
29
|
spec.add_development_dependency "yard", ">= 0.9.34", "< 1"
|
30
|
+
|
31
|
+
spec.add_dependency "rake", ">= 13.0.6", "< 14"
|
29
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake-commander
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oscar Segura Samper
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,6 +30,26 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '3'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: dotenv
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.7.6
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '3'
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.7.6
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '3'
|
33
53
|
- !ruby/object:Gem::Dependency
|
34
54
|
name: rake
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,6 +130,26 @@ dependencies:
|
|
110
130
|
- - "<"
|
111
131
|
- !ruby/object:Gem::Version
|
112
132
|
version: '1'
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: rake
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 13.0.6
|
140
|
+
- - "<"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '14'
|
143
|
+
type: :runtime
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 13.0.6
|
150
|
+
- - "<"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '14'
|
113
153
|
description:
|
114
154
|
email:
|
115
155
|
- oscar@ecoportal.co.nz
|
@@ -123,21 +163,49 @@ files:
|
|
123
163
|
- ".yardopts"
|
124
164
|
- CHANGELOG.md
|
125
165
|
- Gemfile
|
166
|
+
- LICENSE
|
126
167
|
- README.md
|
127
168
|
- Rakefile
|
128
|
-
- examples/
|
169
|
+
- examples/01_basic_example.rb
|
170
|
+
- examples/02_a_chainer_example.rb
|
171
|
+
- examples/02_a_chainer_options_set.rb
|
172
|
+
- examples/02_b_chained_example.rb
|
173
|
+
- examples/03_a_chainer_plus_example.rb
|
174
|
+
- examples/03_b_chained_plus_example.rb
|
175
|
+
- examples/Examples.rake
|
176
|
+
- examples/README.md
|
177
|
+
- examples/libs/shell_helpers.rb
|
129
178
|
- lib/rake-commander.rb
|
130
179
|
- lib/rake-commander/base.rb
|
131
180
|
- lib/rake-commander/base/class_auto_loader.rb
|
132
181
|
- lib/rake-commander/base/class_helpers.rb
|
182
|
+
- lib/rake-commander/base/class_inheritable.rb
|
183
|
+
- lib/rake-commander/base/custom_error.rb
|
184
|
+
- lib/rake-commander/base/object_helpers.rb
|
133
185
|
- lib/rake-commander/custom.rb
|
134
186
|
- lib/rake-commander/option.rb
|
135
187
|
- lib/rake-commander/options.rb
|
136
188
|
- lib/rake-commander/options/arguments.rb
|
189
|
+
- lib/rake-commander/options/description.rb
|
137
190
|
- lib/rake-commander/options/error.rb
|
138
|
-
- lib/rake-commander/options/
|
191
|
+
- lib/rake-commander/options/error/base.rb
|
192
|
+
- lib/rake-commander/options/error/handling.rb
|
193
|
+
- lib/rake-commander/options/error/invalid_argument.rb
|
194
|
+
- lib/rake-commander/options/error/invalid_option.rb
|
195
|
+
- lib/rake-commander/options/error/missing_argument.rb
|
196
|
+
- lib/rake-commander/options/error/missing_option.rb
|
197
|
+
- lib/rake-commander/options/error/unknown_argument.rb
|
139
198
|
- lib/rake-commander/options/name.rb
|
199
|
+
- lib/rake-commander/options/result.rb
|
140
200
|
- lib/rake-commander/options/set.rb
|
201
|
+
- lib/rake-commander/patcher.rb
|
202
|
+
- lib/rake-commander/patcher/README.md
|
203
|
+
- lib/rake-commander/patcher/application.rb
|
204
|
+
- lib/rake-commander/patcher/application/run_method.rb
|
205
|
+
- lib/rake-commander/patcher/application/top_level_method.rb
|
206
|
+
- lib/rake-commander/patcher/base.rb
|
207
|
+
- lib/rake-commander/patcher/debug.rb
|
208
|
+
- lib/rake-commander/patcher/helpers.rb
|
141
209
|
- lib/rake-commander/rake_context/wrapper.rb
|
142
210
|
- lib/rake-commander/rake_task.rb
|
143
211
|
- lib/rake-commander/version.rb
|
@@ -164,6 +232,6 @@ requirements: []
|
|
164
232
|
rubygems_version: 3.1.4
|
165
233
|
signing_key:
|
166
234
|
specification_version: 4
|
167
|
-
summary:
|
168
|
-
|
235
|
+
summary: Classing rake tasks with options. Creating re-usable tasks, options and samples
|
236
|
+
thereof.
|
169
237
|
test_files: []
|
data/examples/basic.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require_relative File.join(__dir__, '../lib/rake-commander')
|
2
|
-
class RakeCommander::Custom::Basic < RakeCommander
|
3
|
-
namespace :examples
|
4
|
-
|
5
|
-
desc 'A simple example to get started'
|
6
|
-
task :basic
|
7
|
-
|
8
|
-
#banner "Usage: basic:example -- [options]"
|
9
|
-
option '-s', '--say [SOMETHING]', "It says 'something'", default: %q(I don't know what to "say"...)
|
10
|
-
option :d, '--folder NAME', default: '.', desc: 'Source local folder', required: true
|
11
|
-
option '-e', '--enviro ENV', 'The target environment to run this task', required: true
|
12
|
-
option '-t', :show_time, TrueClass, desc: 'Displays the local time'
|
13
|
-
option :v, :debug, TrueClass, 'Shows the parsed options'
|
14
|
-
|
15
|
-
def task(*_args)
|
16
|
-
if options[:v]
|
17
|
-
puts 'We got these options:'
|
18
|
-
pp options
|
19
|
-
end
|
20
|
-
puts Time.now.strftime('%d %b at %H:%M') if options[:t]
|
21
|
-
puts options[:s] if options.key?(:s)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
RakeCommander.self_load
|
26
|
-
Rake::Task[:'examples:basic'].invoke
|
27
|
-
# ruby basic.rb -- -v -d /some/folder -t
|
28
|
-
|
29
|
-
#RakeCommander::Custom::Basic.parse_options %w[--help]
|
30
|
-
#RakeCommander::Custom::Basic.parse_options %w[-d]
|
@@ -1,58 +0,0 @@
|
|
1
|
-
class RakeCommander
|
2
|
-
module Options
|
3
|
-
# Relies between OptionParser and RakeCommander errors
|
4
|
-
class ErrorRely < StandardError
|
5
|
-
extend RakeCommander::Options::Name
|
6
|
-
|
7
|
-
OPTION_REGEX = /(?:argument|option): (?<option>.+)/i.freeze
|
8
|
-
|
9
|
-
def initialize(value)
|
10
|
-
case value
|
11
|
-
when OptionParser::MissingArgument, OptionParser::InvalidArgument
|
12
|
-
super(value.message)
|
13
|
-
when String
|
14
|
-
super(value)
|
15
|
-
else
|
16
|
-
raise ArgumentError, "Expecting String or OptionParser error. Given: #{value.class}"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def name?
|
21
|
-
option_sym.to_s.length > 1
|
22
|
-
end
|
23
|
-
|
24
|
-
def short?
|
25
|
-
option_sym.to_s.length == 1
|
26
|
-
end
|
27
|
-
|
28
|
-
def option_sym
|
29
|
-
return @option_sym if @option_sym
|
30
|
-
return nil unless match = message.match(self.class::OPTION_REGEX)
|
31
|
-
option = match[:option]
|
32
|
-
@option_sym = \
|
33
|
-
if option.length > 1
|
34
|
-
self.class.name_word_sym(option)
|
35
|
-
else
|
36
|
-
self.class.short_sym(option)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def to_description(value)
|
43
|
-
case value
|
44
|
-
when Hash
|
45
|
-
to_description(value.values.uniq)
|
46
|
-
when Array
|
47
|
-
value.map do |v|
|
48
|
-
to_description(v)
|
49
|
-
end.join(', ')
|
50
|
-
when RakeCommander::Option
|
51
|
-
"#{value.name_hyphen} (#{value.short_hyphen})"
|
52
|
-
else
|
53
|
-
value
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|