acclaim 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,3 +1,11 @@
1
1
  source :rubygems
2
2
 
3
3
  gemspec
4
+
5
+ {
6
+ ribbon: '~/projects/ribbon',
7
+ rookie: '~/projects/rookie'
8
+ }.each do |project, path|
9
+ path = File.expand_path path
10
+ gem project.to_s, path: path if Dir.exists? path
11
+ end
@@ -82,10 +82,10 @@ from an existing command:
82
82
  end
83
83
  end
84
84
 
85
- $ app do x, y, z
86
- Doing something with x, y, z
85
+ $ app do x y, z
86
+ Doing something with x y, z
87
87
 
88
- $ app do --what x, y, z
88
+ $ app do --what x y, z
89
89
  Doing x with y, z
90
90
 
91
91
  Options may also take an Hash as the last parameter. Among the things that can
@@ -16,6 +16,8 @@ Gem::Specification.new('acclaim') do |gem|
16
16
 
17
17
  gem.files = `git ls-files`.split "\n"
18
18
 
19
+ gem.add_runtime_dependency 'ribbon'
20
+
19
21
  gem.add_development_dependency 'rspec'
20
22
  gem.add_development_dependency 'rookie'
21
23
 
@@ -1,9 +1,10 @@
1
1
  require 'acclaim/command/help'
2
+ require 'acclaim/command/parser'
2
3
  require 'acclaim/command/version'
3
4
  require 'acclaim/option'
4
5
  require 'acclaim/option/parser'
5
6
  require 'acclaim/option/parser/regexp'
6
- require 'acclaim/option/values'
7
+ require 'ribbon'
7
8
 
8
9
  module Acclaim
9
10
 
@@ -71,7 +72,7 @@ module Acclaim
71
72
  alias :opt :option
72
73
 
73
74
  # The block which is executed when this command is called. It is given 2
74
- # parameters; the first is an Option::Values instance which can be queried
75
+ # parameters; the first is an Ribbon::Object instance which can be queried
75
76
  # for settings information; the second is the remaining command line.
76
77
  def action(&block)
77
78
  @action = block
@@ -94,9 +95,14 @@ module Acclaim
94
95
  Option::Parser.new(args, options).parse!
95
96
  end
96
97
 
98
+ # Looks for this command's subcommands in the argument array.
99
+ def parse_subcommands!(args)
100
+ Command::Parser.new(args, subcommands).parse!
101
+ end
102
+
97
103
  # Invokes this command with a fresh set of option values.
98
104
  def run(*args)
99
- invoke Option::Values.new, args
105
+ invoke Ribbon::Object.new, args
100
106
  rescue Option::Parser::Error => e
101
107
  puts e.message
102
108
  end
@@ -106,14 +112,16 @@ module Acclaim
106
112
  # will be executed. A subcommand may be anywhere in the array as long as
107
113
  # it is before an argument separator, which is tipically a double dash
108
114
  # (<tt>--<\tt>) and may be omitted.
115
+ #
116
+ # All argument separators will be deleted from the argument array before a
117
+ # command is executed.
109
118
  def invoke(opts, args = [])
110
- opts.merge! parse_options!(args)
119
+ Ribbon::Object.merge! opts, parse_options!(args)
111
120
  handle_special_options! opts, args
112
- if subcommand = find_subcommand_in(separated args)
113
- args.delete subcommand.line
121
+ if subcommand = parse_subcommands!(args)
114
122
  subcommand.invoke(opts, args)
115
123
  else
116
- args.delete_if { |arg| arg =~ Option::Parser::Regexp::ARGUMENT_SEPARATOR }
124
+ delete_argument_separators_in! args
117
125
  execute(opts, args)
118
126
  end
119
127
  end
@@ -146,22 +154,12 @@ module Acclaim
146
154
  const_get(:Version).execute opts, args if opts.acclaim_version?
147
155
  end
148
156
 
