help_parser 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ module HELP_PARSER
2
+ VERSION = '1.0.2'
3
+ end
@@ -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
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require 'date'
3
+
4
+ module Manifester
5
+ def self.task
6
+ system('git ls-files > Manifest.txt')
7
+ end
8
+ end
9
+
10
+ desc "Creates/Updates Manifest"
11
+ task :manifester do
12
+ Manifester.task
13
+ end
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
@@ -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
@@ -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: []