Module: Informed

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

Overview

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.

Examples:

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"

Defined Under Namespace

Modules: DSL Classes: Informant

Constant Summary collapse

VERSION =
"1.1.1"

Class Method Summary collapse

Class Method Details

.included(informed_upon_class) ⇒ Object

Mixes in the DSL to classes which include Informed. Defines a ‘logger` method which delegates to logger if the object doesn’t respond to logger already.



60
61
62
63
64
65
66
67
68
# 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

.loggerLogger

Returns The configured logger. If a logger isn’t set, creates one that logs to STDOUT.

Returns:

  • (Logger)

    The configured logger. If a logger isn’t set, creates one that logs to STDOUT



72
73
74
# File 'lib/informed.rb', line 72

def self.logger
  @logger ||= Logger.new(STDOUT)
end

.logger=(logger) ⇒ Logger

Sets the global logger to whatever logger you desire.

Parameters:

  • logger (Logger)

    An object that responds to #debug, #info, #warn, #error, #fatal and #unkonwn

Returns:

  • (Logger)

    Returns what it’s given.



79
80
81
# File 'lib/informed.rb', line 79

def self.logger=(logger)
  @logger = logger
end