steno 1.2.4 → 1.3.5

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.
Files changed (43) hide show
  1. checksums.yaml +5 -13
  2. data/NOTICE +14 -0
  3. data/Rakefile +6 -8
  4. data/bin/steno-prettify +24 -25
  5. data/lib/steno/codec/base.rb +1 -1
  6. data/lib/steno/codec/json.rb +24 -14
  7. data/lib/steno/codec.rb +2 -2
  8. data/lib/steno/config.rb +23 -30
  9. data/lib/steno/context.rb +3 -3
  10. data/lib/steno/json_prettifier.rb +31 -30
  11. data/lib/steno/log_level.rb +1 -2
  12. data/lib/steno/logger.rb +22 -26
  13. data/lib/steno/record.rb +5 -15
  14. data/lib/steno/sink/base.rb +2 -3
  15. data/lib/steno/sink/counter.rb +4 -8
  16. data/lib/steno/sink/eventlog.rb +16 -17
  17. data/lib/steno/sink/fluentd.rb +4 -5
  18. data/lib/steno/sink/io.rb +8 -12
  19. data/lib/steno/sink/syslog.rb +19 -15
  20. data/lib/steno/sink.rb +6 -6
  21. data/lib/steno/tagged_logger.rb +2 -3
  22. data/lib/steno/version.rb +1 -1
  23. data/lib/steno.rb +16 -21
  24. data/spec/spec_helper.rb +4 -4
  25. data/spec/support/barrier.rb +2 -2
  26. data/spec/support/shared_context_specs.rb +4 -4
  27. data/spec/unit/config_spec.rb +134 -133
  28. data/spec/unit/context_spec.rb +19 -19
  29. data/spec/unit/core_ext_spec.rb +14 -14
  30. data/spec/unit/json_codec_spec.rb +43 -23
  31. data/spec/unit/json_prettifier_spec.rb +25 -25
  32. data/spec/unit/log_level_spec.rb +8 -9
  33. data/spec/unit/logger_spec.rb +53 -53
  34. data/spec/unit/record_spec.rb +15 -15
  35. data/spec/unit/sink/counter_spec.rb +7 -7
  36. data/spec/unit/sink/eventlog_spec.rb +14 -15
  37. data/spec/unit/sink/fluentd_spec.rb +28 -28
  38. data/spec/unit/sink/io_spec.rb +62 -62
  39. data/spec/unit/sink/syslog_spec.rb +54 -30
  40. data/spec/unit/steno_spec.rb +33 -33
  41. data/spec/unit/tagged_logger_spec.rb +20 -18
  42. data/steno.gemspec +28 -28
  43. metadata +62 -53
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Steno::Sink::IO do
4
4
  let(:level) do
@@ -6,104 +6,104 @@ describe Steno::Sink::IO do
6
6
  end
7
7
 
8
8
  let(:record) do
9
- Steno::Record.new("source", level.name, "message")
9
+ Steno::Record.new('source', level.name, 'message')
10
10
  end
11
11
 
12
- describe ".for_file" do
13
- it "should return a new sink configured to append to the file at path with autosync set to true by default" do
14
- mock_handle = double("file handle")
12
+ describe '.for_file' do
13
+ it 'returns a new sink configured to append to the file at path with autosync set to true by default' do
14
+ mock_handle = double('file handle')
15
15
 
16
- File.should_receive(:open).with("path", "a+").and_return(mock_handle)
17
- mock_handle.should_receive(:sync=).with(true)
16
+ expect(File).to receive(:open).with('path', 'a+').and_return(mock_handle)
17
+ expect(mock_handle).to receive(:sync=).with(true)
18
18
 
19
- mock_sink = double("sink")
20
- Steno::Sink::IO.should_receive(:new).with(mock_handle,
21
- :max_retries => 10).
22
- and_return(mock_sink)
19
+ mock_sink = double('sink')
20
+ expect(Steno::Sink::IO).to receive(:new).with(mock_handle,
21
+ max_retries: 10)
22
+ .and_return(mock_sink)
23
23
 
24
- returned = Steno::Sink::IO.for_file("path",
25
- :max_retries => 10)
26
- returned.should == mock_sink
24
+ returned = Steno::Sink::IO.for_file('path',
25
+ max_retries: 10)
26
+ expect(returned).to eq(mock_sink)
27
27
  end
