hirb 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.2.5
2
+ * Added ability to use Hirb.enable with non-irb ruby shells.
3
+ * Helper configs now recursively merge when inheriting from others via :ancestor option.
4
+
1
5
  == 0.2.4
2
6
  * Bug fix on UTF-8 support.
3
7
 
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 2
4
- :patch: 4
4
+ :patch: 5
@@ -175,7 +175,7 @@ module Hirb
175
175
  @klass_config[output_class] ||= begin
176
176
  output_ancestors_with_config = output_class.ancestors.map {|e| e.to_s}.select {|e| @config.has_key?(e)}
177
177
  @klass_config[output_class] = output_ancestors_with_config.reverse.inject({}) {|h, klass|
178
- (klass == output_class.to_s || @config[klass][:ancestor]) ? h.update(@config[klass]) : h
178
+ (klass == output_class.to_s || @config[klass][:ancestor]) ? Util.recursive_hash_merge(h, @config[klass]) : h
179
179
  }
180
180
  end
181
181
  end
data/lib/hirb/view.rb CHANGED
@@ -14,25 +14,23 @@ module Hirb
14
14
  # In addition to the config keys mentioned in Hirb, the options also take the following keys:
15
15
  # Options:
16
16
  # * config_file: Name of config file to read.
17
+ # * output_method: Specify an object's class and instance method (separated by a period) to be realiased with
18
+ # hirb's view system. The instance method should take a string to be output. Default is IRB::Irb.output_value
19
+ # if using irb.
17
20
  # Examples:
18
21
  # Hirb::View.enable
19
- # Hirb::View.enable :formatter=>false
22
+ # Hirb::View.enable :formatter=>false, :output_method=>"Mini.output"
20
23
  # Hirb::View.enable {|c| c.output = {'String'=>{:class=>'Hirb::Helpers::Table'}} }
21
24
  def enable(options={}, &block)
22
25
  return puts("Already enabled.") if @enabled
23
26
  @enabled = true
24
27
  Hirb.config_file = options.delete(:config_file) if options[:config_file]
28
+ output_method = "IRB::Irb.output_value" if Object.const_defined?(:IRB)
29
+ output_method = options.delete(:output_method) if options[:output_method]
25
30
  load_config(Util.recursive_hash_merge(options, HashStruct.block_to_hash(block)))
26
31
  resize(config[:width], config[:height])
27
- if Object.const_defined?(:IRB)
28
- ::IRB::Irb.class_eval do
29
- alias :non_hirb_view_output :output_value
30
- def output_value #:nodoc:
31
- Hirb::View.view_output(@context.last_value) || Hirb::View.page_output(@context.last_value.inspect, true) ||
32
- non_hirb_view_output
33
- end
34
- end
35
- end
32
+ alias_output_method(output_method) if output_method
33
+ true
36
34
  end
37
35
 
38
36
  # Indicates if Hirb::View is enabled.
@@ -113,6 +111,26 @@ module Hirb
113
111
  end
114
112
 
115
113
  #:stopdoc:
114
+ def alias_output_method(output_method)
115
+ klass, klass_method = output_method.split(".")
116
+ eval %[
117
+ ::#{klass}.class_eval do
118
+ alias :non_hirb_view_output :#{klass_method}
119
+ if '#{klass}' == "IRB::Irb"
120
+ def #{klass_method} #:nodoc:
121
+ Hirb::View.view_output(@context.last_value) || Hirb::View.page_output(@context.last_value.inspect, true) ||
122
+ non_hirb_view_output
123
+ end
124
+ else
125
+ def #{klass_method}(output_string) #:nodoc:
126
+ Hirb::View.view_output(output_string) || Hirb::View.page_output(output_string.inspect, true) ||
127
+ non_hirb_view_output(output_string)
128
+ end
129
+ end
130
+ end
131
+ ]
132
+ end
133
+
116
134
  def render_output(output, options={})
117
135
  if (formatted_output = formatter.format_output(output, options))
118
136
  render_method.call(formatted_output)
@@ -9,9 +9,11 @@ class FormatterTest < Test::Unit::TestCase
9
9
 
10
10
  before(:all) { eval "module ::Dooda; end" }
11
11
 
12
- test "klass_config merges ancestor options" do
13
- set_formatter "String"=>{:args=>[1,2]}, "Object"=>{:method=>:object_output, :ancestor=>true}, "Kernel"=>{:method=>:default_output}
14
- expected_result = {:method=>:object_output, :args=>[1, 2], :ancestor=>true}
12
+ test "klass_config recursively merges ancestor options" do
13
+ set_formatter "String"=>{:args=>[1,2], :options=>{:fields=>[:to_s]}},
14
+ "Object"=>{:method=>:object_output, :ancestor=>true, :options=>{:vertical=>true}},
15
+ "Kernel"=>{:method=>:default_output}
16
+ expected_result = {:method=>:object_output, :args=>[1, 2], :ancestor=>true, :options=>{:fields=>[:to_s], :vertical=>true}}
15
17
  @formatter.klass_config(::String).should == expected_result
16
18
  end
17
19
 
data/test/view_test.rb CHANGED
@@ -47,6 +47,13 @@ module Hirb
47
47
  Hirb.enable :config_file=> 'test_file'
48
48
  Hirb.config_file.should == 'test_file'
49
49
  end
50
+
51
+ test "with output_method option realiases output_method" do
52
+ eval %[module ::Mini; extend self; def output(str); puts(str.inspect); end; end]
53
+ Hirb.enable :output_method=>"Mini.output", :output=>{"Symbol"=>{:output_method=>lambda {|e| e.to_s }}}
54
+ capture_stdout { ::Mini.output(:yoyo) }.should == "yoyo\n"
55
+ capture_stdout { ::Mini.output('blah') }.should == "\"blah\"\n"
56
+ end
50
57
  end
51
58
 
52
59
  context "resize" do
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
4
+ version: 0.2.5
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-07-08 00:00:00 -04:00
12
+ date: 2009-08-01 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  requirements: []
86
86
 
87
87
  rubyforge_project: tagaholic
88
- rubygems_version: 1.3.2
88
+ rubygems_version: 1.3.5
89
89
  signing_key:
90
90
  specification_version: 3
91
91
  summary: A mini view framework for console/irb that's easy to use, even while under its influence.