synoption 0.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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fe1c709d5995beaa457aa686b213cce88234b0a1
4
+ data.tar.gz: 59c59d6d95786ce9e750c0e42418c4665400b229
5
+ SHA512:
6
+ metadata.gz: 25ac687f69df1bccc08f29136f807af33401fc3643050f6b4959cecd6675608399071d0b25e6a574b7ebcb459cf7ae005292c67e9787e3176ffcf615c24f24d6
7
+ data.tar.gz: 7d1af4a7d5dea65241177b5eff102fc9de53cd0d3fbae9c865a8efaa7e301a3df11aab09c928d438391c4abbe85dc357da7bcaf5f17d9e73d8ee0946915fdd59
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'rubygems'
5
+ require 'logue/loggable'
6
+ require 'synoption/doc'
7
+ require 'synoption/match'
8
+ require 'synoption/matchers'
9
+
10
+ module Synoption
11
+ class BaseOption
12
+ include Logue::Loggable
13
+
14
+ # for as_cmdline_option:
15
+ NO_CMDLINE_OPTION = Object.new
16
+
17
+ attr_reader :name
18
+ attr_reader :tag
19
+ attr_reader :description
20
+ attr_reader :default
21
+
22
+ attr_reader :negate
23
+ attr_reader :regexp
24
+
25
+ def initialize name, tag, description, default, options = Hash.new
26
+ @name = name
27
+ @tag = tag
28
+ @description = description
29
+
30
+ @value = @default = default
31
+
32
+ @matchers = Matchers.new @tag, @name, options[:negate], options[:regexp]
33
+
34
+ @negate = options[:negate]
35
+ @regexp = options[:regexp]
36
+
37
+ if options.include? :as_cmdline_option
38
+ if options[:as_cmdline_option].nil?
39
+ @as_cmdline_option = NO_CMDLINE_OPTION
40
+ else
41
+ @as_cmdline_option = options[:as_cmdline_option]
42
+ end
43
+ else
44
+ @as_cmdline_option = nil
45
+ end
46
+
47
+ @unsets = options[:unsets]
48
+ end
49
+
50
+ def takes_value?
51
+ true
52
+ end
53
+
54
+ def to_command_line
55
+ return nil unless value
56
+
57
+ if @as_cmdline_option
58
+ @as_cmdline_option == NO_CMDLINE_OPTION ? nil : @as_cmdline_option
59
+ else
60
+ [ tag, value ]
61
+ end
62
+ end
63
+
64
+ def to_s
65
+ [ @name, @tag ].join(", ")
66
+ end
67
+
68
+ def exact_match? arg
69
+ @matchers.exact.match? arg
70
+ end
71
+
72
+ def negative_match? arg
73
+ @matchers.negative and @matchers.negative.match? arg
74
+ end
75
+
76
+ def regexp_match? arg
77
+ @matchers.regexp and @matchers.regexp.match? arg
78
+ end
79
+
80
+ def unset
81
+ @value = nil
82
+ end
83
+
84
+ def set_value val
85
+ @value = val
86
+ end
87
+
88
+ def value
89
+ @value
90
+ end
91
+
92
+ def to_doc io
93
+ doc = Doc.new self
94
+ doc.to_doc io
95
+ end
96
+
97
+ def next_argument args
98
+ raise "ERROR: option #{name} expecting following argument" if args.empty?
99
+ args.shift
100
+ end
101
+
102
+ def process args
103
+ if @matchers.exact.match? args[0]
104
+ args.shift
105
+ val = takes_value? ? next_argument(args) : true
106
+ set_value val
107
+ true
108
+ elsif @matchers.negative && @matchers.negative.match?(args[0])
109
+ arg = args.shift
110
+ set_value false
111
+ true
112
+ elsif @matchers.regexp && (md = @matchers.regexp.match?(args[0]))
113
+ arg = args.shift
114
+ set_value md[0]
115
+ true
116
+ else
117
+ false
118
+ end
119
+ end
120
+
121
+ def post_process option_set, unprocessed
122
+ resolve_value option_set, unprocessed
123
+
124
+ if @unsets
125
+ option_set.unset @unsets
126
+ end
127
+ end
128
+
129
+ def resolve_value option_set, unprocessed
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'synoption/option'
5
+
6
+ module Synoption
7
+ # a boolean option maps to a single tag, not a tag and value. For example,
8
+ # "-v" (verbose) is a boolean option, but "-r 3444" (revision) is a option
9
+ # with a value.
10
+ class BooleanOption < Option
11
+ def takes_value?
12
+ false
13
+ end
14
+
15
+ def to_command_line
16
+ super && [ tag ]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'rubygems'
5
+ require 'logue/loggable'
6
+
7
+ module Synoption
8
+ # documentation for an option.
9
+ class Doc
10
+ include Logue::Loggable
11
+
12
+ def initialize option
13
+ @option = option
14
+ end
15
+
16
+ def to_doc_tag
17
+ tagline = "#{@option.tag} [--#{@option.name}]"
18
+ if @option.takes_value?
19
+ tagline << " ARG"
20
+ end
21
+ tagline
22
+ end
23
+
24
+ # returns an option regexp as a 'cleaner' string
25
+ def re_to_string re
26
+ re.source.gsub(%r{\\d\+?}, 'N').gsub(%r{[\^\?\$\\\(\)]}, '')
27
+ end
28
+
29
+ def to_doc_negate
30
+ doc = nil
31
+ @option.negate.each do |neg|
32
+ str = if neg.kind_of? Regexp
33
+ str = re_to_string neg
34
+ else
35
+ str = neg
36
+ end
37
+
38
+ if doc
39
+ doc << " [#{str}]"
40
+ else
41
+ doc = str
42
+ end
43
+ end
44
+ doc
45
+ end
46
+
47
+ # -g [--use-merge-history] : use/display additional information from merge
48
+ # 01234567890123456789012345678901234567890123456789012345678901234567890123456789
49
+ # 0 1 2 3 4 5 6
50
+
51
+ def to_doc_line lhs, rhs, sep = ""
52
+ fmt = " %-24s %1s %s"
53
+ sprintf fmt, lhs, sep, rhs
54
+ end
55
+
56
+ def to_doc io
57
+ # wrap optdesc?
58
+
59
+ [ @option.description ].flatten.each_with_index do |descline, idx|
60
+ lhs = idx == 0 ? to_doc_tag : ""
61
+ io.puts to_doc_line lhs, descline, idx == 0 ? ":" : ""
62
+ end
63
+
64
+ if defval = @option.default
65
+ io.puts to_doc_line "", " default: #{defval}"
66
+ end
67
+
68
+ if re = @option.regexp
69
+ io.puts to_doc_line re_to_string(re), "same as above", ":"
70
+ end
71
+
72
+ if @option.negate
73
+ lhs = to_doc_negate
74
+ io.puts to_doc_line lhs, "", ""
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ module Synoption
5
+ class OptionException < RuntimeError
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'synoption/option'
5
+
6
+ module Synoption
7
+ # An option that has a fixnum (integer) as its value.
8
+ class FixnumOption < Option
9
+ def set_value val
10
+ super(val && val.to_i)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ module Synoption
5
+ class OptionList
6
+ attr_reader :options
7
+
8
+ def initialize options = Array.new
9
+ @options = options
10
+ end
11
+
12
+ def inspect
13
+ @options.collect { |opt| opt.inspect }.join("\n")
14
+ end
15
+
16
+ def find_by_name name
17
+ @options.find { |opt| opt.name == name }
18
+ end
19
+
20
+ def has_option? name
21
+ find_by_name name
22
+ end
23
+
24
+ def to_command_line
25
+ cmdline = Array.new
26
+ @options.each do |opt|
27
+ if cl = opt.to_command_line
28
+ cmdline.concat cl
29
+ end
30
+ end
31
+ cmdline
32
+ end
33
+
34
+ def << option
35
+ add option
36
+ end
37
+
38
+ def add option
39
+ @options << option
40
+ option
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'rubygems'
5
+ require 'logue/loggable'
6
+
7
+ module Synoption
8
+ class OptionMatch
9
+ include Logue::Loggable
10
+
11
+ def match? arg
12
+ raise "not implemented"
13
+ end
14
+ end
15
+
16
+ class OptionExactMatch < OptionMatch
17
+ def initialize tag, name
18
+ @tag = tag
19
+ @name = name
20
+ end
21
+
22
+ def match? arg
23
+ arg == @tag || arg == '--' + @name.to_s
24
+ end
25
+ end
26
+
27
+ class OptionNegativeMatch < OptionMatch
28
+ def initialize *negopts
29
+ # in case this gets passed an array as an element:
30
+ @negopts = Array.new(negopts).flatten
31
+ end
32
+
33
+ def match? arg
34
+ arg && @negopts.select { |x| arg.index x }.size > 0
35
+ end
36
+ end
37
+
38
+ class OptionRegexpMatch < OptionMatch
39
+ def initialize regexp
40
+ @regexp = regexp
41
+ end
42
+
43
+ def match? arg
44
+ arg && @regexp.match(arg)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'rubygems'
5
+ require 'logue/loggable'
6
+ require 'synoption/match'
7
+
8
+ module Synoption
9
+ class Matchers
10
+ include Logue::Loggable
11
+
12
+ attr_reader :exact
13
+ attr_reader :negative
14
+ attr_reader :regexp
15
+
16
+ def initialize tag, name, negate, regexp
17
+ @exact = OptionExactMatch.new tag, name
18
+ @negative = negate && OptionNegativeMatch.new(negate)
19
+ @regexp = regexp && OptionRegexpMatch.new(regexp)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'synoption/base_option'
5
+
6
+ module Synoption
7
+ class Option < BaseOption
8
+ end
9
+ end
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'rubygems'
5
+ require 'logue/loggable'
6
+ require 'synoption/option'
7
+ require 'synoption/exception'
8
+ require 'synoption/list'
9
+
10
+ module Synoption
11
+ class OptionSet < OptionList
12
+ include Logue::Loggable
13
+
14
+ # maps from the option set class to the valid options for that class.
15
+ @@options_for_class = Hash.new { |h, k| h[k] = Array.new }
16
+
17
+ attr_reader :unprocessed
18
+
19
+ def self.has_option name, optcls, optargs = Hash.new
20
+ @@options_for_class[self] << { :name => name, :class => optcls, :args => optargs }
21
+
22
+ define_method name do
23
+ instance_eval do
24
+ opt = instance_variable_get '@' + name.to_s
25
+ opt.value
26
+ end
27
+ end
28
+ end
29
+
30
+ attr_reader :options
31
+
32
+ def initialize options = Array.new
33
+ super
34
+
35
+ cls = self.class
36
+ while cls != OptionSet
37
+ add_options_for_class cls
38
+ cls = cls.superclass
39
+ end
40
+ end
41
+
42
+ def add_options_for_class cls
43
+ opts = @@options_for_class[cls]
44
+
45
+ opts.each do |option|
46
+ name = option[:name]
47
+ cls = option[:class]
48
+ args = option[:args]
49
+ opt = cls.new(*args)
50
+
51
+ add opt
52
+ instance_variable_set '@' + name.to_s, opt
53
+ end
54
+ end
55
+
56
+ def unset key
57
+ opt = find_by_name key
58
+ opt && opt.unset
59
+ end
60
+
61
+ def process args
62
+ options_processed = Array.new
63
+
64
+ @unprocessed = args
65
+
66
+ aborted = false
67
+
68
+ while !@unprocessed.empty?
69
+ if @unprocessed[0] == '--'
70
+ @unprocessed.delete_at 0
71
+ aborted = true
72
+ break
73
+ end
74
+
75
+ processed = false
76
+
77
+ options.each do |opt|
78
+ if opt.process @unprocessed
79
+ processed = true
80
+ options_processed << opt
81
+ end
82
+ end
83
+
84
+ break unless processed
85
+ end
86
+
87
+ unless aborted
88
+ check_for_valid_options
89
+ end
90
+
91
+ post_process_all options_processed
92
+ end
93
+
94
+ def check_for_valid_options
95
+ @unprocessed.each do |opt|
96
+ if opt.start_with? '-'
97
+ raise OptionException.new "error: option: #{opt} invalid for #{name}"
98
+ end
99
+ end
100
+ end
101
+
102
+ def post_process_all options_processed
103
+ options_processed.each do |opt|
104
+ opt.post_process self, @unprocessed
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'synoption/base_option'
6
+ require 'stringio'
7
+
8
+ module Synoption
9
+ class BaseOptionTestCase < TestCase
10
+ def test_init_minimal
11
+ opt = BaseOption.new :limit, '-l', "the number of log entries", nil
12
+ assert_equal :limit, opt.name
13
+ assert_equal '-l', opt.tag
14
+ assert_equal "the number of log entries", opt.description
15
+ end
16
+
17
+ def test_init_default_value
18
+ opt = BaseOption.new :nombre, '-x', " one two three", 133
19
+ assert_equal 133, opt.value
20
+ end
21
+
22
+ def test_init_negate
23
+ opt = BaseOption.new :limit, '-l', "the number of log entries", nil, :negate => [ %r{^--no-?limit} ]
24
+ assert_equal [ %r{^--no-?limit} ], opt.negate
25
+ end
26
+
27
+ def test_to_doc
28
+ opt = BaseOption.new :limit, '-l', "the number of log entries", 777, :negate => [ %r{^--no-?limit} ]
29
+ sio = StringIO.new
30
+ opt.to_doc sio
31
+ exp = String.new
32
+ exp << " -l [--limit] ARG : the number of log entries\n"
33
+ exp << " default: 777\n"
34
+ exp << " --no-limit \n"
35
+ assert_equal exp, sio.string
36
+ end
37
+
38
+ def assert_exact_match exp, opt, val
39
+ assert_equal exp, opt.exact_match?(val), "value: '" + val + "'"
40
+ end
41
+
42
+ def test_exact_match
43
+ opt = BaseOption.new :limit, '-l', "the number of log entries", 3
44
+ [ '-l', '--limit' ].each do |val|
45
+ assert_exact_match true, opt, val
46
+ end
47
+
48
+ [ '-L', '-x', '--lim', '--liMit' ].each do |val|
49
+ assert_exact_match false, opt, val
50
+ end
51
+ end
52
+
53
+ def assert_negative_match exp, opt, val
54
+ md = opt.negative_match? val
55
+ assert_equal exp, !!md, "value: '" + val + "'"
56
+ end
57
+
58
+ def test_negative_match
59
+ opt = BaseOption.new :limit, '-l', "the number of log entries", 777, :negate => [ '-L', %r{^--no-?limit} ]
60
+ [ '-L', '--no-limit', '--nolimit' ].each do |val|
61
+ assert_negative_match true, opt, val
62
+ end
63
+
64
+ [ '-l', '-x', '-nolimit', ' --nolimit' ].each do |val|
65
+ assert_negative_match false, opt, val
66
+ end
67
+ end
68
+
69
+ def assert_regexp_match exp, opt, val
70
+ md = opt.regexp_match? val
71
+ assert_equal exp, !!md, "value: '" + val + "'"
72
+ end
73
+
74
+ def test_regexp_match
75
+ opt = BaseOption.new :revision, '-r', "the revision", nil, :regexp => Regexp.new('^[\-\+]\d+$')
76
+ [ '-1', '-123', '+99', '+443' ].each do |val|
77
+ assert_regexp_match true, opt, val
78
+ end
79
+
80
+ [ '-x', '123', '+-x', 'word' ].each do |val|
81
+ assert_regexp_match false, opt, val
82
+ end
83
+ end
84
+
85
+ def assert_to_command_line exp, opt
86
+ assert_equal exp, opt.to_command_line
87
+ end
88
+
89
+ def make_xyz_option options = Hash.new
90
+ BaseOption.new :xyz, '-x', "the blah blah blah", nil, options
91
+ end
92
+
93
+ def test_to_command_line_no_cmdline_option
94
+ opt = make_xyz_option
95
+ assert_to_command_line nil, opt
96
+ opt.set_value 1
97
+ assert_to_command_line [ '-x', 1 ], opt
98
+ end
99
+
100
+ def test_to_command_line_cmdline_option_string
101
+ opt = make_xyz_option :as_cmdline_option => '--xray'
102
+ assert_to_command_line nil, opt
103
+ opt.set_value 1
104
+ assert_to_command_line '--xray', opt
105
+ end
106
+
107
+ def test_to_command_line_cmdline_option_nil
108
+ opt = make_xyz_option :as_cmdline_option => nil
109
+ assert_to_command_line nil, opt
110
+ opt.set_value 1
111
+ assert_to_command_line nil, opt
112
+ end
113
+
114
+ def test_takes_value
115
+ opt = make_xyz_option
116
+ assert opt.takes_value?
117
+ end
118
+
119
+ def assert_process exp_process, exp_value, exp_remaining_args, opt, args
120
+ pr = opt.process args
121
+ assert_equal exp_process, pr
122
+ assert_equal exp_value, opt.value
123
+ assert_equal exp_remaining_args, args
124
+ end
125
+
126
+ def test_process_exact_no_match
127
+ opt = make_xyz_option
128
+ args = %w{ --baz foo }
129
+ assert_process false, nil, %w{ --baz foo }, opt, args
130
+ end
131
+
132
+ def test_process_exact_takes_argument
133
+ opt = make_xyz_option
134
+ args = %w{ --xyz foo }
135
+ assert_process true, 'foo', %w{ }, opt, args
136
+
137
+ opt = make_xyz_option
138
+ args = %w{ --xyz foo bar }
139
+ assert_process true, 'foo', %w{ bar }, opt, args
140
+ end
141
+
142
+ def test_process_exact_takes_missing_argument
143
+ opt = make_xyz_option
144
+ args = %w{ --xyz }
145
+ assert_raises(RuntimeError) do
146
+ assert_process true, 'foo', %w{ }, opt, args
147
+ end
148
+ end
149
+
150
+ def test_process_negative
151
+ options = { :negate => [ '-X', %r{^--no-?xyz} ] }
152
+ %w{ -X --no-xyz --noxyz }.each do |arg|
153
+ opt = make_xyz_option options
154
+ args = [ arg ]
155
+ assert_process true, false, %w{ }, opt, args
156
+ end
157
+
158
+ %w{ -X --no-xyz --noxyz }.each do |arg|
159
+ opt = make_xyz_option options
160
+ args = [ arg, '--abc' ]
161
+ assert_process true, false, %w{ --abc }, opt, args
162
+ end
163
+ end
164
+
165
+ def test_process_regexp
166
+ options = { :regexp => Regexp.new('^[\-\+]\d+$') }
167
+ %w{ -1 +123 }.each do |arg|
168
+ opt = make_xyz_option options
169
+ args = [ arg ]
170
+ assert_process true, arg, %w{ }, opt, args
171
+ end
172
+
173
+ %w{ -1 +123 }.each do |arg|
174
+ opt = make_xyz_option options
175
+ args = [ arg, '--foo' ]
176
+ assert_process true, arg, %w{ --foo }, opt, args
177
+ end
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'synoption/match'
6
+
7
+ module Synoption
8
+ class MatchTestCase < TestCase
9
+ def assert_match exp, matcher, arg
10
+ assert_equal exp, matcher.match?(arg), "arg: #{arg}"
11
+ end
12
+
13
+ def assert_matches exp, matcher, *args
14
+ args.each do |arg|
15
+ assert_match exp, matcher, arg
16
+ end
17
+ end
18
+
19
+ def test_exact
20
+ matcher = OptionExactMatch.new '-t', 'tagname'
21
+ assert_matches true, matcher, '-t', '--tagname'
22
+ assert_matches false, matcher, '-T', '--tag-name', '--no-tagname', '--notagname'
23
+ end
24
+
25
+ def test_negative_string
26
+ matcher = OptionNegativeMatch.new '-T'
27
+ assert_matches true, matcher, '-T'
28
+ assert_matches false, matcher, '-t'
29
+ end
30
+
31
+ def test_negative_regexp
32
+ matcher = OptionNegativeMatch.new %r{^\-\-no\-?tagname$}
33
+ assert_matches true, matcher, '--no-tagname', '--notagname'
34
+ assert_matches false, matcher, '-t', '--non-tagname' '--nontagname'
35
+ end
36
+
37
+ def test_negative_multiple
38
+ matcher = OptionNegativeMatch.new %r{^\-\-no\-?tagname$}, '-T'
39
+ assert_matches true, matcher, '-T', '--no-tagname', '--notagname'
40
+ assert_matches false, matcher, '-t', '--tagname'
41
+ end
42
+
43
+ def assert_match_not_nil matcher, arg
44
+ assert_not_nil matcher.match?(arg), "arg: #{arg}"
45
+ end
46
+
47
+ def assert_matches_not_nil matcher, *args
48
+ args.each do |arg|
49
+ assert_match_not_nil matcher, arg
50
+ end
51
+ end
52
+
53
+ def test_regexp_match
54
+ matcher = OptionRegexpMatch.new %r{^--tag-?name$}
55
+ assert_matches_not_nil matcher, '--tagname', '--tag-name'
56
+ assert_matches nil, matcher, '--tagnames' '--tag--name'
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'synoption/option'
6
+ require 'stringio'
7
+
8
+ module Synoption
9
+ class OptionTestCase < TestCase
10
+ def test_nothing_yet
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/ruby -w
2
+ # -*- ruby -*-
3
+
4
+ require 'tc'
5
+ require 'synoption/set'
6
+ require 'synoption/base_option'
7
+
8
+ module Synoption
9
+ class SetTestCase < TestCase
10
+ class TestOptionSet < OptionSet
11
+ def name
12
+ 'test'
13
+ end
14
+ end
15
+
16
+ def setup
17
+ @xyz = BaseOption.new :xyz, '-x', "blah blah xyz", nil
18
+ @abc = BaseOption.new :abc, '-a', "abc yadda yadda", nil
19
+ @tnt = BaseOption.new :tnt, '-t', "tnt and so forth", nil
20
+
21
+ @optset = TestOptionSet.new [ @xyz, @abc, @tnt ]
22
+ end
23
+
24
+ def test_find_by_name
25
+ assert_not_nil @optset.find_by_name(:xyz)
26
+ assert_nil @optset.find_by_name(:bfd)
27
+ end
28
+
29
+ def test_process_set
30
+ @optset.process %w{ -x foo }
31
+
32
+ assert_equal 'foo', @xyz.value
33
+ end
34
+
35
+ def test_process_not_set
36
+ @optset.process %w{ -x foo }
37
+
38
+ assert_nil @abc.value
39
+ assert_nil @tnt.value
40
+ end
41
+
42
+ def test_bad_option
43
+ assert_raises(OptionException) do
44
+ @optset.process %w{ -y foo }
45
+ end
46
+ end
47
+
48
+ def test_stop_on_double_dash
49
+ @optset.process %w{ -- -x foo }
50
+
51
+ assert_nil @xyz.value
52
+ assert_nil @abc.value
53
+ assert_nil @tnt.value
54
+ end
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: synoption
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jeff Pace
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: logue
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ description: Another implementation of an option processor.
28
+ email: jeugenepace@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/synoption/base_option.rb
34
+ - lib/synoption/boolean_option.rb
35
+ - lib/synoption/doc.rb
36
+ - lib/synoption/exception.rb
37
+ - lib/synoption/fixnum_option.rb
38
+ - lib/synoption/list.rb
39
+ - lib/synoption/match.rb
40
+ - lib/synoption/matchers.rb
41
+ - lib/synoption/option.rb
42
+ - lib/synoption/set.rb
43
+ - test/synoption/base_option_test.rb
44
+ - test/synoption/match_test.rb
45
+ - test/synoption/option_test.rb
46
+ - test/synoption/set_test.rb
47
+ homepage: http://www.incava.org/projects/synoption
48
+ licenses: []
49
+ metadata: {}
50
+ post_install_message:
51
+ rdoc_options: []
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.6
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: Yet another getopt-like library.
70
+ test_files:
71
+ - test/synoption/base_option_test.rb
72
+ - test/synoption/match_test.rb
73
+ - test/synoption/option_test.rb
74
+ - test/synoption/set_test.rb