This class is responsible for managing all view-related functionality.
Let’s create a simple view for Hash objects:
$ irb -rubygems >> require 'hirb' =>true >> Hirb.enable =>nil >> require 'yaml' =>true # A view method is the smallest view >> def yaml(output); output.to_yaml; end => nil # Add the view >> Hirb.add_view Hash, :method=>:yaml => true # Hashes now appear as yaml >> {:a=>1, :b=>{:c=>3}} --- :a : 1 :b : :c : 3 => true
Another way of creating a view is a Helper class:
# Create yaml view class >> class Hirb::Helpers::Yaml; def self.render(output, options={}); output.to_yaml; end ;end =>nil # Add the view >> Hirb.add_view Hash, :class=>Hirb::Helpers::Yaml =>true # Hashes appear as yaml like above ...
To configure the above Helper class as a view, either pass Hirb.enable a hash:
# In .irbrc require 'hirb' # View class needs to come before enable() class Hirb::Helpers::Yaml; def self.render(output, options={}); output.to_yaml; end ;end Hirb.enable :output=>{"Hash"=>{:class=>"Hirb::Helpers::Yaml"}}
Or create a config file at config/hirb.yml or ~/.hirb.yml:
# The config file for the yaml example would look like: # --- # :output : # Hash : # :class : Hirb::Helpers::Yaml # In .irbrc require 'hirb' # View class needs to come before enable() class Hirb::Helpers::Yaml; def self.render(output, options={}); output.to_yaml; end ;end Hirb.enable
For more about configuring Hirb, see the Config Files section in Hirb.
Adds a view when View is enabled. See Formatter.add_view for more details.
# File lib/hirb/view.rb, line 168 def add(klass, view_config) if enabled? formatter.add_view(klass, view_config) else puts "View must be enabled to add a view" end end
Captures STDOUT and renders it using render_method(). The main use case is to conditionally page captured stdout.
# File lib/hirb/view.rb, line 136 def capture_and_render(&block) render_method.call Util.capture_stdout(&block) end
Disable’s Hirb’s output and revert’s irb’s output method if irb exists.
# File lib/hirb/view.rb, line 95 def disable @enabled = false disable_output_method if @output_method false end
This activates view functionality i.e. the formatter, pager and size detection. If irb exists, it overrides irb’s output method with Hirb::View.view_output. When called multiple times, new configs are merged into the existing config. If using Wirble, you should call this after it. The view configuration can be specified in a hash via a config file, or as options to this method. In addition to the config keys mentioned in Hirb, options also take the following keys:
config_file: Name of config file(s) that are merged into existing config
Examples:
Hirb.enable Hirb.enable :formatter=>false
# File lib/hirb/view.rb, line 78 def enable(options={}, &block) Array(options.delete(:config_file)).each {|e| @new_config_file = true Hirb.config_files << e } enable_output_method unless @output_method merge_or_load_config options resize(config[:width], config[:height]) @enabled = true end
Indicates if Hirb::View is enabled.
# File lib/hirb/view.rb, line 90 def enabled? @enabled || false end
Current formatter config, storing a hash of all static views
# File lib/hirb/view.rb, line 163 def formatter_config formatter.config end
Current console height
# File lib/hirb/view.rb, line 158 def height config && config[:height] ? config[:height] : DEFAULT_HEIGHT end
Resets render_method back to its default.
# File lib/hirb/view.rb, line 148 def reset_render_method @render_method = default_render_method end
Resizes the console width and height for use with the table and pager i.e. after having resized the console window. *nix users should only have to call this method. Non-*nix users should call this method with explicit width and height. If you don’t know your width and height, in irb play with “a”* width to find width and puts “an” * height to find height.
# File lib/hirb/view.rb, line 114 def resize(width=nil, height=nil) config[:width], config[:height] = determine_terminal_size(width, height) pager.resize(config[:width], config[:height]) end
Toggles formatter on or off.
# File lib/hirb/view.rb, line 107 def toggle_formatter config[:formatter] = !config[:formatter] end
Toggles pager on or off. The pager only works while Hirb::View is enabled.
# File lib/hirb/view.rb, line 102 def toggle_pager config[:pager] = !config[:pager] end
This is the main method of this class. When view is enabled, this method searches for a formatter it can use for the output and if successful renders it using render_method(). The options this method takes are helper config hashes as described in Hirb::Formatter.format_output(). Returns true if successful and false if no formatting is done or if not enabled.
# File lib/hirb/view.rb, line 122 def view_output(output, options={}) enabled? && config[:formatter] && render_output(output, options) rescue Exception=>e if config[:ignore_errors] $stderr.puts "Hirb Error: #{e.message}" false else index = (obj = e.backtrace.find {|f| f =~ /^\(eval\)/}) ? e.backtrace.index(obj) : e.backtrace.length $stderr.puts "Hirb Error: #{e.message}", e.backtrace.slice(0,index).map {|e| " " + e } true end end
Generated with the Darkfish Rdoc Generator 2.