149
- # Attempts to find a subcommand of this command in the given argument
150
- # array. If a subcommand is found, it is returned, if not, nil is
151
- # returned.
152
- def find_subcommand_in(args)
153
- subcommands.find do |subcommand|
154
- args.include? subcommand.line
157
+ def delete_argument_separators_in!(args)
158
+ args.delete_if do |arg|
159
+ arg =~ Option::Parser::Regexp::ARGUMENT_SEPARATOR
155
160
  end
156
161
  end
157
162
 
158
- # Finds the argument separator and returns an array containing all the
159
- # elements before it. If a separator is not present, the original array
160
- # is returned.
161
- def separated(args)
162
- args.take_while { |arg| arg !~ Option::Parser::Regexp::ARGUMENT_SEPARATOR }
163
- end
164
-
165
163
  end
166
164
 
167
165
  # Add the class methods to the subclass and add it to this command's list of
@@ -0,0 +1,51 @@
1
+ require 'acclaim/option/parser/regexp'
2
+
3
+ module Acclaim
4
+ class Command
5
+
6
+ # Given an argument array and a list of commands, searches for them among
7
+ # the elements of the array.
8
+ class Parser
9
+
10
+ attr_accessor :argv, :commands
11
+
12
+ # Initializes a new command parser, with the given argument array and set
13
+ # of commands to search for.
14
+ def initialize(argv, commands)
15
+ self.argv = argv
16
+ self.commands = commands
17
+ end
18
+
19
+ # Parses the argument array and returns one of the given commands, if one
20
+ # is found, or +nil+ otherwise.
21
+ def parse!
22
+ find_command
23
+ end
24
+
25
+ private
26
+
27
+ # Discards all elements in the argument array after and including the
28
+ # argument separator, if one exists.
29
+ #
30
+ # Does not modify +argv+; returns a new array.
31
+ def arguments_up_to_separator
32
+ argv.take_while do |arg|
33
+ arg !~ Option::Parser::Regexp::ARGUMENT_SEPARATOR
34
+ end
35
+ end
36
+
37
+ # Searches for one of the given commands in the argument array, and
38
+ # returns it. Removes the string that matched the command name from
39
+ # +argv+. Returns +nil if no command was found.
40
+ def find_command
41
+ commands.find do |command|
42
+ arguments_up_to_separator.include? command.line
43
+ end.tap do |command|
44
+ argv.delete command.line if command
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+ end
@@ -32,7 +32,7 @@ module Acclaim
32
32
  # line.
33
33
  #
34
34
  # Additionally, if a block is given, it will be called when the option is
35
- # parsed with a Values instance and the parameters given to the option. The
35
+ # parsed with a ribbon instance and the parameters given to the option. The
36
36
  # parameters will already be converted to this option's specified type; if
37
37
  # this is not desirable consider not specifying a class to the option or
38
38
  # registering a custom type handler.
@@ -41,7 +41,7 @@ module Acclaim
41
41
  matches = args.select { |arg| arg.is_a? String }.group_by do |arg|
42
42
  arg =~ Parser::Regexp::SWITCH ? true : false
43
43
  end
44
- klass = args.find { |arg| arg.is_a? Class }
44
+ klass = args.find { |arg| arg.is_a? Module }
45
45
  self.key = key
46
46
  self.names = matches.fetch true, []
47
47
  self.description = matches.fetch(false, []).first
@@ -1,5 +1,5 @@
1
1
  require 'acclaim/option/parser/regexp'
2
- require 'acclaim/option/values'
2
+ require 'ribbon'
3
3
 
4
4
  module Acclaim
5
5
  class Option
@@ -51,7 +51,7 @@ module Acclaim
51
51
  # options << Option.new(:verbose, '--verbose')
52
52
  #
53
53
  # Option::Parser.new(args, options).parse!
54
- # => #<Acclaim::Option::Values:0x00000002a2fee8 @options={:file=>"log.txt", :verbose=>true}>
54
+ # => { Ribbon file:log.txt, verbose:true }
55
55
  #
