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.6"
Class Attribute Summary collapse
-
.preference ⇒ Object
Returns the value of attribute preference.
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
.logger ⇒ Object
10 11 12 |
# File 'lib/entraceable.rb', line 10 def logger @logger ||= Rails.logger end |
.logger=(arg) ⇒ Object
14 15 16 |
# File 'lib/entraceable.rb', line 14 def logger=(arg) @logger = arg end |
.method_missing(method, *args, &block) ⇒ Object
18 19 20 21 |
# File 'lib/entraceable.rb', line 18 def method_missing(method, *args, &block) raise NoMethodError.new %q(undefined method `#{method}' for #{preference}:#{preference.class}) unless accept? method preference.__send__ method, *args, &block end |
Instance Method Details
#distraceable(method) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/entraceable.rb', line 48 def distraceable(method) alias_name = alias_name_for method __send__ :remove_method, method __send__ :alias_method, method, alias_name __send__ :remove_method, alias_name end |
#entraceable(method, tag: nil, level: nil) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/entraceable.rb', line 29 def entraceable(method, tag: nil, level: nil) alias_name = alias_name_for method __send__ :alias_method, alias_name, method class_eval <<-EOS def #{method}(*args, &block) 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, &block).tap{|result|puts.call %Q(#{method} returns \#\{result\})} ensure @indent_level -= 1 end end EOS end |