vidazing_logger 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|