hirb 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,6 @@
1
+ == 0.6.2
2
+ * Add * support to 1d/2d menus
3
+
1
4
  == 0.6.1
2
5
  * Fix for mongoid view
3
6
  * Fix tests on rubinius + jruby
@@ -180,7 +180,7 @@ Table code from http://gist.github.com/72234 and {my console app's needs}[http:/
180
180
  == Credits
181
181
  * Chrononaut for vertical table helper.
182
182
  * janlelis for unicode table helper.
183
- * crafterm, spastorino, xaviershay, bogdan, asanghi, vwall and joshua for patches.
183
+ * hsume2, crafterm, spastorino, xaviershay, bogdan, asanghi, vwall and joshua for patches.
184
184
 
185
185
  == Bugs/Issues
186
186
  Please report them {on github}[http://github.com/cldwalker/hirb/issues].
@@ -9,7 +9,7 @@ module Hirb
9
9
  class Error < StandardError; end
10
10
 
11
11
  # Detects valid choices and optional field/column
12
- CHOSEN_REGEXP = /^(\d([^:]+)?)(?::)?(\S+)?/
12
+ CHOSEN_REGEXP = /^(\d([^:]+)?|\*)(?::)?(\S+)?/
13
13
  CHOSEN_ARG = '%s'
14
14
  DIRECTIONS = "Specify individual choices (4,7), range of choices (1-3) or all choices (*)."
15
15
 
@@ -128,14 +128,16 @@ module Hirb
128
128
  end
129
129
 
130
130
  def map_tokens(tokens)
131
- if return_cell_values?
132
- @output[0].is_a?(Hash) ? tokens.map {|arr,f| arr.map {|e| e[f]} }.flatten :
131
+ values = if return_cell_values?
132
+ @output[0].is_a?(Hash) ?
133
+ tokens.map {|arr,f| arr.map {|e| e[f]} } :
133
134
  tokens.map {|arr,f|
134
135
  arr.map {|e| e.is_a?(Array) && f.is_a?(Integer) ? e[f] : e.send(f) }
135
- }.flatten
136
+ }
136
137
  else
137
- tokens.map {|e| e[0] }.flatten
138
+ tokens.map {|arr, f| arr[0] }
138
139
  end
140
+ values.flatten
139
141
  end
140
142
 
141
143
  def return_cell_values?
@@ -154,7 +156,10 @@ module Hirb
154
156
  @new_args << CHOSEN_ARG
155
157
  field = $3 ? unalias_field($3) : default_field ||
156
158
  raise(Error, "No default field/column found. Fields must be explicitly picked.")
157
- [Util.choose_from_array(@output, word), field ]
159
+
160
+ token = Util.choose_from_array(@output, word)
161
+ token = [token] if word[/\*|-|\.\.|,/] && !return_cell_values?
162
+ [token, field]
158
163
  else
159
164
  @new_args << word
160
165
  nil
@@ -35,7 +35,7 @@ module Hirb
35
35
  # '' -> []
36
36
  def choose_from_array(array, input, options={})
37
37
  options = {:splitter=>","}.merge(options)
38
- return array if input.strip == '*'
38
+ return array if input[/^\s*\*/]
39
39
  result = []
40
40
  input.split(options[:splitter]).each do |e|
41
41
  if e =~ /-|\.\./
@@ -1,3 +1,3 @@
1
1
  module Hirb
2
- VERSION = '0.6.1'
2
+ VERSION = '0.6.2'
3
3
  end
@@ -36,7 +36,7 @@ describe "Menu" do
36
36
  it "with block renders" do
37
37
  menu_input "1,2"
38
38
  expected_result = [1,2]
