help_parser 1.0.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.
- checksums.yaml +7 -0
- data/History.txt +1 -0
- data/Manifest.txt +23 -0
- data/README.rdoc +72 -0
- data/Rakefile +94 -0
- data/TODO.txt +0 -0
- data/examples/command_suite +130 -0
- data/examples/implementation_error_duplicate_key +30 -0
- data/examples/implementation_error_redefinition +29 -0
- data/examples/implementation_error_terminal +30 -0
- data/examples/simple +29 -0
- data/features/edge.feature +30 -0
- data/features/simple.feature +125 -0
- data/features/step_definitions/help_parser_steps.rb +80 -0
- data/features/suite.feature +131 -0
- data/help_parser.gemspec +52 -0
- data/lib/help_parser.rb +2 -0
- data/lib/help_parser/help_parser.rb +285 -0
- data/lib/help_parser/version.rb +3 -0
- data/tasks/gemspecker.rb +60 -0
- data/tasks/manifester.rb +13 -0
- data/tasks/syntaxer.rb +25 -0
- data/tasks/unit_tests.rb +18 -0
- data/test/help_parser.rb +250 -0
- metadata +70 -0
data/tasks/gemspecker.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
module Gemspecker
|
5
|
+
def self.task
|
6
|
+
|
7
|
+
name = File.basename(Dir.getwd)
|
8
|
+
version = File.read("lib/#{name}/version.rb").match(/\d+\.\d+\.\d+/)[0]
|
9
|
+
date = Date.today.to_s
|
10
|
+
author = `git config user.name`.strip
|
11
|
+
email = `git config user.email`.strip
|
12
|
+
# get the first readme, preferably rdoc.
|
13
|
+
readme = `ls README.rdoc README.txt README* 2> /dev/null`.split.first.strip
|
14
|
+
description = File.read(readme).match(/DESCRIPTION:([^=]*)/i)[1].strip
|
15
|
+
summary = description.split(/\n\n/).first
|
16
|
+
|
17
|
+
# ./name.gemspec
|
18
|
+
File.open("./#{name}.gemspec", 'w') do |gemspec|
|
19
|
+
|
20
|
+
### Gem Specification ####
|
21
|
+
gemspec.puts <<EOT
|
22
|
+
Gem::Specification.new do |s|
|
23
|
+
|
24
|
+
s.name = '#{name}'
|
25
|
+
s.version = '#{version}'
|
26
|
+
|
27
|
+
s.homepage = 'https://github.com/#{author.downcase}/#{name}'
|
28
|
+
|
29
|
+
s.author = '#{author}'
|
30
|
+
s.email = '#{email}'
|
31
|
+
|
32
|
+
s.date = '#{date}'
|
33
|
+
s.licenses = ['MIT']
|
34
|
+
|
35
|
+
s.description = <<DESCRIPTION
|
36
|
+
#{description}
|
37
|
+
DESCRIPTION
|
38
|
+
|
39
|
+
s.summary = <<SUMMARY
|
40
|
+
#{summary}
|
41
|
+
SUMMARY
|
42
|
+
|
43
|
+
s.extra_rdoc_files = ['#{readme}']
|
44
|
+
s.rdoc_options = ["--main", "#{readme}"]
|
45
|
+
|
46
|
+
s.require_paths = ["lib"]
|
47
|
+
s.files = %w(
|
48
|
+
#{`git ls-files`})
|
49
|
+
|
50
|
+
end
|
51
|
+
EOT
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "Create/Update gemspec"
|
58
|
+
task :gemspecker do
|
59
|
+
Gemspecker.task
|
60
|
+
end
|
data/tasks/manifester.rb
ADDED
data/tasks/syntaxer.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'find'
|
3
|
+
require 'open3'
|
4
|
+
require 'rainbow'
|
5
|
+
|
6
|
+
module Syntaxer
|
7
|
+
def self.task
|
8
|
+
count = 0
|
9
|
+
Find.find('.') do |fn|
|
10
|
+
if fn=~/\.rb$/
|
11
|
+
stdout, stderr, process = Open3.capture3("ruby -c #{fn}")
|
12
|
+
unless process.exitstatus == 0
|
13
|
+
count += 1
|
14
|
+
puts stderr.chomp.color(:red)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
puts "No syntax errors found.".color(:green) if count == 0
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Checks *.rb's syntax"
|
23
|
+
task :syntaxer do
|
24
|
+
Syntaxer.task
|
25
|
+
end
|
data/tasks/unit_tests.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'find'
|
3
|
+
|
4
|
+
module UnitTests
|
5
|
+
def self.task
|
6
|
+
count = 0
|
7
|
+
Find.find('./test') do |fn|
|
8
|
+
if fn=~/\.rb$/
|
9
|
+
system("ruby -I ./lib #{fn} --verbose=progress")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Runs unit tests"
|
16
|
+
task :'unit-tests' do
|
17
|
+
UnitTests.task
|
18
|
+
end
|
data/test/help_parser.rb
ADDED
@@ -0,0 +1,250 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'help_parser/help_parser'
|
3
|
+
|
4
|
+
class Test_HELP_PARSER_HelpParser < Test::Unit::TestCase
|
5
|
+
include HELP_PARSER
|
6
|
+
|
7
|
+
class Mock
|
8
|
+
include HELP_PARSER::Errors
|
9
|
+
def version
|
10
|
+
'version'
|
11
|
+
end
|
12
|
+
def help
|
13
|
+
'help'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
MOCK = Mock.new
|
18
|
+
|
19
|
+
def test_001_usage_error_new
|
20
|
+
assert_raises(UsageError){ raise UsageError, ['message', self] }
|
21
|
+
obj = message = nil
|
22
|
+
begin
|
23
|
+
raise UsageError, ['message', self]
|
24
|
+
rescue Exception
|
25
|
+
message = $!.message
|
26
|
+
obj = $!.obj if $!.respond_to?(:obj)
|
27
|
+
end
|
28
|
+
assert(message = 'message')
|
29
|
+
refute(obj.nil?)
|
30
|
+
assert(obj == self)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_002_implementation_error_new
|
34
|
+
assert_raises(ImplementationError){ raise ImplementationError, ['message', self] }
|
35
|
+
obj = nil
|
36
|
+
begin
|
37
|
+
raise ImplementationError, ['message', self]
|
38
|
+
rescue Exception
|
39
|
+
message = $!.message
|
40
|
+
obj = $!.obj if $!.respond_to?(:obj)
|
41
|
+
end
|
42
|
+
assert(message = 'message')
|
43
|
+
refute(obj.nil?)
|
44
|
+
assert(obj == self)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_003_usage_exception_new
|
48
|
+
assert_raises(UsageException){ raise UsageException, ['message', self] }
|
49
|
+
obj = nil
|
50
|
+
begin
|
51
|
+
raise UsageException, ['message', self]
|
52
|
+
rescue Exception
|
53
|
+
message = $!.message
|
54
|
+
obj = $!.obj if $!.respond_to?(:obj)
|
55
|
+
end
|
56
|
+
assert(message = 'message')
|
57
|
+
refute(obj.nil?)
|
58
|
+
assert(obj == self)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_004_help_exception_new
|
62
|
+
assert_raises(HelpException){ raise HelpException, MOCK }
|
63
|
+
obj = nil
|
64
|
+
begin
|
65
|
+
raise HelpException, MOCK
|
66
|
+
rescue Exception
|
67
|
+
message = $!.message
|
68
|
+
obj = $!.obj if $!.respond_to?(:obj)
|
69
|
+
end
|
70
|
+
assert(message = 'help')
|
71
|
+
refute(obj.nil?)
|
72
|
+
assert(obj == MOCK)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_005_version_exception_new
|
76
|
+
assert_raises(VersionException){ raise VersionException, MOCK }
|
77
|
+
obj = nil
|
78
|
+
begin
|
79
|
+
raise VersionException, MOCK
|
80
|
+
rescue Exception
|
81
|
+
message = $!.message
|
82
|
+
obj = $!.obj if $!.respond_to?(:obj)
|
83
|
+
end
|
84
|
+
assert(message = 'version')
|
85
|
+
refute(obj.nil?)
|
86
|
+
assert(obj == MOCK)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_006_usage_exceptions
|
90
|
+
message = error = 'none'
|
91
|
+
begin
|
92
|
+
raise VersionException, MOCK
|
93
|
+
rescue StandardError
|
94
|
+
error = 'standard'
|
95
|
+
rescue Exception
|
96
|
+
error = 'exception'
|
97
|
+
message = $!.message
|
98
|
+
end
|
99
|
+
assert_equal(error, 'exception')
|
100
|
+
assert_equal(message, 'version')
|
101
|
+
|
102
|
+
error = 'none'
|
103
|
+
begin
|
104
|
+
raise HelpException, MOCK
|
105
|
+
rescue StandardError
|
106
|
+
error = 'standard'
|
107
|
+
rescue Exception
|
108
|
+
error = 'exception'
|
109
|
+
message = $!.message
|
110
|
+
end
|
111
|
+
assert_equal(error, 'exception')
|
112
|
+
assert_equal(message, 'help')
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_007_usage_errors
|
116
|
+
message = error = 'none'
|
117
|
+
begin
|
118
|
+
raise UsageError, ['error', MOCK]
|
119
|
+
rescue StandardError
|
120
|
+
message = $!.message
|
121
|
+
error = 'standard'
|
122
|
+
rescue Exception
|
123
|
+
error = 'exception'
|
124
|
+
message = 'wrong'
|
125
|
+
end
|
126
|
+
assert_equal(error, 'standard')
|
127
|
+
assert_equal(message, 'error')
|
128
|
+
|
129
|
+
error = 'none'
|
130
|
+
begin
|
131
|
+
raise ImplementationError, ['error', MOCK]
|
132
|
+
rescue StandardError
|
133
|
+
message = $!.message
|
134
|
+
error = 'standard'
|
135
|
+
rescue Exception
|
136
|
+
error = 'exception'
|
137
|
+
message = 'wrong'
|
138
|
+
end
|
139
|
+
assert_equal(error, 'standard')
|
140
|
+
assert_equal(message, 'error')
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_008_to_value
|
144
|
+
[['1', Integer], ['1.0', Float], ['One', String], ['1,2.0,Three', Array]].each do |string, type|
|
145
|
+
value = HelpParser::Function.to_value(string)
|
146
|
+
assert( value.kind_of?(type) )
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_009_str2sym
|
151
|
+
assert_equal(HelpParser.str2sym('abcd'), :abcd)
|
152
|
+
assert_equal(HelpParser.str2sym('ab-cd'), :ab_cd)
|
153
|
+
assert_equal(HelpParser.str2sym('ab_cd'), :ab_cd)
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_010_raise_error
|
157
|
+
assert_raises(UsageError){ MOCK.usage_error('usage error') }
|
158
|
+
assert_raises(ImplementationError){ MOCK.implementation_error('implementation error') }
|
159
|
+
|
160
|
+
obj = error = message = 'none'
|
161
|
+
begin
|
162
|
+
MOCK.usage_error('usage error')
|
163
|
+
rescue Exception
|
164
|
+
error = $!.class
|
165
|
+
message = $!.message
|
166
|
+
obj = $!.obj if $!.respond_to?(:obj)
|
167
|
+
end
|
168
|
+
assert_equal(error, UsageError)
|
169
|
+
assert_equal(message, 'usage error')
|
170
|
+
assert_equal(obj, MOCK)
|
171
|
+
|
172
|
+
obj = error = message = 'none'
|
173
|
+
begin
|
174
|
+
MOCK.implementation_error('implementation error')
|
175
|
+
rescue Exception
|
176
|
+
error = $!.class
|
177
|
+
message = $!.message
|
178
|
+
obj = $!.obj if $!.respond_to?(:obj)
|
179
|
+
end
|
180
|
+
assert_equal(error, ImplementationError)
|
181
|
+
assert_equal(message, 'implementation error')
|
182
|
+
assert_equal(obj, MOCK)
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_011_parse
|
186
|
+
argv = [
|
187
|
+
'-a', '-bcd', '--e', '--fgh',
|
188
|
+
'--i=z', '--jklm=y', '--nop=1', '--q=2.0', '--r=1,2.0,Three',
|
189
|
+
'--no-st'
|
190
|
+
]
|
191
|
+
|
192
|
+
options = {}
|
193
|
+
parsed = HelpParser.parse(argv, MOCK){|key, value| options[key]=value}
|
194
|
+
|
195
|
+
assert_equal options['a'], true
|
196
|
+
assert_equal options['b'], true
|
197
|
+
assert_equal options['c'], true
|
198
|
+
assert_equal options['d'], true
|
199
|
+
assert_equal options['e'], true
|
200
|
+
assert_equal options['fgh'], true
|
201
|
+
|
202
|
+
assert_equal options['i'], 'z'
|
203
|
+
assert_equal options['jklm'], 'y'
|
204
|
+
assert_equal options['nop'], 1
|
205
|
+
assert_equal options['q'], 2.0
|
206
|
+
assert_equal options['r'], [1,2.0,'Three']
|
207
|
+
|
208
|
+
assert_equal options['st'], false
|
209
|
+
|
210
|
+
refute options.has_key?('bcd')
|
211
|
+
refute options.has_key?('f')
|
212
|
+
refute options.has_key?('g')
|
213
|
+
refute options.has_key?('h')
|
214
|
+
refute options.has_key?('no-st')
|
215
|
+
refute options.has_key?('no_st')
|
216
|
+
|
217
|
+
assert_raises(UsageError){ HelpParser.parse(['--no-key=true'], MOCK){ } }
|
218
|
+
assert_nothing_raised(UsageError){ HelpParser.parse(['--no-key'], MOCK){ } }
|
219
|
+
end
|
220
|
+
|
221
|
+
# HelpParser#new, HelpParser#[], and HelpParser#defaults
|
222
|
+
# are mostly tested via cucumber.
|
223
|
+
# I'm just going to do some quick tests.
|
224
|
+
|
225
|
+
def test_012_new
|
226
|
+
argv = [
|
227
|
+
'-a', '-bcd', '--e', '--fgh',
|
228
|
+
'--i=z', '--jklm=y', '--nop=1', '--q=2.0', '--r=1,2.0,Three',
|
229
|
+
]
|
230
|
+
help = "-a\n-b\n-c\n-d\n-e\n--fgh\n-i\n--jklm\n--nop\n--q\n--r"
|
231
|
+
assert_nothing_raised{ HelpParser.new(argv, '0.1.0', help) }
|
232
|
+
assert_nothing_raised{ HelpParser.new('0.0.0', argv, help) }
|
233
|
+
assert_nothing_raised{ HelpParser.new('0.1.0', help, argv) }
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_013_defaults
|
237
|
+
options = HelpParser.new('0', '--var', [''])
|
238
|
+
options.defaults!(:var, 'A', 'B')
|
239
|
+
assert_equal( options[:var], 'A' )
|
240
|
+
|
241
|
+
options = HelpParser.new('0', '--var', ['--var'])
|
242
|
+
options.defaults!(:var, 'A', 'B')
|
243
|
+
assert_equal( options[:var], 'B' )
|
244
|
+
|
245
|
+
options = HelpParser.new('0', '--var', ['--var=C'])
|
246
|
+
options.defaults!(:var, 'A', 'B')
|
247
|
+
assert_equal( options[:var], 'C' )
|
248
|
+
end
|
249
|
+
|
250
|
+
end
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: help_parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- CarlosJHR64
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-12-13 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: |
|
14
|
+
_HelpParser_ - Parses your help text to define your command line options.
|
15
|
+
email: carlosjhr64@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files:
|
19
|
+
- README.rdoc
|
20
|
+
files:
|
21
|
+
- History.txt
|
22
|
+
- Manifest.txt
|
23
|
+
- README.rdoc
|
24
|
+
- Rakefile
|
25
|
+
- TODO.txt
|
26
|
+
- examples/command_suite
|
27
|
+
- examples/implementation_error_duplicate_key
|
28
|
+
- examples/implementation_error_redefinition
|
29
|
+
- examples/implementation_error_terminal
|
30
|
+
- examples/simple
|
31
|
+
- features/edge.feature
|
32
|
+
- features/simple.feature
|
33
|
+
- features/step_definitions/help_parser_steps.rb
|
34
|
+
- features/suite.feature
|
35
|
+
- help_parser.gemspec
|
36
|
+
- lib/help_parser.rb
|
37
|
+
- lib/help_parser/help_parser.rb
|
38
|
+
- lib/help_parser/version.rb
|
39
|
+
- tasks/gemspecker.rb
|
40
|
+
- tasks/manifester.rb
|
41
|
+
- tasks/syntaxer.rb
|
42
|
+
- tasks/unit_tests.rb
|
43
|
+
- test/help_parser.rb
|
44
|
+
homepage: https://github.com/carlosjhr64/help_parser
|
45
|
+
licenses:
|
46
|
+
- MIT
|
47
|
+
metadata: {}
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options:
|
50
|
+
- "--main"
|
51
|
+
- README.rdoc
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
requirements: []
|
65
|
+
rubyforge_project:
|
66
|
+
rubygems_version: 2.0.3
|
67
|
+
signing_key:
|
68
|
+
specification_version: 4
|
69
|
+
summary: _HelpParser_ - Parses your help text to define your command line options.
|
70
|
+
test_files: []
|