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.
@@ -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: []