vidazing_logger 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +5 -0
- data/.rubocop.yml +9 -0
- data/.simplecov +3 -0
- data/.travis.yml +14 -0
- data/Gemfile +3 -1
- data/README.md +23 -5
- data/Rakefile +68 -34
- data/bin/vidazing_logger +34 -21
- data/lib/vidazing_logger/appender.rb +21 -0
- data/lib/vidazing_logger/appenders/build_log.rb +23 -0
- data/lib/vidazing_logger/appenders/error_log.rb +23 -0
- data/lib/vidazing_logger/appenders/log.rb +29 -0
- data/lib/vidazing_logger/appenders/logging_gem_adapter.rb +140 -0
- data/lib/vidazing_logger/appenders/stderr.rb +18 -56
- data/lib/vidazing_logger/appenders/stdout.rb +18 -63
- data/lib/vidazing_logger/color_scheme.rb +41 -0
- data/lib/vidazing_logger/filters/levels.rb +32 -0
- data/lib/vidazing_logger/layout_pattern.rb +30 -0
- data/lib/vidazing_logger/logger.rb +58 -0
- data/lib/vidazing_logger/logger_builder.rb +115 -0
- data/lib/vidazing_logger/version.rb +4 -1
- data/lib/vidazing_logger.rb +22 -24
- data/vidazing_logger.gemspec +31 -18
- metadata +171 -17
@@ -1,59 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
module
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
:info => :green,
|
20
|
-
:warn => :yellow,
|
21
|
-
:error => :red,
|
22
|
-
:fatal => [:white, :on_red]
|
23
|
-
},
|
24
|
-
:date => :red,
|
25
|
-
:logger => :cyan,
|
26
|
-
:message => :magenta
|
27
|
-
)
|
28
|
-
|
29
|
-
def readable_error_layout_pattern
|
30
|
-
Logging.layouts.pattern \
|
31
|
-
:pattern => '[%d] %-5l %c: %m\n',
|
32
|
-
# ISO8601 without the 'T'
|
33
|
-
:date_pattern => '%Y-%m-%d %H:%M:%S',
|
34
|
-
:color_scheme => ERROR_LOG_COLOR_SCHEME
|
35
|
-
end
|
36
|
-
|
37
|
-
APPENDER_STDERR = "STDERR"
|
38
|
-
def stderr_appender
|
39
|
-
Logging.appenders.stderr \
|
40
|
-
APPENDER_STDERR,
|
41
|
-
:layout => readable_error_layout_pattern,
|
42
|
-
:level => :error
|
43
|
-
end
|
44
|
-
|
45
|
-
def error_log_appender(log_dir)
|
46
|
-
error_log_path = "#{log_dir}/error.log"
|
47
|
-
|
48
|
-
appender_error_log = error_log_path
|
49
|
-
Logging.appenders.rolling_file \
|
50
|
-
appender_error_log,
|
51
|
-
:layout => readable_error_layout_pattern,
|
52
|
-
:age => 'daily',
|
53
|
-
:keep => 7,
|
54
|
-
:level => :error
|
55
|
-
|
56
|
-
Logging.appenders[appender_error_log]
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'vidazing_logger/appender'
|
4
|
+
require 'vidazing_logger/color_scheme'
|
5
|
+
require 'vidazing_logger/filters/levels'
|
6
|
+
|
7
|
+
module VidazingLogger
|
8
|
+
module Appenders
|
9
|
+
# Appender writing to STDERR
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
# @since 0.1.0
|
13
|
+
class Stderr < Appender
|
14
|
+
def initialize
|
15
|
+
super \
|
16
|
+
name: self.class.name,
|
17
|
+
color_scheme: ColorScheme.error,
|
18
|
+
filter_levels: Filters::Levels.error
|
57
19
|
end
|
58
20
|
end
|
59
21
|
end
|
@@ -1,66 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:error => :red,
|
20
|
-
:fatal => [:white, :on_red]
|
21
|
-
},
|
22
|
-
:date => :blue,
|
23
|
-
:logger => :cyan,
|
24
|
-
:message => :magenta
|
25
|
-
)
|
26
|
-
|
27
|
-
def readable_layout_pattern
|
28
|
-
Logging.layouts.pattern \
|
29
|
-
:pattern => '[%d] %-5l %c: %m\n',
|
30
|
-
# ISO8601 without the 'T'
|
31
|
-
:date_pattern => '%Y-%m-%d %H:%M:%S',
|
32
|
-
:color_scheme => LOG_COLOR_SCHEME
|
33
|
-
end
|
34
|
-
|
35
|
-
def stdout_levels
|
36
|
-
Logging::Filters::Level.new \
|
37
|
-
:debug,
|
38
|
-
:info,
|
39
|
-
:warn
|
40
|
-
end
|
41
|
-
|
42
|
-
APPENDER_STDOUT = "STDOUT"
|
43
|
-
def stdout_appender
|
44
|
-
Logging.appenders.stdout \
|
45
|
-
APPENDER_STDOUT,
|
46
|
-
:layout => readable_layout_pattern,
|
47
|
-
:filters => stdout_levels
|
48
|
-
|
49
|
-
Logging.appenders[APPENDER_STDOUT]
|
50
|
-
end
|
51
|
-
|
52
|
-
def build_log_appender(log_dir)
|
53
|
-
build_log_path = "#{log_dir}/build.log"
|
54
|
-
|
55
|
-
appender_build_log = build_log_path
|
56
|
-
Logging.appenders.rolling_file \
|
57
|
-
appender_build_log,
|
58
|
-
:layout => readable_layout_pattern,
|
59
|
-
:age => 'daily',
|
60
|
-
:keep => 7,
|
61
|
-
:filters => stdout_levels
|
62
|
-
|
63
|
-
Logging.appenders[appender_build_log]
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'vidazing_logger/appender'
|
4
|
+
require 'vidazing_logger/color_scheme'
|
5
|
+
require 'vidazing_logger/filters/levels'
|
6
|
+
|
7
|
+
module VidazingLogger
|
8
|
+
module Appenders
|
9
|
+
# Appender writing to STDOUT
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
# @since 0.1.0
|
13
|
+
class Stdout < Appender
|
14
|
+
def initialize
|
15
|
+
super \
|
16
|
+
name: self.class.name,
|
17
|
+
color_scheme: ColorScheme.normal,
|
18
|
+
filter_levels: Filters::Levels.normal
|
64
19
|
end
|
65
20
|
end
|
66
21
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VidazingLogger
|
4
|
+
# Set logging colors
|
5
|
+
#
|
6
|
+
# @api private
|
7
|
+
# @since 0.2.0
|
8
|
+
class ColorScheme
|
9
|
+
attr_reader :name, :scheme
|
10
|
+
|
11
|
+
def initialize(name:, date_color:)
|
12
|
+
@name = name
|
13
|
+
|
14
|
+
@scheme = ColorScheme.basic.dup
|
15
|
+
@scheme[:date] = date_color
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def normal
|
20
|
+
ColorScheme.new(name: :normal, date_color: :blue)
|
21
|
+
end
|
22
|
+
|
23
|
+
def error
|
24
|
+
ColorScheme.new(name: :error, date_color: :red)
|
25
|
+
end
|
26
|
+
|
27
|
+
def basic
|
28
|
+
{
|
29
|
+
levels: {
|
30
|
+
info: :green,
|
31
|
+
warn: :yellow,
|
32
|
+
error: :red,
|
33
|
+
fatal: %i[white on_red]
|
34
|
+
},
|
35
|
+
logger: :cyan,
|
36
|
+
message: :magenta
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logging'
|
4
|
+
|
5
|
+
module VidazingLogger
|
6
|
+
# Filter logs by level severity
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.2.0
|
10
|
+
module Filters
|
11
|
+
# Filter log messages strictly by Levels. Levels...
|
12
|
+
#
|
13
|
+
# @see Levels::ALL
|
14
|
+
# @api private
|
15
|
+
# @since 0.2.0
|
16
|
+
module Levels
|
17
|
+
class << self
|
18
|
+
ALL = %i[debug info warn error fatal].freeze
|
19
|
+
|
20
|
+
# Filter for normal messages
|
21
|
+
def normal
|
22
|
+
%i[debug info warn]
|
23
|
+
end
|
24
|
+
|
25
|
+
# Filter for error messages
|
26
|
+
def error
|
27
|
+
%i[error fatal]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VidazingLogger
|
4
|
+
# Determines the format for the logger messages
|
5
|
+
#
|
6
|
+
# @api private
|
7
|
+
# @since 0.2.0
|
8
|
+
class LayoutPattern
|
9
|
+
attr_reader :layout
|
10
|
+
|
11
|
+
def initialize(color_scheme_name)
|
12
|
+
@layout = LayoutPattern.basic.dup
|
13
|
+
@layout[:color_scheme] = color_scheme_name
|
14
|
+
end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def colored(color_scheme_name)
|
18
|
+
LayoutPattern.new(color_scheme_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def basic
|
22
|
+
{
|
23
|
+
pattern: '[%d] %-5l %c: %m\n',
|
24
|
+
# ISO8601 without the 'T'
|
25
|
+
date_pattern: '%Y-%m-%d %H:%M:%S'
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'vidazing_logger/logger_builder'
|
4
|
+
|
5
|
+
module VidazingLogger
|
6
|
+
# Core +Logger+ class api. Calling +build+ returns a
|
7
|
+
# logger with 4 +Appender+s attached.
|
8
|
+
#
|
9
|
+
# @since 0.2.0
|
10
|
+
class Logger
|
11
|
+
# Where to write logs to
|
12
|
+
#
|
13
|
+
# @return [String] where to write logs to
|
14
|
+
attr_reader :log_dir
|
15
|
+
|
16
|
+
# Use in Logging.logger
|
17
|
+
#
|
18
|
+
# @return [String] name
|
19
|
+
attr_reader :name
|
20
|
+
|
21
|
+
# Creates the 'logs/' directory
|
22
|
+
#
|
23
|
+
# @param name [String] Logger name used in messages
|
24
|
+
# @param log_dir [String] Directory to write logs in
|
25
|
+
def initialize(log_dir = VidazingLogger::LOG_DIR, name:)
|
26
|
+
@name = name
|
27
|
+
@log_dir = log_dir
|
28
|
+
|
29
|
+
create_log_dir
|
30
|
+
end
|
31
|
+
|
32
|
+
# Deletes the +log_dir+ directory
|
33
|
+
def clean
|
34
|
+
FileUtils.remove_dir(@log_dir, true)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Create a Logger with 4 Appenders.
|
38
|
+
# STDERR + 'logs/error.log'
|
39
|
+
# STDOUT + 'logs/build.log'
|
40
|
+
#
|
41
|
+
# @return [Logging.logger] See https://github.com/TwP/logging/blob/master/lib/logging/logger.rb
|
42
|
+
def build
|
43
|
+
LoggerBuilder.build(name: @name) do |builder|
|
44
|
+
builder
|
45
|
+
.add_stdout
|
46
|
+
.add_build_log(log_dir: @log_dir)
|
47
|
+
.add_stderr
|
48
|
+
.add_error_log(log_dir: @log_dir)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def create_log_dir
|
55
|
+
Dir.mkdir(@log_dir) unless Dir.exist?(@log_dir)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'vidazing_logger/appenders/logging_gem_adapter'
|
4
|
+
|
5
|
+
require 'vidazing_logger/appenders/stdout'
|
6
|
+
require 'vidazing_logger/appenders/build_log'
|
7
|
+
require 'vidazing_logger/appenders/stderr'
|
8
|
+
require 'vidazing_logger/appenders/error_log'
|
9
|
+
|
10
|
+
require 'logging'
|
11
|
+
|
12
|
+
module VidazingLogger
|
13
|
+
# Select where the logger will write to
|
14
|
+
#
|
15
|
+
# @example Building a Logger
|
16
|
+
# LoggerBuilder.build(name: @name) do |builder|
|
17
|
+
# builder
|
18
|
+
# .add_stdout
|
19
|
+
# .add_build_log(log_dir: @log_dir)
|
20
|
+
# .add_stderr
|
21
|
+
# .add_error_log(log_dir: @log_dir)
|
22
|
+
#
|
23
|
+
# @see Logging.logger
|
24
|
+
# @since 0.2.0
|
25
|
+
class LoggerBuilder
|
26
|
+
# The resulting builder logger object
|
27
|
+
#
|
28
|
+
# @return [Logging.logger]
|
29
|
+
attr_reader :logger
|
30
|
+
|
31
|
+
# Create a new LoggerBuilder
|
32
|
+
#
|
33
|
+
# @param name [String] Reference to obtain the logger.
|
34
|
+
# @return [Logging.logger]
|
35
|
+
def self.build(name:)
|
36
|
+
builder = new(name: name)
|
37
|
+
yield(builder)
|
38
|
+
builder.logger
|
39
|
+
end
|
40
|
+
|
41
|
+
# Sets up the underlying Logging.logger reference.
|
42
|
+
#
|
43
|
+
# @param name [String] Reference to obtain the logger.
|
44
|
+
def initialize(name:)
|
45
|
+
# Create a logger before any appenders
|
46
|
+
# Avoids a situation where Filters::Normal levels are nil
|
47
|
+
#
|
48
|
+
# Logging::Filters::Level.new bug:
|
49
|
+
# @filter has nil levels set on the first invocation
|
50
|
+
@logger = Logging.logger[name]
|
51
|
+
end
|
52
|
+
|
53
|
+
# Outputs log messages to STDOUT
|
54
|
+
#
|
55
|
+
# @return nil
|
56
|
+
def add_stdout
|
57
|
+
appender = Appenders::Stdout.new
|
58
|
+
logging_appender_type = Appenders::Type::ID_STDOUT
|
59
|
+
|
60
|
+
add_logging_appender(logging_appender_type, vidazing_appender: appender)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Outputs log messages to STDERR
|
64
|
+
#
|
65
|
+
# @return nil
|
66
|
+
def add_stderr
|
67
|
+
appender = Appenders::Stderr.new
|
68
|
+
logging_appender_type = Appenders::Type::ID_STDERR
|
69
|
+
|
70
|
+
add_logging_appender(logging_appender_type, vidazing_appender: appender)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Adds a VidazingLogger::Appender::BuildLog.
|
74
|
+
# Writes to +log_dir+/build.log
|
75
|
+
#
|
76
|
+
# @param log_dir [String] Directory to write logs in
|
77
|
+
# @return nil
|
78
|
+
def add_build_log(log_dir:)
|
79
|
+
appender = Appenders::BuildLog.new(log_dir: log_dir)
|
80
|
+
add_log(vidazing_appender: appender)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Adds a VidazingLogger::Appender::ErrorLog
|
84
|
+
# Writes to +log_dir+/error.log
|
85
|
+
#
|
86
|
+
# @param log_dir [String] Directory to write logs in
|
87
|
+
# @return nil
|
88
|
+
def add_error_log(log_dir:)
|
89
|
+
appender = Appenders::ErrorLog.new(log_dir: log_dir)
|
90
|
+
add_log(vidazing_appender: appender)
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def add_log(vidazing_appender:)
|
96
|
+
logging_appender_type = Appenders::Type::ID_ROLLING_FILE
|
97
|
+
|
98
|
+
add_logging_appender \
|
99
|
+
logging_appender_type,
|
100
|
+
vidazing_appender: vidazing_appender
|
101
|
+
end
|
102
|
+
|
103
|
+
def add_logging_appender(logging_appender_type, vidazing_appender:)
|
104
|
+
# Using public_send since ruby methods are not first class
|
105
|
+
adapter = Appenders::LoggingGemAdapter.public_send \
|
106
|
+
logging_appender_type,
|
107
|
+
vidazing_appender: vidazing_appender
|
108
|
+
|
109
|
+
logging_appender = adapter.logging_appender
|
110
|
+
@logger.add_appenders(logging_appender)
|
111
|
+
|
112
|
+
self
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
data/lib/vidazing_logger.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
require 'vidazing_logger/appenders/stdout'
|
3
|
-
require 'vidazing_logger/appenders/stderr'
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
require '
|
3
|
+
require 'vidazing_logger/logger'
|
6
4
|
|
7
5
|
# Namespace for the convenience method to create a new logger
|
8
6
|
#
|
@@ -10,18 +8,21 @@ require 'logging'
|
|
10
8
|
# @since 0.1.0
|
11
9
|
module VidazingLogger
|
12
10
|
class << self
|
13
|
-
|
14
11
|
# [String]
|
15
|
-
LOG_DIR =
|
16
|
-
|
17
|
-
# Creates the 'logs/' directory
|
18
|
-
def initialize
|
19
|
-
Dir.mkdir(LOG_DIR) unless Dir.exists?(LOG_DIR)
|
20
|
-
end
|
12
|
+
LOG_DIR = 'logs'
|
13
|
+
DEFAULT_LOGGER_NAME = 'VidaZing'
|
21
14
|
|
22
15
|
# Deletes the 'logs/' directory
|
23
|
-
|
24
|
-
|
16
|
+
#
|
17
|
+
# @param log_dir [String] Directory to delete
|
18
|
+
# @return nil
|
19
|
+
# @since 0.1.0
|
20
|
+
def clean(log_dir = LOG_DIR)
|
21
|
+
@vidazing_logger = VidazingLogger::Logger.new \
|
22
|
+
log_dir,
|
23
|
+
name: DEFAULT_LOGGER_NAME
|
24
|
+
|
25
|
+
@vidazing_logger.clean
|
25
26
|
end
|
26
27
|
|
27
28
|
# Create a Logger with 4 Appenders.
|
@@ -29,19 +30,16 @@ module VidazingLogger
|
|
29
30
|
# STDOUT + 'logs/build.log'
|
30
31
|
#
|
31
32
|
# @param name [String] Logger name used in messages
|
33
|
+
# @param log_dir [String] Directory to write logs in
|
34
|
+
# @see VidazingLogger::Logger#build
|
32
35
|
# @return [Logging.logger] See https://github.com/TwP/logging/blob/master/lib/logging/logger.rb
|
33
|
-
|
34
|
-
|
35
|
-
VidazingLogger.
|
36
|
-
|
37
|
-
|
38
|
-
log.add_appenders \
|
39
|
-
VidazingLogger::Appenders::Stdout.stdout_appender,
|
40
|
-
VidazingLogger::Appenders::Stdout.build_log_appender(LOG_DIR),
|
41
|
-
VidazingLogger::Appenders::Stderr.stderr_appender,
|
42
|
-
VidazingLogger::Appenders::Stderr.error_log_appender(LOG_DIR)
|
36
|
+
# @since 0.2.0
|
37
|
+
def logger(name = DEFAULT_LOGGER_NAME, log_dir = LOG_DIR)
|
38
|
+
@vidazing_logger = VidazingLogger::Logger.new \
|
39
|
+
log_dir,
|
40
|
+
name: name
|
43
41
|
|
44
|
-
|
42
|
+
@vidazing_logger.build
|
45
43
|
end
|
46
44
|
end
|
47
45
|
end
|
data/vidazing_logger.gemspec
CHANGED
@@ -1,32 +1,45 @@
|
|
1
|
-
#
|
2
|
-
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "vidazing_logger/version"
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
|
6
|
-
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
+
require 'vidazing_logger/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s| # rubocop:disable Metrics/BlockLength
|
7
|
+
s.name = 'vidazing_logger'
|
7
8
|
s.version = VidazingLogger::VERSION
|
8
9
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = [
|
10
|
+
s.authors = ['VidaZing, Inc.']
|
10
11
|
s.licenses = ['MIT']
|
11
|
-
s.email = [
|
12
|
-
s.homepage =
|
13
|
-
s.summary =
|
12
|
+
s.email = ['VidaZing@gmail.com']
|
13
|
+
s.homepage = 'https://github.com/VidaZing/logger_gem'
|
14
|
+
s.summary = 'Custom logging for VidaZing.'
|
14
15
|
s.executables << 'vidazing_logger'
|
15
16
|
|
16
|
-
s.rubygems_version =
|
17
|
-
s.required_ruby_version
|
17
|
+
s.rubygems_version = '2.7.7'
|
18
|
+
s.required_ruby_version = '>= 2.5.1'
|
18
19
|
|
19
|
-
s.files = `git ls-files -z`.split("\x0").reject
|
20
|
-
|
21
|
-
|
20
|
+
s.files = `git ls-files -z`.split("\x0").reject \
|
21
|
+
{ |f| f.match(%r{^(test|spec)/}) }
|
22
|
+
s.require_paths = ['lib']
|
22
23
|
|
23
24
|
s.add_runtime_dependency('logging', '2.2.2')
|
24
25
|
|
25
|
-
s.add_development_dependency '
|
26
|
-
s.add_development_dependency '
|
27
|
-
s.add_development_dependency '
|
26
|
+
s.add_development_dependency 'awesome_print', '1.8.0'
|
27
|
+
s.add_development_dependency 'byebug', '10.0.2'
|
28
|
+
s.add_development_dependency 'coveralls', '0.8.22'
|
29
|
+
s.add_development_dependency 'flay', '2.12.0'
|
30
|
+
s.add_development_dependency 'flog', '4.6.2'
|
28
31
|
s.add_development_dependency 'pry', '0.10.4'
|
29
32
|
s.add_development_dependency 'pry-byebug', '3.6.0'
|
30
|
-
s.add_development_dependency '
|
33
|
+
s.add_development_dependency 'pry-rescue', '1.4.5'
|
34
|
+
s.add_development_dependency 'pry-stack_explorer', '0.4.9.2'
|
35
|
+
s.add_development_dependency 'rainbow', '3.0.0'
|
36
|
+
s.add_development_dependency 'rake', '12.3.1'
|
37
|
+
s.add_development_dependency 'rspec', '3.8.0'
|
38
|
+
s.add_development_dependency 'rubocop', '0.58.2'
|
39
|
+
s.add_development_dependency 'simplecov', '0.16.1'
|
40
|
+
s.add_development_dependency 'test-unit', '3.2.8'
|
31
41
|
s.add_development_dependency 'yard', '0.9.16'
|
42
|
+
|
43
|
+
# Note: Mocha says to load this after test-unit
|
44
|
+
s.add_development_dependency 'mocha', '1.7.0'
|
32
45
|
end
|