Top Level Namespace

Defined Under Namespace

Modules: ActiveFacts, Nokogiri Classes: Array, Exception, TrueClass

Instance Method Summary collapse

Instance Method Details

#debug(*args, &block) ⇒ Object



96
97
98
99
100
101
102
103
# File 'lib/activefacts/support.rb', line 96

def debug(*args, &block)
  begin
    old_indent, old_nested, enabled  = $debug_indent, $debug_nested, debug_show(*args)
    return (block || proc { enabled == 1 }).call
  ensure
    $debug_indent, $debug_nested = old_indent, old_nested
  end
end

#debug_disable(key) ⇒ Object



42
43
44
# File 'lib/activefacts/support.rb', line 42

def debug_disable key
  !key.empty? && $debug_keys.delete(key.to_sym)
end

#debug_enable(key) ⇒ Object



38
39
40
# File 'lib/activefacts/support.rb', line 38

def debug_enable key
  !key.empty? && $debug_keys[key.to_sym] = true
end

#debug_enabled(key) ⇒ Object



34
35
36
# File 'lib/activefacts/support.rb', line 34

def debug_enabled key
  !key.empty? && $debug_keys[key.to_sym]
end

#debug_initializeObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/activefacts/support.rb', line 14

def debug_initialize
  # First time, initialise the tracing environment
  $debug_indent = 0
  unless $debug_keys
    $debug_keys = {}
    if (e = ENV["DEBUG"])
	e.split(/[^_a-zA-Z0-9]/).each{|k| debug_enable(k) }
	if $debug_keys[:help]
 at_exit {
   $stderr.puts "---\nDebugging keys available: #{$debug_available.keys.map{|s| s.to_s}.sort*", "}"
 }
	end
    end
  end
end

#debug_keysObject



30
31
32
# File 'lib/activefacts/support.rb', line 30

def debug_keys
  $debug_available.keys
end

#debug_selected(args) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/activefacts/support.rb', line 50

def debug_selected(args)
  # Figure out whether this trace is enabled (itself or by :all), if it nests, and if we should print the key:
  key =
    if Symbol === args[0]
      control = args.shift
      if (s = control.to_s) =~ /_\Z/
        nested = true
        s.sub(/_\Z/, '').to_sym     # Avoid creating new strings willy-nilly
      else
        control
      end
    else
      :all
    end

  $debug_available[key] ||= key   # Remember that this debug was requested, for help
  enabled = $debug_nested ||      # This debug is enabled because it's in a nested block
            $debug_keys[key] ||   # This debug is enabled in its own right
            $debug_keys[:all]     # This debug is enabled because all are
  $debug_nested = nested
  [
    (enabled ? 1 : 0),
    $debug_keys[:all] ? " %-15s"%control : nil
  ]
end

#debug_show(*args) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/activefacts/support.rb', line 76

def debug_show(*args)
  unless $debug_keys
    debug_initialize
  end

  enabled, key_to_show = debug_selected(args)

  # Emit the message if enabled or a parent is:
  if args.size > 0 && enabled == 1
    puts "\##{key_to_show} " +
      '  '*$debug_indent +
      args.
#          A laudable aim, certainly, but in practise the Procs leak and slow things down:
#          map{|a| a.respond_to?(:call) ? a.call : a}.
        join(' ')
  end
  $debug_indent += enabled
  enabled
end

#debug_toggle(key) ⇒ Object



46
47
48
# File 'lib/activefacts/support.rb', line 46

def debug_toggle key
  !key.empty? and debug_enabled(key) ? (debug_disable(key); false) : (debug_enable(key); true)
end