56
56
  # args
57
57
  # => ["arg1", "arg2"]
@@ -98,28 +98,28 @@ module Acclaim
98
98
  end
99
99
 
100
100
  # Parses the options and their arguments, associating that information
101
- # with a Values instance.
101
+ # with a Ribbon::Object instance.
102
102
  def parse_values!
103
- Values.new.tap do |values|
104
- options.each do |option|
105
- key = option.key
106
- values[key] = option.default unless values[key]
107
- switches = argv.find_all { |switch| option =~ switch }
108
- if switches.any?
109
- if option.flag?
110
- set_option_value option, values
111
- argv.delete *switches
112
- else
113
- switches.each do |switch|
114
- params = extract_parameters_of! option, switch
115
- set_option_value option, values, params
116
- end
117
- end
103
+ ribbon = Ribbon::Object.new
104
+ options.each do |option|
105
+ key = option.key
106
+ ribbon[key] = option.default unless ribbon[key]
107
+ switches = argv.find_all { |switch| option =~ switch }
108
+ if switches.any?
109
+ if option.flag?
110
+ found_boolean option, ribbon
111
+ argv.delete *switches
118
112
  else
119
- Error.raise_missing_arg(option.names.join ' | ') if option.required?
113
+ switches.each do |switch|
114
+ params = extract_parameters_of! option, switch
115
+ found_params_for option, ribbon, params
116
+ end
120
117
  end
118
+ else
119
+ Error.raise_missing_arg(option.names.join ' | ') if option.required?
121
120
  end
122
121
  end
122
+ ribbon
123
123
  end
124
124
 
125
125
  # Finds the +switch+ in #argv and scans the next +option.arity.total+
@@ -154,26 +154,30 @@ module Acclaim
154
154
  values.each { |value| argv.delete value }
155
155
  end
156
156
 
157
- # If the option has an custom handler associated, call it with the
158
- # parameters. Otherwise, if the option is a flag, the value corresponding
159
- # to the option's key will be set to +true+, if it is not, the value will
160
- # be set to params.first+ if +params+ contains only one element or to
161
- # +params+ if it contains more.
162
- def set_option_value(option, values, params = [])
157
+ # If the option has an custom handler associated, it will be called with
158
+ # the option values as the first argument and the array of parameters
159
+ # found as the second argument. Otherwise, the value will be set to
160
+ # <tt>params.first</tt>, if the option takes only one argument, or to
161
+ # +params+ if it takes more.
162
+ #
163
+ # The parameters will be converted according to the option's type.
164
+ def found_params_for(option, values, params = [])
163
165
  params = option.convert_parameters *params
164
- if handler = option.handler
165
- if option.flag? then handler.call values
166
- else handler.call values, params end
166
+ if handler = option.handler then handler.call values, params
167
167
  else
168
- key = option.key.to_sym
169
- if option.flag? then values[key] = true
170
- else
171
- value = option.arity.total == 1 ? params.first : params
172
- values[key] = value unless params.empty?
173
- end
168
+ value = option.arity.total == 1 ? params.first : params
169
+ values[option.key.to_sym] = value unless params.empty?
174
170
  end
175
171
  end
176
172
 
173
+ # If the option has an custom handler associated, it will be called with
174
+ # only the option values as the first argument. Otherwise, the value will
175
+ # be set to <tt>true</tt>.
176
+ def found_boolean(option, values)
177
+ if handler = option.handler then handler.call values
178
+ else values[option.key.to_sym] = true end
179
+ end
180
+
177
181
  end
178
182
  end
179
183
  end
@@ -8,12 +8,14 @@ module Acclaim
8
8
  # Regular expression for a short option switch.
9
9
  #
10
10
  # Matches strings that begin with a single dash and contains only one
11
- # word character or digit before the end of the string.
11
+ # word character before the end of the string.
12
12
  #
