clive 0.7.1 → 0.7.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.
data/README.md CHANGED
@@ -125,7 +125,7 @@ blocks of the options in it are only ran when they are found.
125
125
  ### Arguments
126
126
 
127
127
  Anything that is not captured as a command, option or argument of a flag, is returned by
128
- #parse in an array.
128
+ \#parse in an array.
129
129
 
130
130
  class Args
131
131
  include Clive::Parser
@@ -139,7 +139,41 @@ Anything that is not captured as a command, option or argument of a flag, is ret
139
139
  #=> ['argument', 'A string']
140
140
 
141
141
 
142
- ### Option Handling
142
+ ### Variables
143
+
144
+ Usually you'll want to set up some kind of variable, such as a hash to store your
145
+ configuration in, or an array of items to do something with. This would be quite annoying
146
+ due to the fact it's a class, so I addded some handy methods.
147
+
148
+ class CLI
149
+ option_var :ok, false
150
+ end
151
+ CLI.ok #=> false
152
+ CLI.ok = true
153
+ CLI.ok #=> true
154
+
155
+ class CLI
156
+ option_hash :config
157
+ #=> is same as option_var :config, {}
158
+
159
+ flag :set, :args => "KEY VALUE" do |key, value|
160
+ config[key.to_sym] = value
161
+ end
162
+
163
+ option_list :items
164
+ # or option_array :items
165
+ #=> are the same as option_var :items, []
166
+ # option_var :a_list, []
167
+
168
+ flag :add, :args => "ITEM" do |item|
169
+ items << item
170
+ end
171
+ end
172
+ CLI.parse %w(--set works true --add apple --add orange)
173
+ CLI.config #=> {:works => true}
174
+ CLI.items #=> ['apple', 'orange']
175
+
176
+ ### Option Missing Handling
143
177
 
144
178
  You are able to intercept errors when an option does not exist in a similar way to
145
179
  `method_missing`.
@@ -106,8 +106,8 @@ module Clive
106
106
  v.run
107
107
  when :flag
108
108
  args = i[2..-1]
109
- opt_args = v.arg_num(true)
110
- nec_args = v.arg_num(false)
109
+ opt_args = v.arg_size(:optional)
110
+ nec_args = v.arg_size(:mandatory)
111
111
  # check for missing args
112
112
  if args.size < nec_args
113
113
  raise MissingArgument.new(v.sort_name)
@@ -151,7 +151,7 @@ module Clive
151
151
  pre_command << i
152
152
  end
153
153
  end
154
-
154
+
155
155
  post_command = Tokens.new(tokens.array - pre_command - [command])
156
156
  pre_command_tokens = parse(pre_command)
157
157
  r = pre_command_tokens
@@ -184,7 +184,7 @@ module Clive
184
184
  else
185
185
  if k == :word
186
186
  # add to last flag?
187
- if r.last && r.last[0] == :flag && r.last.size - 2 < r.last[1].arg_size
187
+ if r.last && r.last[0] == :flag && r.last.size - 2 < r.last[1].arg_size(:all)
188
188
  r.last.push(v)
189
189
  else
190
190
  r << [:argument, v]
@@ -81,13 +81,30 @@ module Clive
81
81
  @block.call(*args)
82
82
  end
83
83
 
84
- # @param [Boolean] optional whether to include optional arguments
85
- # @return [Integer] number of arguments this takes
86
- def arg_num(optional)
87
- if @args.is_a?(Array) && @args[0].is_a?(Hash)
88
- @args.find_all {|i| i[:optional] == optional }.size
89
- else
90
- 1
84
+
85
+ # @param type [Symbol]
86
+ # Can be passed three things; :all, returns size of all arguments; :optional
87
+ # returns all optional arguments; :mandatory, returns size of mandatory arguments.
88
+ def arg_size(type=:all)
89
+ case type
90
+ when :all
91
+ if @args.is_a?(Array) && @args[0].is_a?(Hash)
92
+ @args.size
93
+ else
94
+ 1
95
+ end
96
+ when :optional
97
+ if @args.is_a?(Array) && @args[0].is_a?(Hash)
98
+ @args.find_all {|i| i[:optional] == true }.size
99
+ else
100
+ 0
101
+ end
102
+ when :mandatory
103
+ if @args.is_a?(Array) && @args[0].is_a?(Hash)
104
+ @args.find_all {|i| i[:optional] == false }.size
105
+ else
106
+ 1
107
+ end
91
108
  end
92
109
  end
93
110
 
@@ -109,14 +126,6 @@ module Clive
109
126
  end
110
127
  end
111
128
 
112
- def arg_size
113
- if @args.is_a?(Range) || @args.is_a?(Array)
114
- 1
115
- else
116
- @args.size
117
- end
118
- end
119
-
120
129
  def options_to_strings
121
130
  if @args.is_a? Range
122
131
  [@args.to_s]
@@ -111,10 +111,9 @@ module Clive
111
111
 
112
112
  def parse_format(format, args)
113
113
  if format
114
- tokens = Lexer.tokenise(format).to_a
115
114
  obj = Obj.new(args)
116
115
  r = ""
117
- tokens.each do |(t,v)|
116
+ Lexer.tokenise(format).each do |t,v|
118
117
  case t
119
118
  when :block
120
119
  r << obj.evaluate(v)
@@ -1,3 +1,3 @@
1
1
  module Clive
2
- VERSION = '0.7.1'
2
+ VERSION = '0.7.2'
3
3
  end
@@ -19,12 +19,6 @@ describe Clive::Flag do
19
19
  end
20
20
  end
21
21
 
22
- describe "#arg_num" do
23
- it "returns the number of arguments" do
24
- subject.arg_num(false).should == 1
25
- end
26
- end
27
-
28
22
  describe "#args_to_strings" do
29
23
  it "converts the arguments to strings" do
30
24
  subject.args_to_strings.should == ["WORD(S)"]
@@ -40,9 +34,18 @@ describe Clive::Flag do
40
34
  end
41
35
 
42
36
  context "when arguments are required" do
43
- it "returns the number of arguments" do
44
- subject.args = [{:name => "ARG", :optional => false}]
45
- subject.arg_size.should == 1
37
+ subject { Clive::Flag.new([:n], "Description", ["REQ [OPT] REQ2 [OPT2] [OPT3]"]) }
38
+
39
+ it "returns the number of all arguments" do
40
+ subject.arg_size(:all).should == 5
41
+ end
42
+
43
+ it "returns the number of optional arguments" do
44
+ subject.arg_size(:optional).should == 3
45
+ end
46
+
47
+ it "returns the number of mandatory arguments" do
48
+ subject.arg_size(:mandatory).should == 2
46
49
  end
47
50
  end
48
51
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 1
9
- version: 0.7.1
8
+ - 2
9
+ version: 0.7.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joshua Hawxwell