module Informed

{Informed}, when included, makes it easy to log method calls when they start and finish. It provides a means to log additional data, such as the result of said calls, keyword arguments, or other instance methods.

@example

class FancyService
  attr_accessor :fanciness
  include Informed
  def initialize(fanciness:)
    self.fanciness = fanciness
  end

  def do_something(force: false)
    if fancy? || force
      do_it_fancy
    else
      do_it_plain
    end
  end
  inform_on :do_something, level: :info,
                           also_log: { result: true, values: [:fancy?, :force, :fanciness]}

  def fancy?
    fanciness > 10
  end

  def do_it_plain
    "so plain"
  end

  def do_it_fancy
    "so fancy"
  end
end

FancyService.new(fanciness: 12).do_something
#  I, [2017-04-04T19:46:05.256753 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>true, :fanciness=>12}, :status=>:starting}
#  I, [2017-04-04T19:46:05.256896 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>true, :fanciness=>12}, :status=>:done, :result=>"so fancy"}
#  => "so fancy"
FancyService.new(fanciness: 12).do_something(force: true)
#  I, [2017-04-04T19:46:09.043051 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>true, :force=>true, :fanciness=>12}, :status=>:starting}
#  I, [2017-04-04T19:46:09.043159 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>true, :force=>true, :fanciness=>12}, :status=>:done, :result=>"so fancy"}
#  => "so fancy"
FancyService.new(fanciness: 8).do_something(force: true)
#  I, [2017-04-04T19:46:17.968960 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>false, :force=>true, :fanciness=>8}, :status=>:starting}
#  I, [2017-04-04T19:46:17.969066 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>false, :force=>true, :fanciness=>8}, :status=>:done, :result=>"so fancy"}
#  => "so fancy"
FancyService.new(fanciness: 8).do_something(force: false)
#  I, [2017-04-04T19:49:10.485462 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>false, :force=>false, :fanciness=>8}, :status=>:starting}
#  I, [2017-04-04T19:49:10.485596 #29957]  INFO -- : {:method=>:do_something, :values=>{:fancy?=>false, :force=>false, :fanciness=>8}, :status=>:done, :result=>"so plain"}
=> "so plain"

Constants

VERSION

Public Class Methods

included(informed_upon_class) click to toggle source

Mixes in the DSL to classes which include {Informed}. Defines a `logger` method which delegates to {Informed.logger} if the object doesn't respond to logger already. @returns nil

# File lib/informed.rb, line 60
def self.included(informed_upon_class)
  informed_upon_class.extend(DSL)

  unless informed_upon_class.method_defined?(:logger)
    define_method(:logger) do
      Informed.logger
    end
  end
end
logger() click to toggle source

@return [Logger] The configured logger. If a logger isn't set, creates one that logs

to STDOUT
# File lib/informed.rb, line 72
def self.logger
  @logger ||= Logger.new(STDOUT)
end
logger=(logger) click to toggle source

Sets the global {Informed.logger} to whatever logger you desire. @param logger [Logger] An object that responds to debug, info, warn, error, fatal and unkonwn @return [Logger] Returns what it's given.

# File lib/informed.rb, line 79
def self.logger=(logger)
  @logger = logger
end