13
- # Examples: <tt>-s; -5; -_</tt>
13
+ # Examples: <tt>-s; -_</tt>
14
14
  #
15
- # <tt>'-mult'</tt> will be split into <tt>%w(-m -u -l -t)</tt>.
16
- SHORT_SWITCH = /\A-[\w\d]\Z/
15
+ # <tt>'-mult'</tt> should match MULTIPLE_SHORT_SWITCHES, and will be
16
+ # split into <tt>%w(-m -u -l -t)</tt>, which in turn should match this
17
+ # regular expression.
18
+ SHORT_SWITCH = /\A-\w\Z/
17
19
 
18
20
  # Regular expression for a long option switch.
19
21
  #
@@ -58,7 +60,7 @@ module Acclaim
58
60
  # <tt>'--weird=,PARAM2'</tt> will become
59
61
  # <tt>['--weird', '', 'PARAM2']</tt> when it is split up. What to make
60
62
  # of those isn't a decision for a preprocessor.
61
- SWITCH_PARAM_EQUALS = /\A--[\w\d]+(-?[\w\d]+)*=(,*[\w\d]*)*\Z/
63
+ SWITCH_PARAM_EQUALS = /\A--[\w\d]+(-[\w\d]+)*=(,*[\w\d]*)*\Z/
62
64
 
63
65
  # Regular expression for any kind of option switch.
64
66
  #
@@ -47,5 +47,6 @@ end
47
47
  require 'acclaim/option/type/date'
48
48
  require 'acclaim/option/type/date_time'
49
49
  require 'acclaim/option/type/string'
50
+ require 'acclaim/option/type/symbol'
50
51
  require 'acclaim/option/type/time'
51
52
  require 'acclaim/option/type/uri'
@@ -1,5 +1,4 @@
1
1
  require 'acclaim/option/type'
2
- require 'time'
3
2
 
4
3
  module Acclaim
5
4
  class Option
@@ -0,0 +1,21 @@
1
+ require 'acclaim/option/type'
2
+
3
+ module Acclaim
4
+ class Option
5
+ module Type
6
+
7
+ # Handles symbols given as arguments in the command line.
8
+ module Symbol
9
+
10
+ # Simply returns +str.to_sym+.
11
+ def self.handle(str)
12
+ str.to_sym
13
+ end
14
+
15
+ end
16
+
17
+ self.accept ::Symbol, &Symbol.method(:handle)
18
+
19
+ end
20
+ end
21
+ end
@@ -16,7 +16,7 @@ module Acclaim
16
16
  # Patch version.
17
17
  #
18
18
  # Increments denote changes in implementation.
19
- PATCH = 5
19
+ PATCH = 6
20
20
 
21
21
  # Build version.
22
22
  #
@@ -1,14 +1,24 @@
1
1
  require 'acclaim/option'
2
+ require 'date'
3
+ require 'time'
4
+ require 'uri'
2
5
 
3
6
  describe Acclaim::Option do
4
7
 
8
+ let(:key) { :key }
9
+ let(:args) { [] }
10
+ let(:block) { nil }
11
+ subject { Acclaim::Option.new key, *args, &block }
12
+
5
13
  describe '#initialize' do
14
+ it 'should use the given key' do
15
+ subject.key.should == key
16
+ end
6
17
 
7
18
  context 'when given multiple strings' do
8
-
9
19
  let(:switches) { %w(-s --switch) }
10
20
  let(:description) { 'Description' }
11
- subject { Acclaim::Option.new :key, *[switches, description].flatten }
21
+ let(:args) { [switches, description].flatten! }
12
22
 
13
23
  it 'should find the switches' do
14
24
  subject.names.should == switches
@@ -17,20 +27,285 @@ describe Acclaim::Option do
17
27
  it 'should find the description' do
18
28
  subject.description.should == description
19
29
  end
30
+ end
20
31
 
32
+ context 'when not given a class' do
33
+ it "should use String as the option's type" do
34
+ subject.type.should == String
35
+ end
21
36
  end
