cldwalker-hirb 0.1.1 → 0.1.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/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.1.2
2
+ * Added tree views.
3
+ * Added output_method option to Hirb::View.render_output.
4
+
1
5
  == 0.1.1
2
6
  * Fixed bug when rendering table with many fields.
3
7
 
data/README.rdoc CHANGED
@@ -3,15 +3,15 @@
3
3
  Hirb currently provides a mini view framework for console applications, designed with irb in mind.
4
4
  Given the output of a console application, it renders a view if there is one configured, based on
5
5
  the output's class. The framework encourages reusing views by letting you package them in classes
6
- and associate them with any number of output classes. Hirb comes with table views (see
7
- Hirb::Helpers::Table) which work out of the box with any output class, especially Rails' model
8
- classes.
6
+ and associate them with any number of output classes. Hirb comes with tree views (see
7
+ Hirb::Helpers::Tree) and table views (see Hirb::Helpers::Table). By default Hirb displays Rails'
8
+ model classes as tables.
9
9
 
10
10
  == Install
11
11
 
12
12
  Install the gem with:
13
13
 
14
- sudo gem install cldwalker-hirb -s http://gems.github.com
14
+ sudo gem install cldwalker-hirb --source http://gems.github.com
15
15
 
16
16
  == Rails Example
17
17
 
@@ -214,14 +214,15 @@ and colors to work nicely, please fork. To colorize your Hirb output:
214
214
 
215
215
  == Motivation
216
216
  Table code from http://gist.github.com/72234 and {my console
