class MethodLogger::Mixin

Public Class Methods

new(options = {}) click to toggle source
# File lib/method_logger.rb, line 6
def initialize(options = {})
  @_options = default_options.merge(options)
  @_methods = options[:methods]
end

Public Instance Methods

included(base_class) click to toggle source
# File lib/method_logger.rb, line 11
def included(base_class)
  options = @_options
  methods = @_methods || base_class.instance_methods(options[:include_inherited])
  methods -= Object.methods if options[:include_inherited]
  methods += base_class.private_instance_methods(false)
  methods -= options[:ignored_methods]
  formatter = options.delete(:formatter) || default_formatter
  logger = options[:logger] || default_logger(options)

  base_class.class_eval do
    methods.each do |method_name|
      method = instance_method(method_name)

      define_method(method_name) do |*args, &block|
        return_value = method.bind(self).call(*args, &block)
        text = formatter.call(base_class, method_name, args.inspect, return_value.inspect)
        puts(text) if options[:log_to_stdout]
        logger.info(text) if options[:log_to_file]
        return_value
      end
    end
  end
end

Private Instance Methods

default_formatter() click to toggle source
# File lib/method_logger.rb, line 53
def default_formatter
  DefaultFormatter.new
end
default_logger(options) click to toggle source
# File lib/method_logger.rb, line 49
def default_logger(options)
  Logger.new(File.open(options[:filename], 'a+'))
end
default_options() click to toggle source
# File lib/method_logger.rb, line 37
def default_options
  {
    include_inherited: true,
    ignored_methods: [],
    logger: nil,
    formatter: DefaultFormatter.new,
    filename: 'method_logger_log.txt',
    log_to_file: false,
    log_to_stdout: true
  }
end