22
37
 
23
38
  context 'when given a class' do
24
-
25
39
  let(:type) { Integer }
26
- subject { Acclaim::Option.new :key, type }
40
+ let(:args) { [type] }
27
41
 
28
42
  it "should use it as the option's type" do
29
43
  subject.type.should == type
30
44
  end
45
+ end
46
+
47
+ context 'when given an additional parameter hash' do
48
+ let(:hash) { {} }
49
+ let(:args) { [hash] }
50
+
51
+ context 'that does not specify an arity' do
52
+ it 'should be a flag' do
53
+ subject.should be_flag
54
+ end
55
+ end
56
+
57
+ context 'that specifies an arity' do
58
+ let(:hash) { { arity: arity } }
59
+
60
+ context 'which requires one argument' do
61
+ let(:arity) { Acclaim::Option::Arity.new 1 }
62
+
63
+ it 'should not be a flag' do
64
+ subject.should_not be_flag
65
+ end
66
+ end
67
+
68
+ context 'which allows one optional argument' do
69
+ let(:arity) { Acclaim::Option::Arity.new 0, 1 }
70
+
71
+ it 'should not be a flag' do
72
+ subject.should_not be_flag
73
+ end
74
+ end
75
+ end
76
+
77
+ context 'that does not specify a default value' do
78
+ it 'should have a default value of nil' do
79
+ subject.default.should be_nil
80
+ end
81
+ end
82
+
83
+ context 'that specifies a default value' do
84
+ let(:default) { 10 }
85
+ let(:hash) { { default: default } }
86
+
87
+ it 'should use the default value supplied' do
88
+ subject.default.should == default
89
+ end
90
+ end
91
+
92
+ context 'that does not specify whether the option is required' do
93
+ it 'should not be required' do
94
+ subject.should_not be_required
95
+ end
96
+ end
97
+
98
+ context 'that specifies if the option is required' do
99
+ let(:hash) { { required: required } }
100
+
101
+ context 'as false' do
102
+ let(:required) { false }
103
+
104
+ it 'should not be required' do
105
+ subject.should_not be_required
106
+ end
107
+ end
108
+
109
+ context 'as true' do
110
+ let(:required) { true }
111
+
112
+ it 'should be required' do
113
+ subject.should be_required
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ context 'when not given a block' do
120
+ it 'should not have a custom handler' do
121
+ subject.handler.should be_nil
122
+ end
123
+ end
124
+
125
+ context 'when given a block' do
126
+ let(:block) { proc { |*args| p args } }
127
+
128
+ it 'should have a custom handler' do
129
+ subject.handler.should be_a(Proc)
130
+ end
131
+ end
132
+ end
133
+
134
+ describe '#convert_parameters' do
135
+ let(:args) { [type].compact }
136
+ let!(:converted) { subject.convert_parameters *params }
137
+
138
+ context 'when the option was not explicitly initialized with a type' do
139
+ let(:type) { nil }
140
+ let!(:params) { %w(a b c d) }
141
+
142
+ it 'should convert the parameters to strings' do
143
+ converted.should == params.map(&:to_s)
144
+ end
145
+ end
146
+
147
+ context 'when the option was initialized with String as its type' do
148
+ let(:type) { String }
149
+ let(:params) { %w(a b c d) }
150
+
151
+ it 'should convert the parameters to strings' do
152
+ converted.should == params.map(&:to_s)
153
+ end
154
+ end
155
+
156
+ context 'when the option was initialized with Symbol as its type' do
157
+ let(:type) { Symbol }
158
+ let(:params) { %w(a b c d) }
159
+
160
+ it 'should convert the parameters to strings' do
161
+ converted.should == params.map(&:to_sym)
162
+ end
163
+ end
164
+
165
+ context 'when the option was initialized with Date as its type' do
166
+ let(:type) { Date }
167
+ let(:date) { Date.today }
168
+ let(:params) { [date.to_s] }
169
+
170
+ it 'should convert the parameters to dates' do
171
+ converted.should == [date]
172
+ end
173
+ end
174
+
175
+ context 'when the option was initialized with DateTime as its type' do
176
+ let(:type) { DateTime }
177
+ let(:date_time) { DateTime.now }
178
+ let(:params) { [date_time.to_s] }
179
+
180
+ it 'should convert the parameters to dates/times' do
181
+ converted.should == [date_time]
182
+ end
183
+ end
184
+
185
+ context 'when the option was initialized with Time as its type' do
186
+ let(:type) { Time }
187
+ let(:time) { Time.now }
188
+ let(:params) { [time.to_s] }
189
+
190
+ it 'should convert the parameters to times' do
191
+ converted.should == [time]
192
+ end
193
+ end
194
+
195
+ context 'when the option was initialized with URI as its type' do
196
+ let(:type) { URI }
197
+ let(:uri) { URI.parse 'https://github.com/matheusmoreira/acclaim' }
198
+ let(:params) { [uri.to_s] }
199
+
200
+ it 'should convert the parameters to URIs' do
201
+ converted.should == [uri]
202
+ end
203
+ end
204
+ end
205
+
206
+ describe '#=~' do
207
+ let(:names) { %w(-o -a --option --alternative) }
208
+ let(:args) { names }
209
+
210
+ context "when passed the option's short switch" do
211
+ let(:str) { '-o' }
212
+
213
+ it 'should match' do
214
+ (subject =~ str).should be_true
215
+ end
216
+ end
217
+
218
+ context "when passed the option's alternative short switch" do
219
+ let(:str) { '-a' }
220
+
221
+ it 'should match' do
222
+ (subject =~ str).should be_true
223
+ end
224
+ end
225
+
226
+ context "when passed a different short switch" do
227
+ let(:str) { '-d' }
228
+
229
+ it 'should not match' do
230
+ (subject =~ str).should be_false
231
+ end
232
+ end
233
+
234
+ context "when passed the option's long switch" do
235
+ let(:str) { '--option' }
236
+
237
+ it 'should match' do
238
+ (subject =~ str).should be_true
239
+ end
240
+ end
241
+
242
+ context "when passed the option's alternative long switch" do
243
+ let(:str) { '--alternative' }
244
+
245
+ it 'should match' do
246
+ (subject =~ str).should be_true
247
+ end
248
+ end
249
+
250
+ context "when passed a different long switch" do
251
+ let(:str) { '--different' }
252
+
253
+ it 'should not match' do
254
+ (subject =~ str).should be_false
255
+ end
256
+ end
257
+ end
31
258
 
