lenjador 1.4.0 → 2.0.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 +5 -5
- data/.rubocop.yml +3 -0
- data/.travis.yml +0 -1
- data/lenjador.gemspec +2 -2
- data/lib/lenjador.rb +30 -23
- data/lib/lenjador/adapters.rb +3 -8
- data/lib/lenjador/adapters/stdout_adapter.rb +2 -7
- data/lib/lenjador/adapters/stdout_json_adapter.rb +2 -30
- data/spec/lenjador/adapters/stdout_adapter_spec.rb +11 -11
- data/spec/lenjador/adapters/stdout_json_adapter_spec.rb +16 -32
- data/spec/lenjador_spec.rb +23 -28
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 33c13138df41134b3d17319ff6d02d86e5b261ab5b45eaf901ec35e19bb0667b
|
4
|
+
data.tar.gz: 963d753a7188d8ce556b2f03236db1a18e9428e8d5f71d07890e039ea6dcdf51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77ea852dc496c9c973954da2d83de33811a6c7e37b7028ca1596aece01009944e0d476f5e8e32790c380735338283d5ee62e634f0555da7aa58b8a99a73bdb91
|
7
|
+
data.tar.gz: 367a1528be10b7d2cde8f9d8cbe16080ebdf90a9d9e6c0670b42ced776018c1d1871b904434f1b6d11e18eeebbd993365573e5ec8acb21f8cb6d04eb3563f585
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/lenjador.gemspec
CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = RUBY_PLATFORM =~ /java/ ? 'lenjador-jruby' : 'lenjador'
|
8
|
-
gem.version = '
|
8
|
+
gem.version = '2.0.0'
|
9
9
|
gem.authors = ['Salemove']
|
10
10
|
gem.email = ['support@salemove.com']
|
11
11
|
gem.description = "It's lenjadoric"
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |gem|
|
|
27
27
|
end
|
28
28
|
|
29
29
|
gem.add_development_dependency 'benchmark-ips'
|
30
|
-
gem.add_development_dependency 'bundler'
|
30
|
+
gem.add_development_dependency 'bundler'
|
31
31
|
gem.add_development_dependency 'pry'
|
32
32
|
gem.add_development_dependency 'rake'
|
33
33
|
gem.add_development_dependency 'rspec'
|
data/lib/lenjador.rb
CHANGED
@@ -6,60 +6,67 @@ require_relative 'lenjador/utils'
|
|
6
6
|
require_relative 'lenjador/null_logger'
|
7
7
|
require_relative 'lenjador/preprocessors'
|
8
8
|
|
9
|
-
LOG_LEVEL_QUERY_METHODS = %i[debug? info? warn? error? fatal?].freeze
|
10
|
-
|
11
9
|
class Lenjador
|
12
|
-
|
13
|
-
|
10
|
+
Severity = ::Logger::Severity
|
11
|
+
SEV_LABEL = %w[debug info warn error fatal any].freeze
|
12
|
+
|
13
|
+
def self.build(service_name, logger_config, preprocessors_config = {})
|
14
|
+
logger_config ||= {}
|
15
|
+
|
14
16
|
preprocessors = preprocessors_config.map do |type, arguments|
|
15
17
|
Preprocessors.get(type.to_s, arguments || {})
|
16
18
|
end
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
new(
|
19
|
+
adapter = Adapters.get(service_name, logger_config)
|
20
|
+
level = SEV_LABEL.index(logger_config.fetch(:level, 'debug'))
|
21
|
+
|
22
|
+
new(adapter, level, preprocessors)
|
21
23
|
end
|
22
24
|
|
23
|
-
def initialize(
|
24
|
-
@
|
25
|
+
def initialize(adapter, level, preprocessors)
|
26
|
+
@adapter = adapter
|
27
|
+
@level = level
|
25
28
|
@preprocessors = preprocessors
|
26
29
|
end
|
27
30
|
|
28
31
|
def debug(*args, &block)
|
29
|
-
log
|
32
|
+
log(Severity::DEBUG, *args, &block)
|
30
33
|
end
|
31
34
|
|
32
35
|
def info(*args, &block)
|
33
|
-
log
|
36
|
+
log(Severity::INFO, *args, &block)
|
34
37
|
end
|
35
38
|
|
36
39
|
def warn(*args, &block)
|
37
|
-
log
|
40
|
+
log(Severity::WARN, *args, &block)
|
38
41
|
end
|
39
42
|
|
40
43
|
def error(*args, &block)
|
41
|
-
log
|
44
|
+
log(Severity::ERROR, *args, &block)
|
42
45
|
end
|
43
46
|
|
44
47
|
def fatal(*args, &block)
|
45
|
-
log
|
48
|
+
log(Severity::FATAL, *args, &block)
|
46
49
|
end
|
47
50
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
51
|
+
def debug?; @level <= Severity::DEBUG; end
|
52
|
+
|
53
|
+
def info?; @level <= Severity::INFO; end
|
54
|
+
|
55
|
+
def warn?; @level <= Severity::WARN; end
|
56
|
+
|
57
|
+
def error?; @level <= Severity::ERROR; end
|
58
|
+
|
59
|
+
def fatal?; @level <= Severity::FATAL; end
|
53
60
|
|
54
61
|
private
|
55
62
|
|
56
63
|
def log(level, *args, &block)
|
64
|
+
return true if level < @level
|
65
|
+
|
57
66
|
data = parse_log_data(*args, &block)
|
58
67
|
processed_data = preprocess(data)
|
59
68
|
|
60
|
-
@
|
61
|
-
adapter.log(level, processed_data)
|
62
|
-
end
|
69
|
+
@adapter.log(level, processed_data)
|
63
70
|
end
|
64
71
|
|
65
72
|
def preprocess(data)
|
data/lib/lenjador/adapters.rb
CHANGED
@@ -2,21 +2,16 @@
|
|
2
2
|
|
3
3
|
class Lenjador
|
4
4
|
module Adapters
|
5
|
-
|
6
|
-
|
7
|
-
def self.get(type, service_name, arguments)
|
8
|
-
raise "Unsupported logger: #{type}" if type != 'stdout'
|
9
|
-
|
5
|
+
def self.get(service_name, config)
|
10
6
|
adapter =
|
11
|
-
if
|
7
|
+
if config.fetch(:json, false)
|
12
8
|
require_relative 'adapters/stdout_json_adapter'
|
13
9
|
StdoutJsonAdapter
|
14
10
|
else
|
15
11
|
require_relative 'adapters/stdout_adapter'
|
16
12
|
StdoutAdapter
|
17
13
|
end
|
18
|
-
|
19
|
-
adapter.new(level, service_name, arguments)
|
14
|
+
adapter.new(service_name)
|
20
15
|
end
|
21
16
|
end
|
22
17
|
end
|
@@ -5,15 +5,10 @@ require 'forwardable'
|
|
5
5
|
class Lenjador
|
6
6
|
module Adapters
|
7
7
|
class StdoutAdapter
|
8
|
-
extend Forwardable
|
9
|
-
|
10
8
|
attr_reader :logger
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
def initialize(level, *)
|
10
|
+
def initialize(_service_name)
|
15
11
|
@logger = Logger.new(STDOUT)
|
16
|
-
@logger.level = level
|
17
12
|
end
|
18
13
|
|
19
14
|
def log(level, metadata = {})
|
@@ -24,7 +19,7 @@ class Lenjador
|
|
24
19
|
data.empty? ? nil : Utils.generate_json(data)
|
25
20
|
].compact.join(' ')
|
26
21
|
|
27
|
-
@logger.
|
22
|
+
@logger.add(level, log_data)
|
28
23
|
end
|
29
24
|
end
|
30
25
|
end
|
@@ -3,46 +3,18 @@
|
|
3
3
|
class Lenjador
|
4
4
|
module Adapters
|
5
5
|
class StdoutJsonAdapter
|
6
|
-
def initialize(
|
7
|
-
@level = level
|
8
|
-
@service_name = service_name
|
6
|
+
def initialize(service_name)
|
9
7
|
@application_name = Utils.application_name(service_name)
|
10
8
|
@mutex = Mutex.new if RUBY_ENGINE == 'jruby'
|
11
9
|
end
|
12
10
|
|
13
11
|
def log(level, metadata = {})
|
14
|
-
|
15
|
-
|
16
|
-
message = Utils.build_event(metadata, level, @application_name)
|
12
|
+
message = Utils.build_event(metadata, Lenjador::SEV_LABEL[level], @application_name)
|
17
13
|
print_line(Utils.generate_json(message))
|
18
14
|
end
|
19
15
|
|
20
|
-
def debug?
|
21
|
-
meets_threshold?(:debug)
|
22
|
-
end
|
23
|
-
|
24
|
-
def info?
|
25
|
-
meets_threshold?(:info)
|
26
|
-
end
|
27
|
-
|
28
|
-
def warn?
|
29
|
-
meets_threshold?(:warn)
|
30
|
-
end
|
31
|
-
|
32
|
-
def error?
|
33
|
-
meets_threshold?(:error)
|
34
|
-
end
|
35
|
-
|
36
|
-
def fatal?
|
37
|
-
meets_threshold?(:fatal)
|
38
|
-
end
|
39
|
-
|
40
16
|
private
|
41
17
|
|
42
|
-
def meets_threshold?(level)
|
43
|
-
LOG_LEVELS.index(level) >= @level
|
44
|
-
end
|
45
|
-
|
46
18
|
# puts is atomic in MRI starting from 2.5.0
|
47
19
|
if RUBY_ENGINE == 'ruby' && RUBY_VERSION >= '2.5.0'
|
48
20
|
def print_line(str)
|
@@ -3,45 +3,45 @@ require 'lenjador/adapters/stdout_adapter'
|
|
3
3
|
|
4
4
|
describe Lenjador::Adapters::StdoutAdapter do
|
5
5
|
it 'creates a stdout logger' do
|
6
|
-
io_logger = described_class.new(
|
6
|
+
io_logger = described_class.new('service name')
|
7
7
|
|
8
|
-
logger = io_logger.
|
8
|
+
logger = io_logger.logger
|
9
9
|
expect(logger).to be_a Logger
|
10
10
|
end
|
11
11
|
|
12
12
|
describe '#log' do
|
13
|
-
let(:adapter) { described_class.new(
|
13
|
+
let(:adapter) { described_class.new('sevice name') }
|
14
14
|
let(:logger) { adapter.logger }
|
15
15
|
|
16
16
|
context 'with only a message' do
|
17
17
|
it 'stringifies it correctly' do
|
18
|
-
expect(logger).to receive(:
|
18
|
+
expect(logger).to receive(:add).with(Logger::Severity::INFO, 'test')
|
19
19
|
|
20
|
-
adapter.log
|
20
|
+
adapter.log Lenjador::Severity::INFO, message: 'test'
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'with an empty message' do
|
25
25
|
it 'stringifies it correctly' do
|
26
|
-
expect(logger).to receive(:
|
26
|
+
expect(logger).to receive(:add).with(Logger::Severity::INFO, ' {"a":"b"}')
|
27
27
|
|
28
|
-
adapter.log
|
28
|
+
adapter.log Lenjador::Severity::INFO, message: '', a: 'b'
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
context 'with no message' do
|
33
33
|
it 'stringifies it correctly' do
|
34
|
-
expect(logger).to receive(:
|
34
|
+
expect(logger).to receive(:add).with(Logger::Severity::INFO, '{"a":"b"}')
|
35
35
|
|
36
|
-
adapter.log
|
36
|
+
adapter.log Lenjador::Severity::INFO, a: 'b'
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
context 'with a message and metadata' do
|
41
41
|
it 'stringifies it correctly' do
|
42
|
-
expect(logger).to receive(:
|
42
|
+
expect(logger).to receive(:add).with(Logger::Severity::INFO, 'test {"a":"b"}')
|
43
43
|
|
44
|
-
adapter.log
|
44
|
+
adapter.log Lenjador::Severity::INFO, message: 'test', a: 'b'
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -3,11 +3,6 @@ require 'json'
|
|
3
3
|
require 'lenjador/adapters/stdout_json_adapter'
|
4
4
|
|
5
5
|
describe Lenjador::Adapters::StdoutJsonAdapter do
|
6
|
-
let(:debug_level_code) { 0 }
|
7
|
-
let(:debug_level) { Lenjador::Adapters::LOG_LEVELS[debug_level_code] }
|
8
|
-
let(:info_level_code) { 1 }
|
9
|
-
let(:info_level) { Lenjador::Adapters::LOG_LEVELS[info_level_code] }
|
10
|
-
|
11
6
|
let(:stdout) { StringIO.new }
|
12
7
|
|
13
8
|
around do |example|
|
@@ -22,35 +17,24 @@ describe Lenjador::Adapters::StdoutJsonAdapter do
|
|
22
17
|
end
|
23
18
|
|
24
19
|
describe '#log' do
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
it 'sends serialized event to $stdout' do
|
40
|
-
adapter.log(info_level, metadata)
|
41
|
-
expect(output).to eq serialized_event + "\n"
|
42
|
-
end
|
20
|
+
let(:adapter) { described_class.new(service_name) }
|
21
|
+
let(:metadata) { {x: 'y'} }
|
22
|
+
let(:event) { {a: 'b', x: 'y'} }
|
23
|
+
let(:serialized_event) { JSON.dump(event) }
|
24
|
+
let(:service_name) { 'my-service' }
|
25
|
+
let(:application_name) { 'my_service' }
|
26
|
+
let(:info) { Lenjador::Severity::INFO }
|
27
|
+
let(:info_label) { 'info' }
|
28
|
+
|
29
|
+
before do
|
30
|
+
allow(Lenjador::Utils).to receive(:build_event)
|
31
|
+
.with(metadata, info_label, application_name)
|
32
|
+
.and_return(event)
|
43
33
|
end
|
44
34
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
let(:service_name) { 'my-service' }
|
49
|
-
|
50
|
-
it 'does not log the event' do
|
51
|
-
adapter.log(debug_level, metadata)
|
52
|
-
expect(output).to be_empty
|
53
|
-
end
|
35
|
+
it 'sends serialized event to $stdout' do
|
36
|
+
adapter.log(info, metadata)
|
37
|
+
expect(output).to eq serialized_event + "\n"
|
54
38
|
end
|
55
39
|
end
|
56
40
|
|
data/spec/lenjador_spec.rb
CHANGED
@@ -3,34 +3,31 @@ require 'spec_helper'
|
|
3
3
|
describe Lenjador do
|
4
4
|
describe '.build' do
|
5
5
|
it 'creates stdout logger' do
|
6
|
-
expect(described_class).to receive(:new) do |
|
7
|
-
expect(
|
8
|
-
expect(adapters.first).to be_a(described_class::Adapters::StdoutAdapter)
|
6
|
+
expect(described_class).to receive(:new) do |adapter|
|
7
|
+
expect(adapter).to be_a(described_class::Adapters::StdoutAdapter)
|
9
8
|
end
|
10
9
|
|
11
|
-
described_class.build('test_service',
|
10
|
+
described_class.build('test_service', {})
|
12
11
|
end
|
13
12
|
|
14
13
|
it 'creates stdout json logger' do
|
15
|
-
expect(described_class).to receive(:new) do |
|
16
|
-
expect(
|
17
|
-
expect(adapters.first).to be_a(described_class::Adapters::StdoutJsonAdapter)
|
14
|
+
expect(described_class).to receive(:new) do |adapter|
|
15
|
+
expect(adapter).to be_a(described_class::Adapters::StdoutJsonAdapter)
|
18
16
|
end
|
19
17
|
|
20
|
-
described_class.build('test_service',
|
18
|
+
described_class.build('test_service', json: true)
|
21
19
|
end
|
22
20
|
|
23
21
|
it 'creates stdout logger when no loggers are specified' do
|
24
|
-
expect(described_class).to receive(:new) do |
|
25
|
-
expect(
|
26
|
-
expect(adapters.first).to be_a(described_class::Adapters::StdoutAdapter)
|
22
|
+
expect(described_class).to receive(:new) do |adapter|
|
23
|
+
expect(adapter).to be_a(described_class::Adapters::StdoutAdapter)
|
27
24
|
end
|
28
25
|
|
29
26
|
described_class.build('test_service', nil)
|
30
27
|
end
|
31
28
|
|
32
29
|
it 'creates preprocessor when preprocessor defined' do
|
33
|
-
expect(described_class).to receive(:new) do |
|
30
|
+
expect(described_class).to receive(:new) do |_adapter, _level, preprocessors|
|
34
31
|
expect(preprocessors.count).to be(1)
|
35
32
|
expect(preprocessors.first).to be_a(described_class::Preprocessors::Blacklist)
|
36
33
|
end
|
@@ -41,64 +38,66 @@ describe Lenjador do
|
|
41
38
|
end
|
42
39
|
|
43
40
|
context 'when preprocessor defined' do
|
44
|
-
let(:lenjador) { described_class.new(
|
41
|
+
let(:lenjador) { described_class.new(adapter, level, [preprocessor]) }
|
45
42
|
let(:adapter) { double }
|
43
|
+
let(:level) { Lenjador::Severity::DEBUG }
|
46
44
|
let(:preprocessor) { double }
|
47
45
|
let(:data) { {data: 'data'} }
|
48
46
|
|
49
47
|
it 'preprocesses data before logging' do
|
50
48
|
expect(preprocessor).to receive(:process).with(data).and_return(data.merge(processed: true)).ordered
|
51
|
-
expect(adapter).to receive(:log).with(
|
49
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, data.merge(processed: true)).ordered
|
52
50
|
|
53
51
|
lenjador.info(data)
|
54
52
|
end
|
55
53
|
end
|
56
54
|
|
57
55
|
context 'when parsing log data' do
|
58
|
-
let(:lenjador) { described_class.new(
|
56
|
+
let(:lenjador) { described_class.new(adapter, level, preprocessors) }
|
59
57
|
let(:adapter) { double }
|
58
|
+
let(:level) { Lenjador::Severity::DEBUG }
|
60
59
|
let(:preprocessors) { [] }
|
61
60
|
|
62
61
|
it 'parses empty string with nil metadata' do
|
63
|
-
expect(adapter).to receive(:log).with(
|
62
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, message: '')
|
64
63
|
|
65
64
|
lenjador.info('', nil)
|
66
65
|
end
|
67
66
|
|
68
67
|
it 'parses nil as metadata' do
|
69
|
-
expect(adapter).to receive(:log).with(
|
68
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, message: nil)
|
70
69
|
|
71
70
|
lenjador.info(nil)
|
72
71
|
end
|
73
72
|
|
74
73
|
it 'parses only message' do
|
75
|
-
expect(adapter).to receive(:log).with(
|
74
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, message: 'test message')
|
76
75
|
|
77
76
|
lenjador.info 'test message'
|
78
77
|
end
|
79
78
|
|
80
79
|
it 'parses only metadata' do
|
81
|
-
expect(adapter).to receive(:log).with(
|
80
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, test: 'data')
|
82
81
|
|
83
82
|
lenjador.info test: 'data'
|
84
83
|
end
|
85
84
|
|
86
85
|
it 'parses message and metadata' do
|
87
|
-
expect(adapter).to receive(:log).with(
|
86
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, message: 'test message', test: 'data')
|
88
87
|
|
89
88
|
lenjador.info 'test message', test: 'data'
|
90
89
|
end
|
91
90
|
|
92
91
|
it 'parses block as a message' do
|
93
92
|
message = 'test message'
|
94
|
-
expect(adapter).to receive(:log).with(
|
93
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, message: message)
|
95
94
|
|
96
95
|
lenjador.info { message }
|
97
96
|
end
|
98
97
|
|
99
98
|
it 'ignores progname on block syntax' do
|
100
99
|
message = 'test message'
|
101
|
-
expect(adapter).to receive(:log).with(
|
100
|
+
expect(adapter).to receive(:log).with(described_class::Severity::INFO, message: message)
|
102
101
|
|
103
102
|
lenjador.info('progname') { message }
|
104
103
|
end
|
@@ -106,9 +105,7 @@ describe Lenjador do
|
|
106
105
|
|
107
106
|
context 'with log level' do
|
108
107
|
context 'when adapter has debug level' do
|
109
|
-
let(:logger)
|
110
|
-
described_class.build('test_service', stdout: {level: 'debug'})
|
111
|
-
end
|
108
|
+
let(:logger) { described_class.build('test_service', level: 'debug') }
|
112
109
|
|
113
110
|
it 'responds true to debug? and higher levels' do
|
114
111
|
expect(logger.debug?).to be(true)
|
@@ -120,9 +117,7 @@ describe Lenjador do
|
|
120
117
|
end
|
121
118
|
|
122
119
|
context 'when adapter has info level' do
|
123
|
-
let(:logger)
|
124
|
-
described_class.build('test_service', stdout: {level: 'info'})
|
125
|
-
end
|
120
|
+
let(:logger) { described_class.build('test_service', level: 'info') }
|
126
121
|
|
127
122
|
it 'responds true to info? and higher levels' do
|
128
123
|
expect(logger.debug?).to be(false)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lenjador
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Salemove
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lru_redux
|
@@ -70,16 +70,16 @@ dependencies:
|
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: pry
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -196,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
requirements: []
|
198
198
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.6
|
199
|
+
rubygems_version: 2.7.6
|
200
200
|
signing_key:
|
201
201
|
specification_version: 4
|
202
202
|
summary: What description said
|