28
28
 
29
- it "should return a new sink configured to append to the file at path with specified options" do
30
- mock_handle = double("file handle")
29
+ it 'returns a new sink configured to append to the file at path with specified options' do
30
+ mock_handle = double('file handle')
31
31
 
32
- File.should_receive(:open).with("path", "a+").and_return(mock_handle)
33
- mock_handle.should_receive(:sync=).with(false)
32
+ expect(File).to receive(:open).with('path', 'a+').and_return(mock_handle)
33
+ expect(mock_handle).to receive(:sync=).with(false)
34
34
 
35
- mock_sink = double("sink")
36
- Steno::Sink::IO.should_receive(:new).with(mock_handle,
37
- :max_retries => 10).
38
- and_return(mock_sink)
35
+ mock_sink = double('sink')
36
+ expect(Steno::Sink::IO).to receive(:new).with(mock_handle,
37
+ max_retries: 10)
38
+ .and_return(mock_sink)
39
39
 
40
- returned = Steno::Sink::IO.for_file("path",
41
- :autoflush => false,
42
- :max_retries => 10)
43
- returned.should == mock_sink
40
+ returned = Steno::Sink::IO.for_file('path',
41
+ autoflush: false,
42
+ max_retries: 10)
43
+ expect(returned).to eq(mock_sink)
44
44
  end
45
45
  end
46
46
 
47
- describe "#add_record" do
48
- it "should encode the record and write it to the underlying io object" do
49
- codec = double("codec")
50
- codec.should_receive(:encode_record).with(record).and_return(record.message)
47
+ describe '#add_record' do
48
+ it 'encodes the record and write it to the underlying io object' do
49
+ codec = double('codec')
50
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
51
51
 
52
- io = double("io")
53
- io.should_receive(:write).with(record.message)
52
+ io = double('io')
53
+ expect(io).to receive(:write).with(record.message)
54
54
 
55
- Steno::Sink::IO.new(io, :codec => codec).add_record(record)
55
+ Steno::Sink::IO.new(io, codec: codec).add_record(record)
56
56
  end
57
57
 
58
- it "should by default not retry on IOError" do
59
- codec = double("codec")
60
- codec.should_receive(:encode_record).with(record).and_return(record.message)
58
+ it 'bies default not retry on IOError' do
59
+ codec = double('codec')
60
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
61
61
 
62
- io = double("io")
62
+ io = double('io')
63
63
 
64
- io.should_receive(:write).with(record.message).ordered.and_raise(IOError)
64
+ expect(io).to receive(:write).with(record.message).ordered.and_raise(IOError)
65
65
 
66
66
  expect do
67
- Steno::Sink::IO.new(io, :codec => codec).add_record(record)
67
+ Steno::Sink::IO.new(io, codec: codec).add_record(record)
68
68
  end.to raise_error(IOError)
69
69
  end
70
70
 
71
- it "should retry not more than specified number of times on IOError" do
72
- codec = double("codec")
73
- codec.should_receive(:encode_record).with(record).and_return(record.message)
71
+ it 'retries not more than specified number of times on IOError' do
72
+ codec = double('codec')
73
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
74
74
 
75
- io = double("io")
75
+ io = double('io')
76
76
 
77
- io.should_receive(:write).exactly(3).times.with(record.message).
78
- and_raise(IOError)
77
+ expect(io).to receive(:write).exactly(3).times.with(record.message)
78
+ .and_raise(IOError)
79
79
 
80
80
  expect do
81
- Steno::Sink::IO.new(io, :codec => codec, :max_retries => 2).
82
- add_record(record)
81
+ Steno::Sink::IO.new(io, codec: codec, max_retries: 2)
82
+ .add_record(record)
83
83
  end.to raise_error(IOError)
84
84
  end
85
85
 
86
- it "should retry on IOError and succeed" do
87
- codec = double("codec")
88
- codec.should_receive(:encode_record).with(record).and_return(record.message)
86
+ it 'retries on IOError and succeed' do
87
+ codec = double('codec')
88
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
89
89
 