259
+ describe '#arity' do
260
+ context 'when the option was not explicitly initialized with an arity' do
261
+ it 'should not return nil' do
262
+ subject.arity.should_not be_nil
263
+ end
32
264
  end
265
+ end
266
+
267
+ describe '#arity=' do
268
+ before(:each) { begin subject.arity = arg; rescue; end }
269
+
270
+ context 'when passed nil' do
271
+ let(:arg) { nil }
272
+
273
+ it "the option's arity should not be set to nil" do
274
+ subject.arity.should_not be_nil
275
+ end
276
+ end
277
+
278
+ context 'when passed an arity' do
279
+ let(:arg) { Acclaim::Option::Arity.new 5, -1 }
33
280
 
281
+ it "should set the option's arity" do
282
+ subject.arity.should == arg
283
+ end
284
+ end
285
+
286
+ context 'when passed an array' do
287
+ let(:arg) { [ 5, -1 ] }
288
+
289
+ it "should use the array to create the option's arity" do
290
+ subject.arity.should == Acclaim::Option::Arity.new(5, -1)
291
+ end
292
+ end
293
+
294
+ context 'when passed an invalid array' do
295
+ let(:arg) { [ 5, -1, 99 ] }
296
+
297
+ it 'should raise an argument error' do
298
+ expect { subject.arity = arg }.to raise_error ArgumentError
299
+ end
300
+ end
301
+ end
302
+
303
+ describe '#require' do
304
+ before(:each) { subject.require }
305
+
306
+ it 'should make the option mandatory' do
307
+ subject.should be_required
308
+ end
34
309
  end
