Module: Entraceable

Defined in:
lib/entraceable.rb,
lib/entraceable/version.rb

Constant Summary collapse

VERSION =
"0.1.4"

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.default_levelObject

Returns the value of attribute default_level.



9
10
11
# File 'lib/entraceable.rb', line 9

def default_level
  @default_level
end

Class Method Details

.disableObject



11
12
13
# File 'lib/entraceable.rb', line 11

def disable
  @enabled = false
end

.enableObject



15
16
17
# File 'lib/entraceable.rb', line 15

def enable
  @enabled = true
end

.enabled?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/entraceable.rb', line 19

def enabled?
  @enabled
end

.loggerObject



23
24
25
# File 'lib/entraceable.rb', line 23

def logger
  @logger ||= Rails.logger
end

.logger=(arg) ⇒ Object



27
28
29
# File 'lib/entraceable.rb', line 27

def logger=(arg)
  @logger = arg
end

Instance Method Details

#distraceable(method) ⇒ Object



51
52
53
54
55
56
57
58
# File 'lib/entraceable.rb', line 51

def distraceable(method)
  alias_name = alias_name_for method
  class_eval <<-EOS
    remove_method :#{method}
    alias_method :#{method}, :#{alias_name}
    remove_method :#{alias_name}
  EOS
end

#entraceable(method, tag: nil, level: nil) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/entraceable.rb', line 32

def entraceable(method, tag: nil, level: nil)
  alias_name = alias_name_for method
  class_eval <<-EOS
    alias_method :#{alias_name}, :#{method}
    def #{method}(*args)
      indent = " " * ((@indent_level ||= 0) * 2)
      level = (#{level.inspect} || Entraceable.default_level).intern
      puts = ->c{Entraceable.logger.tagged(%Q(#{tag})) {Entraceable.logger.send level, indent + c} if Entraceable.enabled?}
      puts.call %Q(#{method} is called with arguments, \#\{args.map(&:inspect).join(", ")\})
      @indent_level += 1
      begin
        send(:#{alias_name}, *args).tap{|result|puts.call %Q(#{method} returns \#\{result\})}
      ensure
        @indent_level -= 1
      end
    end
  EOS
end