hirb 0.2.7 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +7 -0
- data/README.rdoc +2 -2
- data/VERSION.yml +1 -1
- data/lib/hirb/helpers/active_record_table.rb +1 -1
- data/lib/hirb/helpers/parent_child_tree.rb +7 -6
- data/lib/hirb/helpers/table.rb +15 -4
- data/lib/hirb/pager.rb +1 -0
- data/lib/hirb/util.rb +7 -2
- data/lib/hirb/view.rb +4 -0
- data/test/table_test.rb +32 -0
- data/test/view_test.rb +7 -0
- metadata +2 -2
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.2.8
|
2
|
+
* Added callbacks to Hirb::Helper::Table.
|
3
|
+
* Added :change_fields option to Hirb::Helpers::Table.
|
4
|
+
* Added terminal size detection for jruby.
|
5
|
+
* Bug fix for paging long outputs.
|
6
|
+
* Bug fix to make unexpected hirb rendering errors more clear.
|
7
|
+
|
1
8
|
== 0.2.7
|
2
9
|
* 2 ruby 1.9 bug fixes.
|
3
10
|
* Bug fix in :fields of Hirb::Helpers::ObjectTable.
|
data/README.rdoc
CHANGED
@@ -12,7 +12,7 @@ model classes as tables. Hirb also sports a nice selection menu, Hirb::Menu.
|
|
12
12
|
|
13
13
|
Install the gem with:
|
14
14
|
|
15
|
-
sudo gem install
|
15
|
+
sudo gem install hirb
|
16
16
|
|
17
17
|
== Pager
|
18
18
|
|
@@ -151,7 +151,7 @@ app's needs}[http://github.com/cldwalker/tag-tree].
|
|
151
151
|
|
152
152
|
== Credits
|
153
153
|
* Chrononaut for vertical table helper.
|
154
|
-
* crafterm and
|
154
|
+
* crafterm, spastorino and joshua for bug fixes.
|
155
155
|
|
156
156
|
== Bugs/Issues
|
157
157
|
Please report them {on github}[http://github.com/cldwalker/hirb/issues].
|
data/VERSION.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Hirb::Helpers::ActiveRecordTable < Hirb::Helpers::ObjectTable
|
2
|
-
# Rows are Rails' ActiveRecord::Base objects.
|
2
|
+
# Rows are Rails' ActiveRecord::Base objects. These objects should all be from one class.
|
3
3
|
# Takes same options as Hirb::Helpers::Table.render except as noted below.
|
4
4
|
#
|
5
5
|
# Options:
|
@@ -3,21 +3,22 @@ class Hirb::Helpers::ParentChildTree < Hirb::Helpers::Tree
|
|
3
3
|
# Starting with the given node, this builds a tree by recursively calling a children method.
|
4
4
|
# Takes same options as Hirb::Helper::Table.render with some additional ones below.
|
5
5
|
# ==== Options:
|
6
|
-
# [:value_method] Method to call to display as a node's value. If not given, uses :name if node
|
6
|
+
# [:value_method] Method or proc to call to display as a node's value. If not given, uses :name if node
|
7
7
|
# responds to :name or defaults to :object_id.
|
8
8
|
# [:children_method] Method or proc to call to obtain a node's children. Default is :children.
|
9
9
|
def render(root_node, options={})
|
10
|
-
|
11
|
-
@
|
10
|
+
value_method = options[:value_method] || (root_node.respond_to?(:name) ? :name : :object_id)
|
11
|
+
@value_method = value_method.is_a?(Proc) ? value_method : lambda {|n| n.send(value_method) }
|
12
|
+
children_method = options[:children_method] || :children
|
13
|
+
@children_method = children_method.is_a?(Proc) ? children_method : lambda {|n| n.send(children_method)}
|
12
14
|
@nodes = []
|
13
15
|
build_node(root_node, 0)
|
14
16
|
super(@nodes, options)
|
15
17
|
end
|
16
18
|
|
17
19
|
def build_node(node, level) #:nodoc:
|
18
|
-
@nodes << {:value
|
19
|
-
|
20
|
-
children.each {|e| build_node(e, level + 1)}
|
20
|
+
@nodes << {:value=>@value_method.call(node), :level=>level}
|
21
|
+
@children_method.call(node).each {|e| build_node(e, level + 1)}
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
data/lib/hirb/helpers/table.rb
CHANGED
@@ -42,6 +42,8 @@ module Hirb
|
|
42
42
|
# [:max_width] The maximum allowed width of all fields put together. This option is enforced except when the field_lengths option is set.
|
43
43
|
# This doesn't count field borders as part of the total.
|
44
44
|
# [:number] When set to true, numbers rows by adding a :hirb_number column as the first column. Default is false.
|
45
|
+
# [:change_fields] A hash to change old field names to new field names. This is useful when wanting to change auto-generated keys to
|
46
|
+
# more user-friendly names i.e. for array of arrays.
|
45
47
|
# [:filters] A hash of fields and the filters that each row in the field must run through. The filter converts the cell's value by applying
|
46
48
|
# a given proc or an array containing a method and optional arguments to it.
|
47
49
|
# [:vertical] When set to true, renders a vertical table using Hirb::Helpers::VerticalTable. Default is false.
|
@@ -64,7 +66,7 @@ module Hirb
|
|
64
66
|
|
65
67
|
#:stopdoc:
|
66
68
|
def initialize(rows, options={})
|
67
|
-
@options = {:description=>true, :filters=>{}}.merge(options)
|
69
|
+
@options = {:description=>true, :filters=>{}, :change_fields=>{}}.merge(options)
|
68
70
|
@fields = set_fields(rows)
|
69
71
|
@rows = setup_rows(rows)
|
70
72
|
@headers = @fields.inject({}) {|h,e| h[e] = e.to_s; h}
|
@@ -79,7 +81,7 @@ module Hirb
|
|
79
81
|
end
|
80
82
|
|
81
83
|
def set_fields(rows)
|
82
|
-
if @options[:fields]
|
84
|
+
fields = if @options[:fields]
|
83
85
|
@options[:fields].dup
|
84
86
|
else
|
85
87
|
if rows[0].is_a?(Hash)
|
@@ -89,18 +91,27 @@ module Hirb
|
|
89
91
|
rows[0].is_a?(Array) ? (0..rows[0].length - 1).to_a : []
|
90
92
|
end
|
91
93
|
end
|
94
|
+
@options[:change_fields].each do |oldf, newf|
|
95
|
+
(index = fields.index(oldf)) ? fields[index] = newf : fields << newf
|
96
|
+
end
|
97
|
+
fields
|
92
98
|
end
|
93
99
|
|
94
100
|
def setup_rows(rows)
|
95
|
-
rows
|
96
|
-
rows = [rows] unless rows.is_a?(Array)
|
101
|
+
rows = Array(rows)
|
97
102
|
if rows[0].is_a?(Array)
|
98
103
|
rows = rows.inject([]) {|new_rows, row|
|
99
104
|
new_rows << array_to_indices_hash(row)
|
100
105
|
}
|
101
106
|
end
|
107
|
+
@options[:change_fields].each do |oldf, newf|
|
108
|
+
rows.each {|e| e[newf] = e.delete(oldf) if e.key?(oldf) }
|
109
|
+
end
|
102
110
|
rows = filter_values(rows)
|
103
111
|
rows.each_with_index {|e,i| e[:hirb_number] = (i + 1).to_s} if @options[:number]
|
112
|
+
methods.grep(/_callback$/).sort.each do |meth|
|
113
|
+
rows = send(meth, rows, @options.dup)
|
114
|
+
end
|
104
115
|
validate_values(rows)
|
105
116
|
rows
|
106
117
|
end
|
data/lib/hirb/pager.rb
CHANGED
data/lib/hirb/util.rb
CHANGED
@@ -59,8 +59,13 @@ module Hirb
|
|
59
59
|
# Returns [width, height] of terminal when detected, nil if not detected.
|
60
60
|
# Think of this as a simpler version of Highline's Highline::SystemExtensions.terminal_size()
|
61
61
|
def detect_terminal_size
|
62
|
-
(ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
|
63
|
-
|
62
|
+
if (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/)
|
63
|
+
[ENV['COLUMNS'].to_i, ENV['LINES'].to_i]
|
64
|
+
elsif RUBY_PLATFORM =~ /java/ && command_exists?('tput')
|
65
|
+
[`tput cols`.to_i, `tput lines`.to_i]
|
66
|
+
else
|
67
|
+
command_exists?('stty') ? `stty size`.scan(/\d+/).map { |s| s.to_i }.reverse : nil
|
68
|
+
end
|
64
69
|
rescue
|
65
70
|
nil
|
66
71
|
end
|
data/lib/hirb/view.rb
CHANGED
@@ -68,6 +68,10 @@ module Hirb
|
|
68
68
|
# Hirb::Formatter.format_output(). Returns true if successful and false if no formatting is done or if not enabled.
|
69
69
|
def view_output(output, options={})
|
70
70
|
enabled? && config[:formatter] && render_output(output, options)
|
71
|
+
rescue Exception=>e
|
72
|
+
index = (obj = e.backtrace.find {|f| f =~ /^\(eval\)/}) ? e.backtrace.index(obj) : e.backtrace.length
|
73
|
+
$stderr.puts "Hirb Error: #{e.message}", e.backtrace.slice(0,index).map {|e| " " + e }
|
74
|
+
true
|
71
75
|
end
|
72
76
|
|
73
77
|
# Captures STDOUT and renders it using render_method(). The main use case is to conditionally page captured stdout.
|
data/test/table_test.rb
CHANGED
@@ -318,8 +318,40 @@ class Hirb::Helpers::TableTest < Test::Unit::TestCase
|
|
318
318
|
TABLE
|
319
319
|
table([{:a=>1, :b=>2}, {:a=>3, :c=>4}], :all_fields=>true).should == expected_table
|
320
320
|
end
|
321
|
+
|
322
|
+
test "change_fields option renders" do
|
323
|
+
expected_table = <<-TABLE.unindent
|
324
|
+
+------+-------+
|
325
|
+
| name | value |
|
326
|
+
+------+-------+
|
327
|
+
| 1 | 2 |
|
328
|
+
| 2 | 3 |
|
329
|
+
+------+-------+
|
330
|
+
2 rows in set
|
331
|
+
TABLE
|
332
|
+
table([[1,2],[2,3]], :change_fields=>{0=>'name', 1=>'value'}).should == expected_table
|
333
|
+
end
|
321
334
|
end
|
322
335
|
|
336
|
+
test "table can detect and run callbacks" do
|
337
|
+
Hirb::Helpers::Table.send(:define_method, :and_one_callback) do |obj, opt|
|
338
|
+
obj.each {|row| row.each {|k,v| row[k] += opt[:add] } }
|
339
|
+
obj
|
340
|
+
end
|
341
|
+
|
342
|
+
expected_table = <<-TABLE.unindent
|
343
|
+
+---+---+
|
344
|
+
| a | b |
|
345
|
+
+---+---+
|
346
|
+
| 2 | 3 |
|
347
|
+
| 4 | 5 |
|
348
|
+
+---+---+
|
349
|
+
2 rows in set
|
350
|
+
TABLE
|
351
|
+
table([{'a'=>1, 'b'=>2}, {'a'=>3, 'b'=>4}], :add=>1).should == expected_table
|
352
|
+
Hirb::Helpers::Table.send(:remove_method, :and_one_callback)
|
353
|
+
end
|
354
|
+
|
323
355
|
test "restrict_field_lengths ensures columns total doesn't exceed max width" do
|
324
356
|
@table = Hirb::Helpers::Table.new([{:f1=>'f1', :f2=>'2', :f3=>'3', :f4=>'4'}])
|
325
357
|
field_lengths = {:f1=>135, :f2=>45, :f3=>4, :f4=>55}
|
data/test/view_test.rb
CHANGED
@@ -22,6 +22,13 @@ module Hirb
|
|
22
22
|
View.page_output('blah').should be(false)
|
23
23
|
end
|
24
24
|
|
25
|
+
test "view_output catches unexpected errors and prints them" do
|
26
|
+
Hirb.enable
|
27
|
+
View.expects(:render_output).raises('blah')
|
28
|
+
capture_stderr { View.view_output([1,2,3]) }.should =~ /Hirb Error: blah/
|
29
|
+
Hirb.disable
|
30
|
+
end
|
31
|
+
|
25
32
|
context "enable" do
|
26
33
|
before(:each) { reset_config }
|
27
34
|
after(:each) { Hirb.disable }
|
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.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Horner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-07 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|