35
310
 
36
311
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acclaim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-23 00:00:00.000000000 Z
12
+ date: 2011-12-27 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ribbon
16
+ requirement: &19367260 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *19367260
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: rspec
16
- requirement: &8505620 !ruby/object:Gem::Requirement
27
+ requirement: &19366760 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ! '>='
@@ -21,10 +32,10 @@ dependencies:
21
32
  version: '0'
22
33
  type: :development
23
34
  prerelease: false
24
- version_requirements: *8505620
35
+ version_requirements: *19366760
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rookie
27
- requirement: &8505100 !ruby/object:Gem::Requirement
38
+ requirement: &19366220 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,7 +43,7 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *8505100
46
+ version_requirements: *19366220
36
47
  description: Command-line option parser and command interface.
37
48
  email: matheus.a.m.moreira@gmail.com
38
49
  executables: []
@@ -51,6 +62,7 @@ files:
51
62
  - lib/acclaim/command/help.rb
52
63
  - lib/acclaim/command/help/template.rb
53
64
  - lib/acclaim/command/help/template/command.erb
65
+ - lib/acclaim/command/parser.rb
54
66
  - lib/acclaim/command/version.rb
55
67
  - lib/acclaim/option.rb
56
68
  - lib/acclaim/option/arity.rb
@@ -60,9 +72,9 @@ files:
60
72
  - lib/acclaim/option/type/date.rb
61
73
  - lib/acclaim/option/type/date_time.rb
62
74
  - lib/acclaim/option/type/string.rb
75
+ - lib/acclaim/option/type/symbol.rb
63
76
  - lib/acclaim/option/type/time.rb
64
77
  - lib/acclaim/option/type/uri.rb
65
- - lib/acclaim/option/values.rb
66
78
  - lib/acclaim/version.rb
67
79
  - spec/acclaim/option/arity_spec.rb
68
80
  - spec/acclaim/option/parser_spec.rb
@@ -79,12 +91,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
79
91
  - - ! '>='
80
92
  - !ruby/object:Gem::Version
81
93
  version: '0'
94
+ segments:
95
+ - 0
96
+ hash: 407623794010834174
82
97
  required_rubygems_version: !ruby/object:Gem::Requirement
83
98
  none: false
84
99
  requirements:
85
100
  - - ! '>='
86
101
  - !ruby/object:Gem::Version
87
102
  version: '0'
103
+ segments:
104
+ - 0
105
+ hash: 407623794010834174
88
106
  requirements: []
89
107
  rubyforge_project:
90
108
  rubygems_version: 1.8.10
@@ -1,49 +0,0 @@
1
- module Acclaim
2
- class Option
3
-
4
- # Represents a set of option values.
5
- class Values
6
-
7
- # Gets a value by key.
8
- def [](key)
9
- data[key]
10
- end
11
-
12
- # Sets a value by key.
13
- def []=(key, value)
14
- data[key] = value
15
- end
16
-
17
- # Merge these values with the others.
18
- def merge!(other, &block)
19
- data.merge! other.data, &block
20
- end
21
-
22
- # Handles the following cases:
23
- #
24
- # options.method = value => options[method] = value
25
- # options.method? => options[method] ? true : false
26
- # options.method => options[method]
27
- def method_missing(method, *args, &block)
28
- m = method.to_s.chop!.to_sym
29
- case method
30
- when /=$/
31
- self[m] = args.first
32
- when /\?$/
33
- self[m] ? true : false
34
- else
35
- self[method]
36
- end
37
- end
38
-
39
- protected
40
-
41
- # The option values
42
- def data
43
- @options ||= {}
44
- end
45
-
46
- end
47
-
48
- end
49
- end