Module: Entraceable

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

Defined Under Namespace

Classes: Preference

Constant Summary collapse

VERSION =
"0.1.5"

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.preference ⇒ Object

Returns the value of attribute preference.



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

def preference
  @preference
end

Class Method Details

.default_level ⇒ Object



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

def default_level
  preference.default_level
end

.default_level=(default_level) ⇒ Object



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

def default_level=(default_level)
  preference.default_level = default_level
end

.disable ⇒ Object



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

def disable
  preference.disable
end

.enable ⇒ Object



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

def enable
  preference.enable
end

.enabled? ⇒ Boolean

Returns:

  • (Boolean)


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

def enabled?
  preference.enabled?
end

.logger ⇒ Object



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

def logger
  @logger ||= Rails.logger
end

.logger=(arg) ⇒ Object



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

def logger=(arg)
  @logger = arg
end

Instance Method Details

#distraceable(method) ⇒ Object



58
59
60
61
62
63
64
65
# File 'lib/entraceable.rb', line 58

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



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

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