optopus 0.1.1 → 0.1.2
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/README +5 -3
- data/lib/optopus.rb +42 -9
- metadata +5 -7
data/README
CHANGED
@@ -14,6 +14,9 @@ gem install optopus
|
|
14
14
|
require 'optopus'
|
15
15
|
|
16
16
|
opts = optopus do
|
17
|
+
desc 'program information'
|
18
|
+
option :info, '-I'
|
19
|
+
|
17
20
|
desc 'print lots of debugging information'
|
18
21
|
option :debug, '-d', '--debug'
|
19
22
|
|
@@ -33,7 +36,7 @@ gem install optopus
|
|
33
36
|
option :timestamp, '-T', '--timestamp TIME', :type => Time
|
34
37
|
|
35
38
|
# read yaml config file and overwrite options
|
36
|
-
|
39
|
+
config_file '-c', '--config-file FILE'
|
37
40
|
|
38
41
|
after do
|
39
42
|
# postprocessing
|
@@ -41,8 +44,7 @@ gem install optopus
|
|
41
44
|
end
|
42
45
|
|
43
46
|
error do |e|
|
44
|
-
|
45
|
-
exit 1
|
47
|
+
abort(e.message)
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
data/lib/optopus.rb
CHANGED
@@ -15,6 +15,14 @@ module Optopus
|
|
15
15
|
@opts = opts
|
16
16
|
end
|
17
17
|
|
18
|
+
def banner=(v) ; @opts.banner = v ; end
|
19
|
+
def program_name=(v) ; @opts.program_name = v ; end
|
20
|
+
def summary_width=(v) ; @opts.psummary_width = v ; end
|
21
|
+
def summary_indent=(v) ; @opts.summary_indent = v ; end
|
22
|
+
def default_argv=(v) ; @opts.default_argv = v ; end
|
23
|
+
def version=(v) ; @opts.version = v ; end
|
24
|
+
def release=(v) ; @opts.release = v ; end
|
25
|
+
|
18
26
|
def desc(str)
|
19
27
|
@desc = str
|
20
28
|
end
|
@@ -24,7 +32,7 @@ module Optopus
|
|
24
32
|
@desc = nil
|
25
33
|
end
|
26
34
|
|
27
|
-
def
|
35
|
+
def config_file(args_hd, *args_tl)
|
28
36
|
@desc ||= 'reading config file'
|
29
37
|
@opts.add_file([args_hd] + args_tl, @desc)
|
30
38
|
@desc = nil
|
@@ -85,15 +93,25 @@ module Optopus
|
|
85
93
|
|
86
94
|
class Options
|
87
95
|
def initialize
|
96
|
+
@parser = OptionParser.new
|
88
97
|
@opts_args = []
|
89
98
|
end
|
90
99
|
|
100
|
+
def banner=(v) ; @parser.banner = v ; end
|
101
|
+
def program_name=(v) ; @parser.program_name = v ; end
|
102
|
+
def summary_width=(v) ; @parser.psummary_width = v ; end
|
103
|
+
def summary_indent=(v) ; @parser.summary_indent = v ; end
|
104
|
+
def default_argv=(v) ; @parser.default_argv = v ; end
|
105
|
+
def version=(v) ; @parser.version = v ; end
|
106
|
+
def release=(v) ; @parser.release = v ; end
|
107
|
+
|
91
108
|
def add(name, args, desc, block)
|
92
109
|
args, defval = fix_args(args, desc)
|
93
110
|
@opts_args << [name.to_sym, args, defval, block]
|
94
111
|
end
|
95
112
|
|
96
113
|
def add_file(args, desc)
|
114
|
+
raise 'config file option is defined' if @file_args
|
97
115
|
args, defval = fix_args(args, desc)
|
98
116
|
@file_args = args
|
99
117
|
end
|
@@ -107,15 +125,16 @@ module Optopus
|
|
107
125
|
end
|
108
126
|
|
109
127
|
def parse!
|
110
|
-
parser = OptionParser.new
|
111
128
|
options = {}
|
129
|
+
has_arg_v = false
|
112
130
|
has_arg_h = false
|
113
131
|
|
114
132
|
@opts_args.each do |name, args, defval, block|
|
115
133
|
options[name] = defval
|
134
|
+
has_arg_v = (args.first == '-v')
|
116
135
|
has_arg_h = (args.first == '-h')
|
117
136
|
|
118
|
-
parser.on(*args) do |*v|
|
137
|
+
@parser.on(*args) do |*v|
|
119
138
|
value = v.first || true
|
120
139
|
options[name] = value
|
121
140
|
CheckerContext.evaluate(v, {:value => value}, &block) if block
|
@@ -123,11 +142,17 @@ module Optopus
|
|
123
142
|
end
|
124
143
|
|
125
144
|
if @file_args
|
126
|
-
parser.on(*@file_args) do |v|
|
145
|
+
@parser.on(*@file_args) do |v|
|
127
146
|
config = YAML.load_file(v)
|
128
147
|
|
129
148
|
@opts_args.each do |name, args, defval, block|
|
130
|
-
|
149
|
+
if args[1].kind_of?(String) and args[1] =~ /-+([^\s=]+)/
|
150
|
+
key = $1
|
151
|
+
else
|
152
|
+
key = name.to_s
|
153
|
+
end
|
154
|
+
|
155
|
+
value = config[key] || config[name.to_s]
|
131
156
|
|
132
157
|
next unless value
|
133
158
|
|
@@ -136,7 +161,7 @@ module Optopus
|
|
136
161
|
pat, conv = OptionParser::DefaultList.atype[type]
|
137
162
|
|
138
163
|
if pat and pat !~ value
|
139
|
-
raise OptionParser::InvalidArgument.new("(#{name}: #{value})")
|
164
|
+
raise OptionParser::InvalidArgument.new(v, "(#{name}: #{value})")
|
140
165
|
end
|
141
166
|
|
142
167
|
value = conv.call(value) if conv
|
@@ -146,14 +171,22 @@ module Optopus
|
|
146
171
|
end
|
147
172
|
end
|
148
173
|
|
174
|
+
unless has_arg_v
|
175
|
+
@parser.on_tail('-v', '--version', 'show version') do
|
176
|
+
v = @parser.ver or abort("#{@parser.program_name}: version unknown")
|
177
|
+
puts v
|
178
|
+
exit
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
149
182
|
unless has_arg_h
|
150
|
-
parser.on_tail('-h', '--help', '
|
151
|
-
puts parser.help
|
183
|
+
@parser.on_tail('-h', '--help', 'show this message') do
|
184
|
+
puts @parser.help
|
152
185
|
exit
|
153
186
|
end
|
154
187
|
end
|
155
188
|
|
156
|
-
parser.parse!
|
189
|
+
@parser.parse!
|
157
190
|
CheckerContext.evaluate([], {:options => options},&@on_after) if @on_after
|
158
191
|
|
159
192
|
return options
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: optopus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- winebarrel
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-31 00:00:00
|
19
|
-
default_executable:
|
18
|
+
date: 2011-05-31 00:00:00 Z
|
20
19
|
dependencies: []
|
21
20
|
|
22
21
|
description:
|
@@ -30,7 +29,6 @@ extra_rdoc_files: []
|
|
30
29
|
files:
|
31
30
|
- README
|
32
31
|
- lib/optopus.rb
|
33
|
-
has_rdoc: true
|
34
32
|
homepage: https://bitbucket.org/winebarrel/optopus
|
35
33
|
licenses: []
|
36
34
|
|
@@ -60,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
58
|
requirements: []
|
61
59
|
|
62
60
|
rubyforge_project:
|
63
|
-
rubygems_version: 1.
|
61
|
+
rubygems_version: 1.7.2
|
64
62
|
signing_key:
|
65
63
|
specification_version: 3
|
66
64
|
summary: Enhanced option parser.
|