90
- io = double("io")
91
- io.should_receive(:write).with(record.message).once.
92
- and_raise(IOError)
93
- io.should_receive(:write).with(record.message).once.ordered.
94
- and_return(record.message)
90
+ io = double('io')
91
+ expect(io).to receive(:write).with(record.message).once
92
+ .and_raise(IOError)
93
+ expect(io).to receive(:write).with(record.message).once.ordered
94
+ .and_return(record.message)
95
95
 
96
96
  expect do
97
- Steno::Sink::IO.new(io, :codec => codec, :max_retries => 1).
98
- add_record(record)
99
- end.to_not raise_error(IOError)
97
+ Steno::Sink::IO.new(io, codec: codec, max_retries: 1)
98
+ .add_record(record)
99
+ end.not_to raise_error
100
100
  end
101
101
  end
102
102
 
103
- describe "#flush" do
104
- it "should call flush on the underlying io object" do
105
- io = double("io")
106
- io.should_receive(:flush)
103
+ describe '#flush' do
104
+ it 'calls flush on the underlying io object' do
105
+ io = double('io')
106
+ expect(io).to receive(:flush)
107
107
 
108
108
  Steno::Sink::IO.new(io).flush
109
109
  end
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
  unless Steno::Sink::WINDOWS
3
3
  describe Steno::Sink::Syslog do
4
4
  let(:level) do
@@ -6,68 +6,92 @@ unless Steno::Sink::WINDOWS
6
6
  end
7
7
 
8
8
  let(:record) do
9
- Steno::Record.new("source", level.name, "message")
9
+ Steno::Record.new('source', level.name, 'message')
10
10
  end
11
11
 
12
12
  let(:record_with_big_message) do
13
- Steno::Record.new("source", level.name,
14
- "a" * (Steno::Sink::Syslog::MAX_MESSAGE_SIZE + 1))
13
+ Steno::Record.new('source', level.name,
14
+ 'a' * (Steno::Sink::Syslog::MAX_MESSAGE_SIZE + 1))
15
15
  end
16
16
 
17
- describe "#add_record" do
18
- it "should append an encoded record with the correct priority" do
19
- identity = "test"
17
+ describe '#add_record' do
18
+ after do
19
+ Syslog::Logger.syslog = nil
20
+ end
21
+
22
+ it 'appends an encoded record with the correct priority' do
23
+ identity = 'test'
20
24
 
21
- syslog = double("syslog")
22
- Syslog.should_receive(:open) \
23
- .with(identity, Syslog::LOG_PID, Syslog::LOG_USER) \
24
- .and_return(syslog)
25
+ syslog = double('syslog', facility: nil)
26
+ expect(Syslog).to receive(:open).and_return(syslog)
25
27
 
26
28
  sink = Steno::Sink::Syslog.instance
27
29
  sink.open(identity)
28
30
 
29
- codec = double("codec")
30
- codec.should_receive(:encode_record).with(record).and_return(record.message)
31
+ codec = double('codec')
32
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
31
33
  sink.codec = codec
32
34
 
33
- syslog.should_receive(:log).with(Syslog::LOG_INFO, "%s", record.message)
35
+ expect(syslog).to receive(:log).with(Syslog::LOG_INFO, '%s', record.message)
34
36
 
35
37
  sink.add_record(record)
36
38
  end
37
39
 
38
- it "should truncate the record message if its greater than than allowed size" do
39
- identity = "test"
40
+ it 'truncates the record message if its greater than than allowed size' do
41
+ identity = 'test'
40
42
 
41
- syslog = double("syslog")
42
- Syslog.should_receive(:open) \
43
- .with(identity, Syslog::LOG_PID, Syslog::LOG_USER) \
44
- .and_return(syslog)
43
+ syslog = double('syslog', facility: nil)
44
+ expect(Syslog).to receive(:open).and_return(syslog)
45
45
 
46
46
  sink = Steno::Sink::Syslog.instance
47
47
  sink.open(identity)
48
48
 
49
- truncated = record_with_big_message.message.
50
- slice(0..(Steno::Sink::Syslog::MAX_MESSAGE_SIZE) - 4)
49
+ truncated = record_with_big_message.message
50
+ .slice(0..Steno::Sink::Syslog::MAX_MESSAGE_SIZE - 4)
51
51
  truncated << Steno::Sink::Syslog::TRUNCATE_POSTFIX
