Class: Soaspec::SpecLogger

Inherits:
Object
  • Object
show all
Defined in:
lib/soaspec/spec_logger.rb

Overview

Handles logs of API requests and responses

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject

Logger used to log API requests



46
47
48
# File 'lib/soaspec/spec_logger.rb', line 46

def logger
  @logger
end

.output_to_fileObject

Readers for log parameters



40
41
42
# File 'lib/soaspec/spec_logger.rb', line 40

def output_to_file
  @output_to_file
end

.output_to_terminalObject

Readers for log parameters



40
41
42
# File 'lib/soaspec/spec_logger.rb', line 40

def output_to_terminal
  @output_to_terminal
end

.prognameString

Returns Name of program to include in logs.

Returns:

  • (String)

    Name of program to include in logs



42
43
44
# File 'lib/soaspec/spec_logger.rb', line 42

def progname
  @progname
end

.terminal_colorObject

Color shown when displaying in terminal



38
39
40
# File 'lib/soaspec/spec_logger.rb', line 38

def terminal_color
  @terminal_color
end

.time_formatObject

String representing date format to use for traffic



49
50
51
# File 'lib/soaspec/spec_logger.rb', line 49

def time_format
  @time_format || '%H:%M:%S'
end

.time_test_runObject (readonly)

Readers for log parameters



40
41
42
# File 'lib/soaspec/spec_logger.rb', line 40

def time_test_run
  @time_test_run
end

.traffic_folderObject

Folder to put API traffic logs



36
37
38
# File 'lib/soaspec/spec_logger.rb', line 36

def traffic_folder
  @traffic_folder
end

Class Method Details

.createLogger

Create new log file if necessary and setup logging level

Returns:

  • (Logger)

    Logger class to record API traffic



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/soaspec/spec_logger.rb', line 99

def create
  create_log_file
  @logger = ApiLogger.new(traffic_file) # Where request and responses of APIs are stored
  @logger.progname = progname || 'SpecLog'
  @logger.formatter = proc do |_severity, datetime, progname, msg|
    message = "#{progname}, [#{datetime.strftime(time_format)}] : #{msg}\n"
    print message.colorize(terminal_color) if @output_to_terminal
    message if @output_to_file
  end
  RestClient.log = @logger
  @logger
end

.info(message) ⇒ Object

Log a message using Soaspec logger Logger (and it’s file) will be created if it’s not already set

Parameters:

  • message (String, Array)

    The message to add to the logger or list of messages



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/soaspec/spec_logger.rb', line 115

def info(message)
  return unless log_api_traffic?

  create unless @logger
  if message.respond_to? :each
    message.each do |message_item|
      info(message_item)
    end
  else
    if block_given?
      @logger.info(message) { yield }
    else
      @logger.info(message)
    end
  end
end

.log_api_traffic=(set) ⇒ Object

Whether to log all API traffic



75
76
77
78
# File 'lib/soaspec/spec_logger.rb', line 75

def log_api_traffic=(set)
  @log_api_traffic = set
  reset_log
end

.log_api_traffic?Boolean

Returns Whether to log all API traffic.

Returns:

  • (Boolean)

    Whether to log all API traffic



81
82
83
# File 'lib/soaspec/spec_logger.rb', line 81

def log_api_traffic?
  @log_api_traffic.nil? ? true : @log_api_traffic
end

.reset_logObject

Unset Logger object. It will be recreated on next time ‘info’ is called



69
70
71
72
# File 'lib/soaspec/spec_logger.rb', line 69

def reset_log
  @logger = nil
  RestClient.log = nil
end

.traffic_fileString

Returns Traffic file to create logs at.

Returns:

  • (String)

    Traffic file to create logs at



61
62
63
64
65
66
# File 'lib/soaspec/spec_logger.rb', line 61

def traffic_file
  return File.join(traffic_folder, @traffic_file) if @traffic_file

  filename = "traffic_#{time_test_run}.log"
  File.join(traffic_folder, filename)
end

.traffic_file=(file) ⇒ Object

Set file to log traffic to

Parameters:

  • file (String)

    Path to traffic file to use



55
56
57
58
# File 'lib/soaspec/spec_logger.rb', line 55

def traffic_file=(file)
  @traffic_file = file
  reset_log
end