217
- app}[http://github.com/cldwalker/tag-tree].
217
+ app's needs}[http://github.com/cldwalker/tag-tree].
218
218
 
219
219
  == Links
220
220
  * http://tagaholic.me/2009/03/13/hirb-irb-on-the-good-stuff.html
221
+ * http://tagaholic.me/2009/03/18/ruby-class-trees-rails-plugin-trees-with-hirb.html
221
222
 
222
223
  == Todo
223
- * Create tree views.
224
- * Possibly add non-view irb goodies ie command manager.
225
224
  * Configurable max height, which if exceeded activates a pager.
225
+ * Possibly add non-view irb goodies ie command manager.
226
+ * Consider applying multiple views/filters to output.
226
227
  * Provides helper methods to all view classes.
227
228
  * Consider adding a template system as needed.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 1
4
- :patch: 1
4
+ :patch: 2
data/lib/hirb/console.rb CHANGED
@@ -9,7 +9,7 @@ module Hirb
9
9
  def table(output, options={})
10
10
  Hirb::View.console_render_output(output, options.merge(:class=>"Hirb::Helpers::AutoTable"))
11
11
  end
12
- # Renders any specified view for the given object. Takes same options as Hirb::View.render_output.
12
+ # Renders any specified view for the given object. Takes same options as Hirb::View.console_render_output.
13
13
  def view(*args)
14
14
  Hirb::View.console_render_output(*args)
15
15
  end
@@ -0,0 +1,22 @@
1
+ class Hirb::Helpers::ParentChildTree < Hirb::Helpers::Tree
2
+ class <<self
3
+ # Starting with the given node, this builds a tree by recursively calling a children method.
4
+ # Takes same options as Hirb::Helper::Table.render with some additional ones below.
5
+ # ==== Options:
6
+ # [:value_method] Method to call to display as a node's value. If not given, uses :name if node
7
+ # responds to :name or defaults to :object_id.
8
+ # [:children_method] Method to call to obtain a node's children. Default is :children.
9
+ def render(root_node, options={})
10
+ @value_method = options[:value_method] || (root_node.respond_to?(:name) ? :name : :object_id)
11
+ @children_method = options[:children_method] || :children
12
+ @nodes = []
13
+ build_node(root_node, 0)
14
+ super(@nodes, options)
15
+ end
16
+
17
+ def build_node(node, level) #:nodoc:
18
+ @nodes << {:value=>node.send(@value_method), :level=>level}
19
+ node.send(@children_method).each {|e| build_node(e, level + 1)}
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,177 @@
1
+ # Base tree class which given an array of nodes produces different types of trees.
2
+ # The types of trees currently are:
3
+ # * basic:
4
+ # 0
5
+ # 1
6
+ # 2
7
+ # 3
8
+ # 4
9
+ #
10
+ # * directory:
11
+ # 0
12
+ # |-- 1
13
+ # | |-- 2
14
+ # | `-- 3
15
+ # `-- 4
16
+ #
17
+ # * number:
18
+ # 1. 0
19
+ # 1. 1
20
+ # 1. 2
21
+ # 2. 3
22
+ # 2. 4
23
+ #
24
+ # Tree nodes can be given as an array of arrays or an array of hashes.
25
+ # To render the above basic tree with an array of hashes:
26
+ # Hirb::Helpers::Tree.render([{:value=>0, :level=>0}, {:value=>1, :level=>1}, {:value=>2, :level=>2},
27
+ # {:value=>3, :level=>2}, {:value=>4, :level=>1}])
28
+ # Note from the hash keys that :level refers to the depth of the tree while :value refers to the text displayed
29
+ # for a node.
30
+ #
31
+ # To render the above basic tree with an array of arrays:
32
+ # Hirb::Helpers::Tree.render([[0,0], [1,1], [2,2], [2,3], [1,4]])
33
+ # Note that the each array pair consists of the level and the value for the node.
34
+ class Hirb::Helpers::Tree
35
+ class ParentlessNodeError < StandardError; end
36
+
37
+ class <<self
38
+ # Main method which renders a tree.
39
+ # ==== Options:
40
+ # [:type] Type of tree. Either :basic, :directory or :number. Default is :basic.
41
+ # [:validate] Boolean to validate tree. Checks to see if all nodes have parents. Raises ParentlessNodeError if
42
+ # an invalid node is found. Default is false.
43
+ # [:indent] Number of spaces to indent between levels for basic + number trees. Default is 4.
44
+ # [:limit] Limits the level or depth of a tree that is displayed. Root node is level 0.
45
+ # [:description] Displays brief description about tree ie how many nodes it has.
46
+ # Examples:
47
+ # Hirb::Helpers::Tree.render([[0, 'root'], [1, 'child']], :type=>:directory)
48
+ def render(nodes, options={})
49
+ new(nodes, options).render
50
+ end
51
+ end
52
+
53
+ # :stopdoc:
54
+ attr_accessor :nodes
55
+
56
+ def initialize(input_nodes, options={})
57
+ @options = options
58
+ @type = options[:type] || :basic
59
+ if input_nodes[0].is_a?(Array)
60
+ @nodes = input_nodes.map {|e| Node.new(:level=>e[0], :value=>e[1]) }
61
+ else
62
+ @nodes = input_nodes.map {|e| Node.new(e)}
63
+ end
64
+ @nodes.each_with_index {|e,i| e.merge!(:tree=>self, :index=>i)}
65
+ @nodes.each {|e| e[:value] = e[:value].to_s }
66
+ validate_nodes if options[:validate]
67
+ self
68
+ end
69
+
70
+ def render
71
+ body = render_tree
72
+ body += render_description if @options[:description]
73
+ body
74
+ end
75
+
76
+ def render_description
77
+ "\n\n#{@nodes.length} #{@nodes.length == 1 ? 'node' : 'nodes'} in tree"
78
+ end
79
+
80
+ def render_tree
81
+ @indent = ' ' * (@options[:indent] || 4 )
82
+ @nodes = @nodes.select {|e| e[:level] <= @options[:limit] } if @options[:limit]
83
+ case @type.to_s
84
+ when 'directory'
85
+ render_directory
86
+ when 'number'
87
+ render_number
88
+ else
89
+ render_basic
90
+ end
91
+ end
92
+
93
+ def render_directory
94
+ mark_last_nodes_per_level
95
+ new_nodes = []
96
+ @nodes.each_with_index {|e, i|
97
+ value = ''
98
+ unless e.root?
99
+ value << e.render_parent_characters
100
+ value << (e[:last_node] ? "`-- " : "|-- ")
101
+ end
102
+ value << e[:value]
103
+ new_nodes << value
104
+ }
105
+ new_nodes.join("\n")
106
+ end
107
+
108
+ def render_number
109
+ counter = {}
110
+ @nodes.each {|e|
111
+ parent_level_key = "#{(e.parent ||{})[:index]}.#{e[:level]}"
112
+ counter[parent_level_key] ||= 0
113
+ counter[parent_level_key] += 1
114
+ e[:pre_value] = "#{counter[parent_level_key]}. "
115
+ }
116
+ @nodes.map {|e| @indent * e[:level] + e[:pre_value] + e[:value]}.join("\n")
117
+ end
118
+
119
+ def render_basic
120
+ @nodes.map {|e| @indent * e[:level] + e[:value]}.join("\n")
121
+ end
122
+
123
+ def validate_nodes
124
+ @nodes.each do |e|
125
+ raise ParentlessNodeError if (e[:level] > e.previous[:level]) && (e[:level] - e.previous[:level]) > 1
126
+ end
127
+ end
128
+
129
+ # walks tree accumulating last nodes per unique parent+level
130
+ def mark_last_nodes_per_level
131
+ @nodes.each {|e| e.delete(:last_node)}
132
+ last_node_hash = @nodes.inject({}) {|h,e|
133
+ h["#{(e.parent ||{})[:index]}.#{e[:level]}"] = e; h
134
+ }
135
+ last_node_hash.values.uniq.each {|e| e[:last_node] = true}
136
+ end
137
+ #:startdoc:
138
+ class Node < ::Hash #:nodoc:
139
+ class MissingLevelError < StandardError; end
140
+ class MissingValueError < StandardError; end
141
+
142
+ def initialize(hash)
143
+ super
144
+ raise MissingLevelError unless hash.has_key?(:level)
145
+ raise MissingValueError unless hash.has_key?(:value)
146
+ replace(hash)
147
+ end
148
+
149
+ def parent
150
+ self[:tree].nodes.slice(0 .. self[:index]).reverse.detect {|e| e[:level] < self[:level]}
151
+ end
152
+
153
+ def next
154
+ self[:tree].nodes[self[:index] + 1]
155
+ end
156
+
157
+ def previous
158
+ self[:tree].nodes[self[:index] - 1]
159
+ end
160
+
161
+ def root?; self[:level] == 0; end
162
+
163
+ # refers to characters which connect parent nodes
164
+ def render_parent_characters
165
+ parent_chars = []
166
+ get_parents_character(parent_chars)
167
+ parent_chars.reverse.map {|level| level + ' ' * 3 }.to_s
168
+ end
169
+
170
+ def get_parents_character(parent_chars)
171
+ if self.parent
172
+ parent_chars << (self.parent[:last_node] ? ' ' : '|') unless self.parent.root?
173
+ self.parent.get_parents_character(parent_chars)
174
+ end
175
+ end
176
+ end
177
+ end
data/lib/hirb/helpers.rb CHANGED
@@ -2,6 +2,6 @@ module Hirb
2
2
  module Helpers #:nodoc:
3
3
  end
4
4
  end
5
- %w{table object_table active_record_table auto_table}.each do |e|
5
+ %w{table object_table active_record_table auto_table tree parent_child_tree}.each do |e|
6
6
  require "hirb/helpers/#{e}"
7
7
  end
data/lib/hirb/util.rb CHANGED
@@ -15,5 +15,15 @@ module Hirb
15
15
  nil
16
16
  end
17
17
  end
18
+
19
+ # Recursively merge hash1 with hash2.
20
+ def recursive_hash_merge(hash1, hash2)
21
+ hash1.merge(hash2) {|k,o,n| (o.is_a?(Hash)) ? recursive_hash_merge(o,n) : n}
22
+ end
23
+
24
+ # from Rails ActiveSupport
25
+ def camelize(string)
26
+ string.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
27
+ end
18
28
  end
19
29
  end
data/lib/hirb/view.rb CHANGED
@@ -43,6 +43,7 @@ module Hirb
43
43
  # [:method] Specifies a global (Kernel) method to do the formatting.
44
44
  # [:class] Specifies a class to do the formatting, using its render() class method. The render() method's arguments are the output and
45
45
  # an options hash.
46
+ # [:output_method] Specifies a method to call on output before passing it to a formatter.
46
47
  # [:options] Options to pass the formatter method or class.
47
48
  def render_output(output, options={}, &block)
48
49
  if block && block.arity > 0
@@ -70,7 +71,7 @@ module Hirb
70
71
 
71
72
  # Config hash which maps classes to view hashes. View hashes are the same as the options hash of render_output().
72
73
  def output_config
73
- @config[:output]
74
+ config[:output]
74
75
  end
75
76
 
76
77
  def output_config=(value)
@@ -83,20 +84,45 @@ module Hirb
83
84
  current_config = self.config.dup.merge(:output=>output_config)
84
85
  load_config(current_config)
85
86
  end
86
-
87
- #:stopdoc:
88
- def console_render_output(output, options={}, &block)
87
+
88
+ # A console version of render_output which takes its same options but allows for some shortcuts.
89
+ # Examples:
90
+ # console_render_output output, :tree, :type=>:directory
91
+ # # is the same as:
92
+ # render_output output, :class=>"Hirb::Helpers::Tree", :options=> {:type=>:directory}
93
+ #
94
+ def console_render_output(*args, &block)
95
+ load_config unless @config
96
+ output = args.shift
97
+ if args[0].is_a?(Symbol) && (view = args.shift)
98
+ symbol_options = find_view(view)
99
+ end
100
+ options = args[-1].is_a?(Hash) ? args[-1] : {}
101
+ options.merge!(symbol_options) if symbol_options
89
102
  # iterates over format_output options that aren't :options
90
- real_options = [:method, :class].inject({}) do |h, e|
91
- h[e] = options.delete(e) if options[e]
92
- h
103
+ real_options = [:method, :class, :output_method].inject({}) do |h, e|
104
+ h[e] = options.delete(e) if options[e]; h
93
105
  end
94
106
  render_output(output, real_options.merge(:options=>options), &block)
95
107
  end
96
108
 
109
+ #:stopdoc:
110
+ def find_view(name)
111
+ name = name.to_s
112
+ if (view_method = output_config.values.find {|e| e[:method] == name })
113
+ {:method=>view_method[:method]}
114
+ elsif (view_class = Hirb::Helpers.constants.find {|e| e == Util.camelize(name)})
115
+ {:class=>"Hirb::Helpers::#{view_class}"}
116
+ else
117
+ {}
118
+ end
119
+ end
120
+
97
121
  def format_output(output, options={})
98
122
  output_class = determine_output_class(output)
99
- options = output_class_options(output_class).merge(options)
123
+ options = Util.recursive_hash_merge(output_class_options(output_class), options)
124
+ output = options[:output_method] ? (output.is_a?(Array) ? output.map {|e| e.send(options[:output_method])} :
125
+ output.send(options[:output_method]) ) : output
100
126
  args = [output]
101
127
  args << options[:options] if options[:options] && !options[:options].empty?
102
128
  if options[:method]
@@ -115,11 +141,8 @@ module Hirb
115
141
  end
116
142
  end
117
143
 
118
- # Loads config
119
144
  def load_config(additional_config={})
120
- new_config = default_config
121
- new_config[:output].merge!(additional_config.delete(:output) || {})
122
- self.config = new_config.merge(additional_config)
145
+ self.config = Util.recursive_hash_merge default_config, additional_config
123
146
  true
124
147
  end
125
148
 
@@ -155,9 +178,7 @@ module Hirb
155
178
  end
156
179
 
157
180
  def default_config
158
- conf = Hirb.config[:view] || {}
159
- conf[:output] = default_output_config.merge(conf[:output] || {})
160
- conf
181
+ Hirb::Util.recursive_hash_merge({:output=>default_output_config}, Hirb.config[:view] || {} )
161
182
  end
162
183
 
163
184
  def default_output_config
data/test/test_helper.rb CHANGED
@@ -10,7 +10,8 @@ class Test::Unit::TestCase
10
10
  end
11
11
 
12
12
  class String
13
- def unindent
14
- gsub(/^\s*/, '').chomp
13
+ def unindent(num=nil)
14
+ regex = num ? /^\s{#{num}}/ : /^\s*/
15
+ gsub(regex, '').chomp
15
16
  end
16
17
  end
data/test/tree_test.rb ADDED
@@ -0,0 +1,167 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ class Hirb::Helpers::TreeTest < Test::Unit::TestCase
4
+ def tree(*args)
5
+ Hirb::Helpers::Tree.render(*args)
6
+ end
7
+
8
+ context "basic tree" do
9
+ test "with hash nodes renders" do
10
+ expected_tree = <<-TREE.unindent(6)
11
+ 0.0
12
+ 1.1
13
+ 2.2
14
+ 3.2
15
+ 4.1
16
+ TREE
17
+ tree([{:level=>0, :value=>'0.0'}, {:level=>1, :value=>'1.1'}, {:level=>2, :value=>'2.2'},{:level=>2, :value=>'3.2'},
18
+ {:level=>1, :value=>'4.1'}]).should == expected_tree
19
+ end
20
+
21
+ test "with array nodes renders" do
22
+ expected_tree = <<-TREE.unindent(6)
23
+ 0.0
24
+ 1.1
25
+ 2.2
26
+ 3.2
27
+ 4.1
28
+ TREE
29
+ tree([[0, "0.0"], [1, "1.1"], [2, "2.2"], [2, "3.2"], [1, "4.1"]]).should == expected_tree
30
+ end
31
+
32
+ test "with non-string values renders" do
33
+ expected_tree = <<-TREE.unindent(6)
34
+ 0.0
35
+ 1.1
36
+ 2.2
37
+ 3.2
38
+ 4.1
39
+ TREE
40
+ tree([[0,0.0],[1,1.1],[2,2.2],[2,3.2],[1,4.1]]).should == expected_tree
41
+ end
42
+
43
+ test "with indent option renders" do
44
+ expected_tree = <<-TREE.unindent(6)
45
+ 0.0
46
+ 1.1
47
+ 2.2
48
+ 3.2
49
+ 4.1
50
+ TREE
51
+ tree([[0, "0.0"], [1, "1.1"], [2, "2.2"], [2, "3.2"], [1, "4.1"]], :indent=>2).should == expected_tree
52
+ end
53
+
54
+ test "with limit option renders" do
55
+ expected_tree = <<-TREE.unindent(6)
56
+ 0.0
57
+ 1.1
58
+ 4.1
59
+ TREE
60
+ tree([[0, "0.0"], [1, "1.1"], [2, "2.2"], [2, "3.2"], [1, "4.1"]], :limit=>1).should == expected_tree
61
+ end
62
+
63
+ test "with description option renders" do
64
+ expected_tree = <<-TREE.unindent(6)
65
+ 0.0
66
+ 1.1
67
+ 2.2
68
+ 3.2
69
+ 4.1
70
+
71
+ 5 nodes in tree
72
+ TREE
73
+ tree([[0, "0.0"], [1, "1.1"], [2, "2.2"], [2, "3.2"], [1, "4.1"]], :description=>true).should == expected_tree
74
+ end
75
+
76
+ test "with type directory renders" do
77
+ expected_tree = <<-TREE.unindent
78
+ 0.0
79
+ |-- 1.1
80
+ | |-- 2.2
81
+ | `-- 3.2
82
+ `-- 4.1
83
+ TREE
84
+ tree([[0, "0.0"], [1, "1.1"], [2, "2.2"], [2, "3.2"], [1, "4.1"]], :type=>:directory).should == expected_tree
85
+ end
86
+
87
+ test "with type directory and multiple children per level renders" do
88
+ expected_tree = <<-TREE.unindent
89
+ 0.0
90
+ |-- 1.1
91
+ | |-- 2.2
92
+ | | `-- 3.3
93
+ | `-- 4.2
94
+ | `-- 5.3
95
+ `-- 6.1
96
+ TREE
97
+ tree([[0,'0.0'], [1,'1.1'], [2,'2.2'],[3,'3.3'],[2,'4.2'],[3,'5.3'],[1,'6.1']], :type=>:directory).should == expected_tree
98
+ end
99
+
100
+ test "with type number renders" do
101
+ expected_tree = <<-TREE.unindent(6)
102
+ 1. 0
103
+ 1. 1
104
+ 1. 2
105
+ 2. 3
106
+ 2. 4
107
+ TREE
108
+ tree([[0,'0'],[1,'1'],[2,'2'],[2,'3'],[1,'4']], :type=>:number)
109
+ end
110
+ end
111
+
112
+ def mock_node(value, value_method)
113
+ children = []
114
+ value,children = *value if value.is_a?(Array)
115
+ mock(value_method=>value, :children=>children.map {|e| mock_node(e, value_method)})
116
+ end
117
+
118
+ context "parent_child_tree" do
119
+ test "with name value renders" do
120
+ expected_tree = <<-TREE.unindent
121
+ 0.0
122
+ |-- 1.1
123
+ |-- 2.1
124
+ | `-- 3.2
125
+ `-- 4.1
126
+ TREE
127
+ root = mock_node(['0.0', ['1.1', ['2.1', '3.2'], '4.1']], :name)
128
+ Hirb::Helpers::ParentChildTree.render(root, :type=>:directory).should == expected_tree
129
+ end
130
+
131
+ test "with object_id value renders" do
132
+ expected_tree = <<-TREE.unindent
133
+ 0.0
134
+ |-- 1.1
135
+ |-- 2.1
136
+ | `-- 3.2
137
+ `-- 4.1
138
+ TREE
139
+ root = mock_node(['0.0', ['1.1', ['2.1', '3.2'], '4.1']], :object_id)
140
+ Hirb::Helpers::ParentChildTree.render(root, :type=>:directory).should == expected_tree
141
+ end
142
+
143
+ test "with value_method option renders" do
144
+ expected_tree = <<-TREE.unindent
145
+ 0.0
146
+ |-- 1.1
147
+ |-- 2.1
148
+ | `-- 3.2
149
+ `-- 4.1
150
+ TREE
151
+ root = mock_node(['0.0', ['1.1', ['2.1', '3.2'], '4.1']], :blah)
152
+ Hirb::Helpers::ParentChildTree.render(root, :type=>:directory, :value_method=>:blah).should == expected_tree
153
+ end
154
+ end
155
+
156
+ test "tree with parentless nodes renders ParentlessNodeError" do
157
+ assert_raises(Hirb::Helpers::Tree::ParentlessNodeError) { tree([[0, "0.0"], [2, '1.2']], :validate=>true) }
158
+ end
159
+
160
+ test "tree with hash nodes missing level raises MissingLevelError" do
161
+ assert_raises(Hirb::Helpers::Tree::Node::MissingLevelError) { tree([{:value=>'ok'}]) }
162
+ end
163
+
164
+ test "tree with hash nodes missing level raises MissingValueError" do
165
+ assert_raises(Hirb::Helpers::Tree::Node::MissingValueError) { tree([{:level=>0}]) }
166
+ end
167
+ end
data/test/util_test.rb CHANGED
@@ -12,4 +12,10 @@ class Hirb::UtilTest < Test::Unit::TestCase
12
12
  test "any_const_get returns class when given class" do
13
13
  Hirb::Util.any_const_get(String).should == String
14
14
  end
15
+
16
+ test "recursive_hash_merge merges" do
17
+ expected_hash = {:output=>{:fields=>["f1", "f2"], :method=>"blah"}, :key1=>"hash1", :key2=>"hash2"}
18
+ Hirb::Util.recursive_hash_merge({:output=>{:fields=>%w{f1 f2}}, :key1=>'hash1'},
19
+ {:output=>{:method=>'blah'}, :key2=>'hash2'}).should == expected_hash
20
+ end
15
21
  end
data/test/view_test.rb CHANGED
@@ -140,6 +140,18 @@ class Hirb::ViewTest < Test::Unit::TestCase
140
140
  Hirb::View.render_output('dude', :class=>"Commify")
141
141
  end
142
142
 
143
+ test "formats with output_method option" do
144
+ set_config 'String'=>{:class=>"Blahify"}
145
+ Hirb::View.render_method.expects(:call).with('d,u,d')
146
+ Hirb::View.render_output('dude', :class=>"Commify", :output_method=>:chop)
147
+ end
148
+
149
+ test "formats output array with output_method option" do
150
+ set_config 'String'=>{:class=>"Blahify"}
151
+ Hirb::View.render_method.expects(:call).with("d,u,d\nm,a")
152
+ Hirb::View.render_output(['dude', 'man'], :class=>"Commify", :output_method=>:chop)
153
+ end
154
+
143
155
  test "formats with block" do
144
156
  Hirb::View.load_config
145
157
  Hirb::View.render_method.expects(:call).with('=dude=')
@@ -147,5 +159,11 @@ class Hirb::ViewTest < Test::Unit::TestCase
147
159
  "=#{output}="
148
160
  }
149
161
  end
162
+
163
+ test "console_render_output merge options option" do
164
+ set_config "String"=>{:class=>"Commify", :options=>{:fields=>%w{f1 f2}}}
165
+ Commify.expects(:render).with('dude', :max_width=>10, :fields=>%w{f1 f2})
166
+ Hirb::View.render_output('dude', :options=>{:max_width=>10})
167
+ end
150
168
  end
151
169
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cldwalker-hirb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
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-03-15 00:00:00 -07:00
12
+ date: 2009-03-18 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -35,7 +35,9 @@ files:
35
35
  - lib/hirb/helpers/active_record_table.rb
36
36
  - lib/hirb/helpers/auto_table.rb
37
37
  - lib/hirb/helpers/object_table.rb
38
+ - lib/hirb/helpers/parent_child_tree.rb
38
39
  - lib/hirb/helpers/table.rb
40
+ - lib/hirb/helpers/tree.rb
39
41
  - lib/hirb/helpers.rb
40
42
  - lib/hirb/import_object.rb
41
43
  - lib/hirb/util.rb
@@ -47,6 +49,7 @@ files:
47
49
  - test/import_test.rb
48
50
  - test/table_test.rb
49
51
  - test/test_helper.rb
52
+ - test/tree_test.rb
50
53
  - test/util_test.rb
51
54
  - test/view_test.rb
52
55
  has_rdoc: true