52
- codec = double("codec")
53
- codec.should_receive(:encode_record) do |*args|
54
- args.size.should == 1
55
- args[0].message.should == truncated
56
- args[0].message.size.should <= Steno::Sink::Syslog::MAX_MESSAGE_SIZE
52
+ codec = double('codec')
53
+ expect(codec).to receive(:encode_record) do |*args|
54
+ expect(args.size).to eq(1)
55
+ expect(args[0].message).to eq(truncated)
56
+ expect(args[0].message.size).to be <= Steno::Sink::Syslog::MAX_MESSAGE_SIZE
57
57
 
58
58
  next args[0].message
59
59
  end
60
60
 
61
61
  sink.codec = codec
62
62
 
63
- syslog.should_receive(:log).with(Syslog::LOG_INFO, "%s", truncated)
63
+ expect(syslog).to receive(:log).with(Syslog::LOG_INFO, '%s', truncated)
64
64
 
65
65
  sink.add_record(record_with_big_message)
66
66
  end
67
+
68
+ context 'when level is off' do
69
+ let(:level) do
70
+ Steno::Logger.lookup_level(:off)
71
+ end
72
+
73
+ it 'does not write out logs' do
74
+ identity = 'test'
75
+
76
+ syslog = double('syslog', facility: nil, log: nil)
77
+ expect(Syslog).to receive(:open).and_return(syslog)
78
+
79
+ sink = Steno::Sink::Syslog.instance
80
+ sink.open(identity)
81
+
82
+ codec = double('codec', encode_record: nil)
83
+ sink.codec = codec
84
+
85
+ sink.add_record(record)
86
+
87
+ expect(codec).not_to have_received(:encode_record)
88
+ expect(syslog).not_to have_received(:log)
89
+ end
90
+ end
67
91
  end
68
92
 
69
- describe "#flush" do
70
- it "should do nothing" do
93
+ describe '#flush' do
94
+ it 'does nothing' do
71
95
  Steno::Sink::Syslog.instance.flush
72
96
  end
73
97
  end
@@ -1,77 +1,77 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Steno do
4
4
  let(:config) { Steno::Config.new }
5
5
 
6
- before :each do
6
+ before do
7
7
  Steno.init(config)
8
8
  end
9
9
 
10
- describe "#logger" do
11
- it "should return a new Steno::Logger instance" do
12
- logger = Steno.logger("test")
13
- logger.should_not be_nil
14
- logger.name.should == "test"
10
+ describe '#logger' do
11
+ it 'returns a new Steno::Logger instance' do
12
+ logger = Steno.logger('test')
13
+ expect(logger).not_to be_nil
14
+ expect(logger.name).to eq('test')
15
15
  end
16
16
 
17
- it "should memoize loggers by name" do
18
- logger1 = Steno.logger("test")
19
- logger2 = Steno.logger("test")
17
+ it 'memoizes loggers by name' do
18
+ logger1 = Steno.logger('test')
19
+ logger2 = Steno.logger('test')
20
20
 
21
- logger1.object_id.should == logger2.object_id
21
+ expect(logger1.object_id).to eq(logger2.object_id)
22
22
  end
23
23
  end
24
24
 
25
- describe "#set_logger_regexp" do
26
- it "should modify the levels of existing loggers that match the regex" do
27
- logger = Steno.logger("test")
25
+ describe '#set_logger_regexp' do
26
+ it 'modifies the levels of existing loggers that match the regex' do
27
+ logger = Steno.logger('test')
28
28
 
29
- logger.level.should == :info
29
+ expect(logger.level).to eq(:info)
30
30
 
31
31
  Steno.set_logger_regexp(/te/, :debug)
32
32
 
33
- logger.level.should == :debug
33
+ expect(logger.level).to eq(:debug)
34
34
  end
35
35
 
36
- it "should modify the levels of new loggers after a regexp has been set" do
36
+ it 'modifies the levels of new loggers after a regexp has been set' do
37
37
  Steno.set_logger_regexp(/te/, :debug)
38
38
 