39
- capture_stdout {
39
+ capture_stdout {
40
40
  menu([1,2,3]) {|e| e.should == expected_result }.should == expected_result
41
41
  }
42
42
  end
@@ -177,6 +177,17 @@ describe "Menu" do
177
177
  two_d_menu(:action=>true, :two_d=>nil, :invoke=>[[{:a=>1, :bro=>2}]])
178
178
  end
179
179
 
180
+ it "with 1d invokes on range of choices" do
181
+ menu_input "p 1,2 1-2 1..2"
182
+ choices = [{:a => 1, :bro => 2}, {:a => 3, :bro => 4}]
183
+ two_d_menu(:action=>true, :two_d=>nil, :invoke=>[Array.new(3, choices).flatten])
184
+ end
185
+
186
+ it "with 1d and all choices" do
187
+ menu_input "p *"
188
+ two_d_menu(:action=>true, :two_d => nil, :invoke=>[[{:a => 1, :bro => 2}, {:a => 3, :bro => 4}]])
189
+ end
190
+
180
191
  it "with non-choice arguments invokes" do
181
192
  menu_input "p arg1 1"
182
193
  two_d_menu :action=>true, :invoke=>['arg1', [1]]
@@ -192,6 +203,22 @@ describe "Menu" do
192
203
  capture_stderr { two_d_menu(:action=>true) }.should =~ /No rows chosen/
193
204
  end
194
205
 
206
+ it "with range of choices" do
207
+ menu_input "p 1,2:a 1-2:a 1..2:a"
208
+ choices = [1,3]
209
+ two_d_menu(:action=>true, :invoke=>[Array.new(3, choices).flatten])
210
+ end
211
+
212
+ it "with multiple all choices" do
213
+ menu_input "p * * 2:bro"
214
+ two_d_menu(:action=>true, :invoke=>[[1,3,1,3,4]])
215
+ end
216
+
217
+ it "with all choices with field" do
218
+ menu_input "p *:bro"
219
+ two_d_menu(:action=>true, :invoke=>[[2, 4]])
220
+ end
221
+
195
222
  it "with no command given prints error" do
196
223
  menu_input "1"
197
224
  capture_stderr { two_d_menu(:action=>true) }.should =~ /No command given/
@@ -203,6 +230,12 @@ describe "Menu" do
203
230
  :invokes=>[[['some']]]
204
231
  end
205
232
 
233
+ it "with array menu items and all choices" do
234
+ menu_input "p 1 *"
235
+ two_d_menu :action=>true, :output=>[['some', 'choice'], ['and', 'another']],
236
+ :invokes=>[[['some', 'some', 'and']]]
237
+ end
238
+
206
239
  it "with multi_action option invokes" do
207
240
  menu_input "p 1 2:bro"
208
241
  two_d_menu(:action=>true, :multi_action=>true, :invokes=>[[1], [4]])
@@ -236,4 +269,4 @@ describe "Menu" do
236
269
  }.should =~ /Default.*required/
237
270
  end
238
271
  end
239
- end
272
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hirb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-07 00:00:00.000000000Z
12
+ date: 2012-03-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bacon
16
- requirement: &70230866543140 !ruby/object:Gem::Requirement
16
+ requirement: &70183088619280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.1.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70230866543140
24
+ version_requirements: *70183088619280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mocha
27
- requirement: &70230866542680 !ruby/object:Gem::Requirement
27
+ requirement: &70183088618780 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.9.8
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70230866542680
35
+ version_requirements: *70183088618780
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mocha-on-bacon
38
- requirement: &70230866514280 !ruby/object:Gem::Requirement
38
+ requirement: &70183088617940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.1.1
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70230866514280
46
+ version_requirements: *70183088617940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bacon-bits
49
- requirement: &70230866513900 !ruby/object:Gem::Requirement
49
+ requirement: &70183088617440 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70230866513900
57
+ version_requirements: *70183088617440
58
58
  description: Hirb provides a mini view framework for console applications and uses
59
59
  it to improve ripl(irb)'s default inspect output. Given an object or array of objects,
60
60
  hirb renders a view based on the object's class and/or ancestry. Hirb offers reusable