Sha256: 837766d653d45ec745984e4ea9ce55adb8ff255ef93960bb8bbbcbb18b51a272

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

require 'cgi'
require 'pp'

class TraceTree
  module ReturnValue

    CONSOLE_JS = File.read File.expand_path('../console.js', __FILE__)

    CONSOLE_CSS = File.read File.expand_path('../console.css', __FILE__)

    BLANK = ''.freeze

    NEED_PP = (
      if File.exists? (pp_config = File.join(ENV['HOME'], '.trace_tree_pp'))
        IO.readlines(pp_config).map &:strip
      else
        []
      end
    ).freeze

    def data_for_tree_html
      attr_value = ::CGI.escapeHTML return_value._trace_tree_pp(config)
      super.merge!({return: attr_value})
    end

    def css_for_tree_html
      super + CONSOLE_CSS
    end

    def body_js_for_tree_html
      super.push({text: CONSOLE_JS})
    end

    def self.formatted klass, &block
      klass.send :define_method, :_trace_tree_pp, &block
    end

    formatted BasicObject do |*|
      ::Kernel.instance_method(:to_s).bind(self).call
    end

    formatted Object do |config|
      if self.class.ancestors.any?{ |a| config.pp_return_value.include? a.to_s }
        ::PP.singleline_pp(self, ::TraceTree::ReturnValue::BLANK.dup)
      else
        self.to_s
      end
    end

    formatted Array do |config|
      "[#{self.map{ |e| e._trace_tree_pp(config) }.join(', ')}]"
    end

    formatted Hash do |config|
      pairs = self.map{ |k, v| "#{k._trace_tree_pp(config)}=>#{v._trace_tree_pp(config)}"}
      "{#{pairs.join(', ')}}"
    end

    [ENV.singleton_class, Struct, Range, MatchData,
     Numeric, Symbol, FalseClass, TrueClass, NilClass, Module].each do |klass|
      formatted klass do |*|
        ::PP.singleline_pp(self, ::TraceTree::ReturnValue::BLANK.dup)
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trace_tree-0.2.10 lib/trace_tree/return_value.rb