Module: Looksee::WirbleCompatibility

Defined in:
lib/looksee/wirble_compatibility.rb

Defined Under Namespace

Modules: WirbleLoadHook

Class Method Summary collapse

Class Method Details

.hook_into_irb_output_valueObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/looksee/wirble_compatibility.rb', line 39

def hook_into_irb_output_value
  IRB::Irb.class_eval do
    def output_value_with_looksee
      case @context.last_value
      when Looksee::Inspector, Looksee::Help
        non_color_output_value
      else
        output_value_without_looksee
      end
    end

    alias output_value_without_looksee output_value
    alias output_value output_value_with_looksee
  end
end

.hook_into_wirble_colorizeObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/looksee/wirble_compatibility.rb', line 22

def hook_into_wirble_colorize
  class << Wirble
    def colorize_with_looksee(*args)
      # If this gets called twice, Wirble will fuck up the
      # aliases.  Disable colorizing first to reset them.
      if WirbleCompatibility.hooked_into_irb_output_value?
        Wirble::Colorize.disable
      end
      colorize_without_looksee(*args)
      WirbleCompatibility.hook_into_irb_output_value
    end

    alias colorize_without_looksee colorize
    alias colorize colorize_with_looksee
  end
end

.hook_into_wirble_loadObject



15
16
17
18
19
20
# File 'lib/looksee/wirble_compatibility.rb', line 15

def hook_into_wirble_load
  unless Object.const_defined?(:Wirble)
    Object.const_set :Wirble, Module.new
  end
  Wirble.send :extend, WirbleLoadHook
end

.hooked_into_irb_output_value?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/looksee/wirble_compatibility.rb', line 55

def hooked_into_irb_output_value?
  IRB::Irb.method_defined?(:output_value_with_looksee)
end

.initObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/looksee/wirble_compatibility.rb', line 59

def init
  #
  # How wirble is used:
  #
  #  * Wirble is required/loaded.  Defines Wirble module, with methods like Wirble.colorize.
  #  * Wirble.init is called.  Nothing interesting.
  #  * Wirble.colorize is called.  Hooks into IRB::Irb.output_value via an alias.
  #
  if !wirble_loaded?
    hook_into_wirble_load
  elsif !wirble_colorizing?
    hook_into_wirble_colorize
  else
    hook_into_irb_output_value
  end
end

.wirble_colorizing?Boolean

Returns:

  • (Boolean)


10
11
12
13
# File 'lib/looksee/wirble_compatibility.rb', line 10

def wirble_colorizing?
  require 'irb'
  IRB::Irb.method_defined?(:non_color_output_value)
end

.wirble_loaded?Boolean

Returns:

  • (Boolean)


4
5
6
7
8
# File 'lib/looksee/wirble_compatibility.rb', line 4

def wirble_loaded?
  Object.const_defined?(:Wirble) &&
    Wirble.is_a?(Module) &&
    Wirble.respond_to?(:colorize)
end