39
- Steno.logger("te").level.should == :debug
39
+ expect(Steno.logger('te').level).to eq(:debug)
40
40
  end
41
41
 
42
- it "should reset the levels of previously matching loggers when changed" do
42
+ it 'resets the levels of previously matching loggers when changed' do
43
43
  Steno.set_logger_regexp(/foo/, :debug)
44
44
 
45
- logger = Steno.logger("foo")
46
- logger.level.should == :debug
45
+ logger = Steno.logger('foo')
46
+ expect(logger.level).to eq(:debug)
47
47
 
48
48
  Steno.set_logger_regexp(/bar/, :debug)
49
49
 
50
- logger.level.should == :info
50
+ expect(logger.level).to eq(:info)
51
51
  end
52
52
  end
53
53
 
54
- describe "#clear_logger_regexp" do
55
- it "should reset any loggers matching the existing regexp" do
54
+ describe '#clear_logger_regexp' do
55
+ it 'resets any loggers matching the existing regexp' do
56
56
  Steno.set_logger_regexp(/te/, :debug)
57
57
 
58
- logger = Steno.logger("test")
59
- logger.level.should == :debug
58
+ logger = Steno.logger('test')
59
+ expect(logger.level).to eq(:debug)
60
60
 
61
61
  Steno.clear_logger_regexp
62
62
 
63
- logger.level.should == :info
64
- Steno.logger_regexp.should be_nil
63
+ expect(logger.level).to eq(:info)
64
+ expect(Steno.logger_regexp).to be_nil
65
65
  end
66
66
  end
67
67
 
68
- describe "#logger_level_snapshot" do
69
- it "should return a hash mapping logger name to level" do
68
+ describe '#logger_level_snapshot' do
69
+ it 'returns a hash mapping logger name to level' do
70
70
  loggers = []
71
71
 
72
72
  expected = {
73
- "foo" => :debug,
74
- "bar" => :warn,
73
+ 'foo' => :debug,
74
+ 'bar' => :warn
75
75
  }
76
76
 
77
77
  expected.each do |name, level|
@@ -80,7 +80,7 @@ describe Steno do
80
80
  loggers.last.level = level
81
81
  end
82
82
 
83
- Steno.logger_level_snapshot.should == expected
83
+ expect(Steno.logger_level_snapshot).to eq(expected)
84
84
  end
85
85
  end
86
86
  end
@@ -1,33 +1,35 @@
1
+ require 'spec_helper'
2
+
1
3
  describe Steno::TaggedLogger do
2
4
  let(:sink) { NullSink.new }
3
- let(:logger) { Steno::Logger.new("test", [sink]) }
4
- let(:user_data) { { "foo" => "bar" } }
5
+ let(:logger) { Steno::Logger.new('test', [sink]) }
6
+ let(:user_data) { { 'foo' => 'bar' } }
5
7
  let(:tagged_logger) { Steno::TaggedLogger.new(logger, user_data) }
6
8
 
7
- it "should add any user data to each log record" do
8
- tagged_logger.info("testing", "test" => "data")
9
- sink.records.size.should == 1
10
- sink.records[0].data.should == user_data.merge("test" => "data")
9
+ it 'adds any user data to each log record' do
10
+ tagged_logger.info('testing', 'test' => 'data')
11
+ expect(sink.records.size).to eq(1)
12
+ expect(sink.records[0].data).to eq(user_data.merge('test' => 'data'))
11
13
 
12
- tagged_logger.log_exception(RuntimeError.new("hi"))
13
- sink.records.size.should == 2
14
- sink.records[1].data.should == user_data.merge(:backtrace => nil)
14
+ tagged_logger.log_exception(RuntimeError.new('hi'))
15
+ expect(sink.records.size).to eq(2)
16
+ expect(sink.records[1].data).to eq(user_data.merge(backtrace: nil))
15
17
  end
16
18
 
17
- it "should forward missing methods to the proxied logger" do
18
- tagged_logger.level.should == :info
19
+ it 'forwards missing methods to the proxied logger' do
20
+ expect(tagged_logger.level).to eq(:info)
19
21
  tagged_logger.level = :warn
20
22
 
21
- logger.level.should == :warn
23
+ expect(logger.level).to eq(:warn)
22
24
 
23
- tagged_logger.level_active?(:info).should be_false
25
+ expect(tagged_logger.level_active?(:info)).to be_falsey
24
26
  end
25
27
 
26
- describe "#tag" do
27
- it "should return a new tagged logger with merged user-data" do
28
- tl = tagged_logger.tag("bar" => "baz")
29
- tl.proxied_logger.should == logger
30
- tl.user_data.should == user_data.merge("bar" => "baz")
28
+ describe '#tag' do
29
+ it 'returns a new tagged logger with merged user-data' do
30
+ tl = tagged_logger.tag('bar' => 'baz')
31
+ expect(tl.proxied_logger).to eq(logger)
32
+ expect(tl.user_data).to eq(user_data.merge('bar' => 'baz'))
31
33
  end
32
34
  end
33
35
  end
data/steno.gemspec CHANGED
@@ -1,40 +1,40 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/steno/version', __FILE__)
1
+ require File.expand_path('lib/steno/version', __dir__)
3
2
 
4
3
  Gem::Specification.new do |gem|
5
- gem.authors = ["mpage"]
6
- gem.email = ["mpage@rbcon.com"]
7
- gem.description = "A thread-safe logging library designed to support" \
8
- + " multiple log destinations."
9
- gem.summary = "A logging library."
10
- gem.homepage = "http://www.cloudfoundry.org"
4
+ gem.authors = ['mpage']
5
+ gem.email = ['mpage@rbcon.com']
6
+ gem.description = 'A thread-safe logging library designed to support' \
7
+ + ' multiple log destinations.'
8
+ gem.summary = 'A logging library.'
9
+ gem.homepage = 'http://www.cloudfoundry.org'
11
10
 
12
- gitignore = File.readlines(".gitignore").grep(/^[^#]/).map { |s| s.chomp }
11
+ gitignore = File.readlines('.gitignore').grep(/^[^#]/).map { |s| s.chomp }
13
12
 
14
13
  # Ignore Gemfile, this is a library
15
- gitignore << "Gemfile*"
14
+ gitignore << 'Gemfile*'
16
15
 
17
- glob = Dir["**/*"].
18
- reject { |f| File.directory?(f) }.
19
- reject { |f| gitignore.any? { |i| File.fnmatch(i, f) } }
16
+ glob = Dir['**/*']
17
+ .reject { |f| File.directory?(f) }
18
+ .reject { |f| gitignore.any? { |i| File.fnmatch(i, f) } }
20
19
 
21
20
  gem.files = glob
22
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
23
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
24
- gem.name = "steno"
25
- gem.require_paths = ["lib"]
21
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
22
+ gem.name = 'steno'
23
+ gem.require_paths = ['lib']
26
24
  gem.version = Steno::VERSION
27
25
 
28
- gem.add_dependency("yajl-ruby", "~> 1.0")
29
- gem.add_dependency("fluent-logger")
30
-
31
- gem.add_development_dependency("ci_reporter")
32
- gem.add_development_dependency("rack-test")
33
- gem.add_development_dependency("rake")
34
- gem.add_development_dependency("rspec")
35
-
36
- if RUBY_PLATFORM=~ /mswin|mingw|cygwin/
37
- gem.platform = Gem::Platform::CURRENT
38
- gem.add_dependency("win32-eventlog", "~> 0.6.0")
26
+ gem.add_dependency('fluent-logger')
27
+ gem.add_dependency('yajl-ruby', '~> 1.0')
28
+
29
+ gem.add_development_dependency('rack-test')
30
+ gem.add_development_dependency('rake')
31
+ gem.add_development_dependency('rspec', '~>3.13.0')
32
+ gem.add_development_dependency('rubocop', '~> 1.62.0')
33
+ gem.add_development_dependency('rubocop-rake', '~> 0.6.0')
34
+ gem.add_development_dependency('rubocop-rspec', '~> 2.27.0')
35
+
36
+ if RUBY_PLATFORM =~ /mswin|mingw|cygwin/
37
+ gem.platform = Gem::Platform::CURRENT
38
+ gem.add_dependency('win32-eventlog', '~> 0.6.0')
39
39
  end
40
40
  end