steno 1.2.4 → 1.3.4

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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MmJiYWIyYzUzZjdlZjk2YzIwY2Q3ZDk5YTY4NTgxYzE4OWQ4MGJiZA==
5
- data.tar.gz: !binary |-
6
- MzUzMjIwZTNjYTAzYWIyZDE2MmNmNTNiOTBkMzIzZmRiMDJmMGFkOQ==
2
+ SHA1:
3
+ metadata.gz: 9ae74f2bde35a6d8f17503cb1cd7bff4eb458b78
4
+ data.tar.gz: a3939b000fb9d0aaf3c7ade1231008d24e212a6e
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZGM2OWU1ZGZlYmEyZTVlODMyYzJiZDU5ZDliMWI0ZjExNWMwYzFmODU5NmNl
10
- ZDRlYjY5NzEzMjA5NmI0NTQwMmE0MjBiNDBkNTc2NDQ2ZGIxZTVkNDhhNzA2
11
- MDFiNWMxMjhhOTA2YzUyYzMxN2ZhMzk1YjZlYmIzYjdkZDk2ZjM=
12
- data.tar.gz: !binary |-
13
- Zjc3ZmVkY2QzNWZjZDUxYWNiYWQ5MWRhYjlkNjM2ZTg1Nzc0MDBhNWNlZWY4
14
- ZDUzYjg1YWJiZDUxYzlkN2E0ZDg1NTk5YzMwMzdiMzRkMGZhNDdhOTMyMWUw
15
- ZDE0YTVmNTBkZWI1MmNjNGEyNjgyOWI1YWQyYTRkNjgzNTFhZWY=
6
+ metadata.gz: c12db2c17088b015b24cbb6744d66b9ad7880a93c302b2dd16a0f7d896c38342677cf935f9b478f66c0d93988677bda9611c865af2a6aaa4baedb91bd88f3d1c
7
+ data.tar.gz: 23b73d7a6eb69d64d1e33292ba3a97ae5a5dcc617e9d09112a2e0e03c74abbfd941909a3622b120832ade5e9ee80aa35fe8f7dbe3fcc74cde74c864aa5c7f5f0
data/Rakefile CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env rake
2
- require "ci/reporter/rake/rspec"
3
2
  require "rspec/core/rake_task"
4
3
 
5
4
  task :default => :spec
@@ -8,6 +8,11 @@ module Steno
8
8
  end
9
9
 
10
10
  class Steno::Codec::Json < Steno::Codec::Base
11
+
12
+ def initialize(opts = {})
13
+ @iso8601_timestamps = opts[:iso8601_timestamps] || false
14
+ end
15
+
11
16
  def encode_record(record)
12
17
  msg =
13
18
  if record.message.valid_encoding?
@@ -31,6 +36,14 @@ class Steno::Codec::Json < Steno::Codec::Base
31
36
  "method" => record.method,
32
37
  }
33
38
 
34
- Yajl::Encoder.encode(h) + "\n"
39
+ if iso8601_timestamps?
40
+ h["timestamp"] = Time.at(record.timestamp).utc.iso8601(6)
41
+ end
42
+
43
+ Yajl::Encoder.encode(h) + "\n"
44
+ end
45
+
46
+ def iso8601_timestamps?
47
+ @iso8601_timestamps
35
48
  end
36
49
  end
@@ -41,6 +41,10 @@ class Steno::Config
41
41
  :default_log_level => level.nil? ? :info : level.to_sym
42
42
  }
43
43
 
44
+ if hash[:iso8601_timestamps]
45
+ opts[:codec] = Steno::Codec::Json.new(:iso8601_timestamps => true)
46
+ end
47
+
44
48
  if hash[:file]
45
49
  max_retries = hash[:max_retries]
46
50
  opts[:sinks] << Steno::Sink::IO.for_file(hash[:file], :max_retries => max_retries)
@@ -50,7 +50,7 @@ class Steno::JsonPrettifier
50
50
 
51
51
  exists = nil
52
52
  pred_meth = "check_#{field_name}".to_sym
53
- if respond_to?(pred_meth)
53
+ if respond_to?(pred_meth, true)
54
54
  exists = send(pred_meth, record)
55
55
  elsif record.respond_to?(:has_key?)
56
56
  exists = record.has_key?(field_name)
@@ -3,7 +3,7 @@ unless Steno::Sink::WINDOWS
3
3
 
4
4
  require "singleton"
5
5
  require "thread"
6
- require "syslog"
6
+ require "syslog/logger"
7
7
 
8
8
  class Steno::Sink::Syslog < Steno::Sink::Base
9
9
  include Singleton
@@ -30,7 +30,9 @@ unless Steno::Sink::WINDOWS
30
30
 
31
31
  def open(identity)
32
32
  @identity = identity
33
- @syslog = Syslog.open(@identity, Syslog::LOG_PID, Syslog::LOG_USER)
33
+
34
+ Syslog::Logger.new(@identity)
35
+ @syslog = Syslog::Logger.syslog
34
36
  end
35
37
 
36
38
  def add_record(record)
@@ -57,4 +59,4 @@ unless Steno::Sink::WINDOWS
57
59
  record.data)
58
60
  end
59
61
  end
60
- end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module Steno
2
- VERSION = "1.2.4"
2
+ VERSION = "1.3.4"
3
3
  end
@@ -2,6 +2,6 @@ shared_context :steno_context do
2
2
  it "should support clearing context local data" do
3
3
  context.data["test"] = "value"
4
4
  context.clear
5
- context.data["test"].should be_nil
5
+ expect(context.data["test"]).to be_nil
6
6
  end
7
7
  end
@@ -11,27 +11,27 @@ describe Steno::Config do
11
11
  @log_path = "some_file"
12
12
 
13
13
  @mock_sink_file = double("sink")
14
- @mock_sink_file.stub(:codec=)
15
- Steno::Sink::IO.should_receive(:for_file).with(@log_path,
14
+ expect(@mock_sink_file).to receive(:codec=)
15
+ expect(Steno::Sink::IO).to receive(:for_file).with(@log_path,
16
16
  :max_retries => 5)
17
17
  .and_return(@mock_sink_file)
18
18
 
19
19
  @mock_sink_eventlog = double("sink")
20
- @mock_sink_eventlog.stub(:codec=)
21
- @mock_sink_eventlog.should_receive(:open).with("test")
22
- Steno::Sink::Eventlog.should_receive(:instance).twice()
20
+ expect(@mock_sink_eventlog).to receive(:codec=)
21
+ expect(@mock_sink_eventlog).to receive(:open).with("test")
22
+ expect(Steno::Sink::Eventlog).to receive(:instance).twice()
23
23
  .and_return(@mock_sink_eventlog)
24
24
  end
25
25
 
26
26
  after :each do
27
27
  @config = Steno::Config.from_hash(@hash)
28
28
 
29
- @config.default_log_level.should == :debug2
30
- @config.context.should.class == Steno::Context::Null
31
- @config.codec.should.class == Steno::Codec::Json
29
+ expect(@config.default_log_level).to eq(:debug2)
30
+ expect(@config.context.class).to eq(Steno::Context::Null)
31
+ expect(@config.codec.class).to eq(Steno::Codec::Json)
32
32
 
33
- @config.sinks.size.should == 2
34
- @config.sinks.should =~ [@mock_sink_file, @mock_sink_eventlog]
33
+ expect(@config.sinks.size).to eq(2)
34
+ expect(@config.sinks).to match_array([@mock_sink_file, @mock_sink_eventlog])
35
35
  end
36
36
 
37
37
  it "should work for symbolized keys" do
@@ -61,27 +61,27 @@ describe Steno::Config do
61
61
  @log_path = "some_file"
62
62
 
63
63
  @mock_sink_file = double("sink")
64
- @mock_sink_file.stub(:codec=)
65
- Steno::Sink::IO.should_receive(:for_file).with(@log_path,
64
+ allow(@mock_sink_file).to receive(:codec=)
65
+ expect(Steno::Sink::IO).to receive(:for_file).with(@log_path,
66
66
  :max_retries => 5)
67
67
  .and_return(@mock_sink_file)
68
68
 
69
69
  @mock_sink_syslog = double("sink")
70
- @mock_sink_syslog.stub(:codec=)
71
- @mock_sink_syslog.should_receive(:open).with("test")
72
- Steno::Sink::Syslog.should_receive(:instance).twice()
70
+ expect(@mock_sink_syslog).to receive(:codec=)
71
+ expect(@mock_sink_syslog).to receive(:open).with("test")
72
+ expect(Steno::Sink::Syslog).to receive(:instance).twice()
73
73
  .and_return(@mock_sink_syslog)
74
74
  end
75
75
 
76
76
  after :each do
77
77
  @config = Steno::Config.from_hash(@hash)
78
78
 
79
- @config.default_log_level.should == :debug2
80
- @config.context.should.class == Steno::Context::Null
81
- @config.codec.should.class == Steno::Codec::Json
79
+ expect(@config.default_log_level).to eq(:debug2)
80
+ expect(@config.context.class).to eq(Steno::Context::Null)
81
+ expect(@config.codec.class).to eq(Steno::Codec::Json)
82
82
 
83
- @config.sinks.size.should == 2
84
- @config.sinks.should =~ [@mock_sink_file, @mock_sink_syslog]
83
+ expect(@config.sinks.size).to eq(2)
84
+ expect(@config.sinks).to match_array([@mock_sink_file, @mock_sink_syslog])
85
85
  end
86
86
 
87
87
  it "should work for symbolized keys" do
@@ -123,67 +123,75 @@ describe Steno::Config do
123
123
 
124
124
  config = Steno::Config.from_file(@config_path)
125
125
 
126
- config.sinks.size.should == 1
127
- config.sinks[0].class.should == Steno::Sink::IO
126
+ expect(config.sinks.size).to eq(1)
127
+ expect(config.sinks[0].class).to eq(Steno::Sink::IO)
128
128
 
129
- config.default_log_level.should == :info
129
+ expect(config.default_log_level).to eq(:info)
130
130
 
131
- config.context.should.class == Steno::Context::Null
131
+ expect(config.context.class).to eq(Steno::Context::Null)
132
132
 
133
- config.codec.should.class == Steno::Codec::Json
133
+ expect(config.codec.class).to eq(Steno::Codec::Json)
134
+ expect(config.codec.iso8601_timestamps?).to eq(false)
135
+ end
136
+
137
+ it "should configure json codec with readable dates if iso8601_timestamps is true" do
138
+ write_config(@config_path, {"iso8601_timestamps" => "true"})
139
+ config = Steno::Config.from_file(@config_path)
140
+ expect(config.codec.class).to eq(Steno::Codec::Json)
141
+ expect(config.codec.iso8601_timestamps?).to eq(true)
134
142
  end
135
143
 
136
144
  it "should set the default_log_level if a key with the same name is supplied" do
137
145
  write_config(@config_path, {"level" => "debug2"})
138
- Steno::Config.from_file(@config_path).default_log_level.should == :debug2
146
+ expect(Steno::Config.from_file(@config_path).default_log_level).to eq(:debug2)
139
147
 
140
148
  write_config(@config_path, {"default_log_level" => "debug2"})
141
- Steno::Config.from_file(@config_path).default_log_level.should == :debug2
149
+ expect(Steno::Config.from_file(@config_path).default_log_level).to eq(:debug2)
142
150
  end
143
151
 
144
152
  it "should read the 'level' key if both default_log_level and level are spscified" do
145
153
  write_config(@config_path, {"level" => "debug2",
146
154
  "default_log_level" => "warn"})
147
- Steno::Config.from_file(@config_path).default_log_level.should == :debug2
155
+ expect(Steno::Config.from_file(@config_path).default_log_level).to eq(:debug2)
148
156
  end
149
157
 
150
158
  it "should add a file sink if the 'file' key is specified" do
151
159
  write_config(@config_path, {"file" => @log_path, "max_retries" => 2})
152
160
  mock_sink = double("sink")
153
- mock_sink.stub(:codec=)
161
+ expect(mock_sink).to receive(:codec=)
154
162
 
155
- Steno::Sink::IO.should_receive(:for_file).
163
+ expect(Steno::Sink::IO).to receive(:for_file).
156
164
  with(@log_path, :max_retries => 2).and_return(mock_sink)
157
165
  config = Steno::Config.from_file(@config_path)
158
- config.sinks.size.should == 1
159
- config.sinks[0].should == mock_sink
166
+ expect(config.sinks.size).to eq(1)
167
+ expect(config.sinks[0]).to eq(mock_sink)
160
168
  end
161
169
 
162
170
  if Steno::Sink::WINDOWS
163
171
  it "should add a event sink if the 'eventlog' key is specified" do
164
172
  write_config(@config_path, {"eventlog" => "test"})
165
173
  mock_sink = double("sink")
166
- mock_sink.should_receive(:open).with("test")
167
- mock_sink.stub(:codec=)
174
+ expect(mock_sink).to receive(:open).with("test")
175
+ expect(mock_sink).to receive(:codec=)
168
176
 
169
- Steno::Sink::Eventlog.should_receive(:instance).twice().and_return(mock_sink)
177
+ expect(Steno::Sink::Eventlog).to receive(:instance).twice().and_return(mock_sink)
170
178
 
171
179
  config = Steno::Config.from_file(@config_path)
172
- config.sinks.size.should == 1
173
- config.sinks[0].should == mock_sink
180
+ expect(config.sinks.size).to eq(1)
181
+ expect(config.sinks[0]).to eq(mock_sink)
174
182
  end
175
183
  else
176
184
  it "should add a syslog sink if the 'syslog' key is specified" do
177
185
  write_config(@config_path, {"syslog" => "test"})
178
186
  mock_sink = double("sink")
179
- mock_sink.should_receive(:open).with("test")
180
- mock_sink.stub(:codec=)
187
+ expect(mock_sink).to receive(:open).with("test")
188
+ expect(mock_sink).to receive(:codec=)
181
189
 
182
- Steno::Sink::Syslog.should_receive(:instance).twice().and_return(mock_sink)
190
+ expect(Steno::Sink::Syslog).to receive(:instance).twice().and_return(mock_sink)
183
191
 
184
192
  config = Steno::Config.from_file(@config_path)
185
- config.sinks.size.should == 1
186
- config.sinks[0].should == mock_sink
193
+ expect(config.sinks.size).to eq(1)
194
+ expect(config.sinks[0]).to eq(mock_sink)
187
195
  end
188
196
  end
189
197
 
@@ -192,13 +200,13 @@ describe Steno::Config do
192
200
  it "should add an io sink to stdout if no sinks are explicitly specified in the config file" do
193
201
  write_config(@config_path, {})
194
202
  mock_sink = double("sink")
195
- mock_sink.stub(:codec=)
203
+ expect(mock_sink).to receive(:codec=)
196
204
 
197
- Steno::Sink::IO.should_receive(:new).with(STDOUT).and_return(mock_sink)
205
+ expect(Steno::Sink::IO).to receive(:new).with(STDOUT).and_return(mock_sink)
198
206
 
199
207
  config = Steno::Config.from_file(@config_path)
200
- config.sinks.size.should == 1
201
- config.sinks[0].should == mock_sink
208
+ expect(config.sinks.size).to eq(1)
209
+ expect(config.sinks[0]).to eq(mock_sink)
202
210
  end
203
211
 
204
212
  it "should merge supplied overrides with the file based config" do
@@ -208,8 +216,8 @@ describe Steno::Config do
208
216
  config = Steno::Config.from_file(@config_path,
209
217
  :default_log_level => "warn",
210
218
  :context => context)
211
- config.context.should == context
212
- config.default_log_level.should == :warn
219
+ expect(config.context).to eq(context)
220
+ expect(config.default_log_level).to eq(:warn)
213
221
  end
214
222
  end
215
223
 
@@ -6,9 +6,9 @@ describe Steno::Context::Null do
6
6
  let(:context) { Steno::Context::Null.new }
7
7
 
8
8
  it "should store no data" do
9
- context.data.should == {}
9
+ expect(context.data).to eq({})
10
10
  context.data["foo"] = "bar"
11
- context.data.should == {}
11
+ expect(context.data).to eq({})
12
12
  end
13
13
  end
14
14
 
@@ -25,12 +25,12 @@ describe Steno::Context::ThreadLocal do
25
25
  context.data["thread"] = "t1"
26
26
  b1.release
27
27
  b2.wait
28
- context.data["thread"].should == "t1"
28
+ expect(context.data["thread"]).to eq("t1")
29
29
  end
30
30
 
31
31
  t2 = Thread.new do
32
32
  b1.wait
33
- context.data["thread"].should be_nil
33
+ expect(context.data["thread"]).to be_nil
34
34
  context.data["thread"] = "t2"
35
35
  b2.release
36
36
  end
@@ -47,14 +47,14 @@ describe Steno::Context::FiberLocal do
47
47
 
48
48
  it "should store data local to fibers" do
49
49
  f2 = Fiber.new do
50
- context.data["fiber"].should be_nil
50
+ expect(context.data["fiber"]).to be_nil
51
51
  context.data["fiber"] = "f2"
52
52
  end
53
53
 
54
54
  f1 = Fiber.new do
55
55
  context.data["fiber"] = "f1"
56
56
  f2.resume
57
- context.data["fiber"].should == "f1"
57
+ expect(context.data["fiber"]).to eq("f1")
58
58
  end
59
59
 
60
60
  f1.resume
@@ -11,8 +11,8 @@ describe Module do
11
11
  describe "#logger" do
12
12
  it "should request a logger named after itself" do
13
13
  x = Foo.logger
14
- x.should be_a(Steno::Logger)
15
- x.name.should include("Foo")
14
+ expect(x).to be_a(Steno::Logger)
15
+ expect(x.name).to include("Foo")
16
16
  end
17
17
  end
18
18
  end
@@ -21,8 +21,8 @@ describe Class do
21
21
  describe "#logger" do
22
22
  it "should request a logger named after itself" do
23
23
  x = Foo::Bar.logger
24
- x.should be_a(Steno::Logger)
25
- x.name.should include("Foo::Bar")
24
+ expect(x).to be_a(Steno::Logger)
25
+ expect(x.name).to include("Foo::Bar")
26
26
  end
27
27
  end
28
28
  end
@@ -31,8 +31,8 @@ describe Object do
31
31
  describe "#logger" do
32
32
  it "should request a logger named after its class" do
33
33
  x = Foo::Bar.new.logger
34
- x.should be_a(Steno::Logger)
35
- x.name.should include("Foo::Bar")
34
+ expect(x).to be_a(Steno::Logger)
35
+ expect(x.name).to include("Foo::Bar")
36
36
  end
37
37
  end
38
38
  end
@@ -7,34 +7,54 @@ describe Steno::Codec::Json do
7
7
  describe "#encode_record" do
8
8
  it "should encode records as json hashes" do
9
9
  parsed = Yajl::Parser.parse(codec.encode_record(record))
10
- parsed.class.should == Hash
10
+ expect(parsed.class).to eq(Hash)
11
11
  end
12
12
 
13
13
  it "should encode the timestamp as a float" do
14
14
  parsed = Yajl::Parser.parse(codec.encode_record(record))
15
- parsed["timestamp"].class.should == Float
15
+ expect(parsed["timestamp"].class).to eq(Float)
16
16
  end
17
17
 
18
18
  it "should escape newlines" do
19
19
  rec = make_record(:message => "newline\ntest")
20
- codec.encode_record(rec).should match(/newline\\ntest/)
20
+ expect(codec.encode_record(rec)).to match(/newline\\ntest/)
21
21
  end
22
22
 
23
23
  it "should escape carriage returns" do
24
24
  rec = make_record(:message => "newline\rtest")
25
- codec.encode_record(rec).should match(/newline\\rtest/)
25
+ expect(codec.encode_record(rec)).to match(/newline\\rtest/)
26
26
  end
27
27
 
28
28
  it "should allow messages with valid encodings to pass through untouched" do
29
29
  msg = "HI\u2600"
30
30
  rec = make_record(:message => msg)
31
- codec.encode_record(rec).should match(/#{msg}/)
31
+ expect(codec.encode_record(rec)).to match(/#{msg}/)
32
32
  end
33
33
 
34
34
  it "should treat messages with invalid encodings as binary data" do
35
35
  msg = "HI\u2026".force_encoding("US-ASCII")
36
36
  rec = make_record(:message => msg)
37
- codec.encode_record(rec).should match(/HI\\\\xe2\\\\x80\\\\xa6/)
37
+ expect(codec.encode_record(rec)).to match(/HI\\\\xe2\\\\x80\\\\xa6/)
38
+ end
39
+
40
+ it "shouldn't use readable dates by default" do
41
+ expect(codec.iso8601_timestamps?).to eq(false)
42
+ end
43
+
44
+ context "when iso8601_timestamps is set" do
45
+ let(:codec) { Steno::Codec::Json.new( :iso8601_timestamps => true ) }
46
+
47
+ it "should encode timestamps as UTC-formatted strings" do
48
+ allow(record).to receive(:timestamp).and_return 1396473763.811278 # 2014-04-02 22:22:43 +01:00
49
+ parsed = Yajl::Parser.parse(codec.encode_record(record))
50
+
51
+ expect(parsed["timestamp"].class).to eq(String)
52
+ expect(parsed["timestamp"]).to eq("2014-04-02T21:22:43.811278Z")
53
+ end
54
+
55
+ it "should surface the property in a getter" do
56
+ expect(codec.iso8601_timestamps?).to eq(true)
57
+ end
38
58
  end
39
59
  end
40
60
 
@@ -25,7 +25,7 @@ describe Steno::JsonPrettifier do
25
25
  '--',
26
26
  'message', # Log message
27
27
  ].join("\s+") + "\n"
28
- prettified.should match(exp_regex)
28
+ expect(prettified).to match(exp_regex)
29
29
  end
30
30
 
31
31
  it "should always use the largest src len to determine src column width" do
@@ -60,7 +60,7 @@ describe Steno::JsonPrettifier do
60
60
  src_col = prettified.match(regex)[1]
61
61
 
62
62
  max_src_len = [max_src_len, src.length].max
63
- src_col.length.should == max_src_len
63
+ expect(src_col.length).to eq(max_src_len)
64
64
  end
65
65
  end
66
66
 
@@ -77,8 +77,8 @@ describe Steno::JsonPrettifier do
77
77
  end
78
78
 
79
79
  it "should work with a nil data field" do
80
- line = prettifier.prettify_line(%@{"data":null}@)
81
- line.should include(" - ")
80
+ line = prettifier.prettify_line('{"data":null}')
81
+ expect(line).to include(" - ")
82
82
  end
83
83
  end
84
84
  end
@@ -5,14 +5,14 @@ describe Steno::LogLevel do
5
5
  let(:debug_level) { Steno::LogLevel.new(:debug, 1) }
6
6
 
7
7
  it "should be comparable" do
8
- (info_level > debug_level).should be_true
9
- (debug_level > info_level).should be_false
10
- (info_level == info_level).should be_true
8
+ expect(info_level > debug_level).to be_truthy
9
+ expect(debug_level > info_level).to be_falsey
10
+ expect(info_level == info_level).to be_truthy
11
11
  end
12
12
 
13
13
  describe "#to_s" do
14
14
  it "should return the name of the level" do
15
- info_level.to_s.should == "info"
15
+ expect(info_level.to_s).to eq("info")
16
16
  end
17
17
  end
18
18
 
@@ -6,46 +6,46 @@ describe Steno::Logger do
6
6
  it "should provide #level, #levelf, and #level? methods for each log level" do
7
7
  Steno::Logger::LEVELS.each do |name, _|
8
8
  [name, name.to_s + "f", name.to_s + "?"].each do |meth|
9
- logger.respond_to?(meth).should be_true
9
+ expect(logger.respond_to?(meth)).to be_truthy
10
10
  end
11
11
  end
12
12
  end
13
13
 
14
14
  describe "#level_active?" do
15
15
  it "should return a boolean indicating if the level is enabled" do
16
- logger.level_active?(:error).should be_true
17
- logger.level_active?(:info).should be_true
18
- logger.level_active?(:debug).should be_false
16
+ expect(logger.level_active?(:error)).to be_truthy
17
+ expect(logger.level_active?(:info)).to be_truthy
18
+ expect(logger.level_active?(:debug)).to be_falsey
19
19
  end
20
20
  end
21
21
 
22
22
  describe "#<level>?" do
23
23
  it "should return a boolean indiciating if <level> is enabled" do
24
- logger.error?.should be_true
25
- logger.info?.should be_true
26
- logger.debug?.should be_false
24
+ expect(logger.error?).to be_truthy
25
+ expect(logger.info?).to be_truthy
26
+ expect(logger.debug?).to be_falsey
27
27
  end
28
28
  end
29
29
 
30
30
  describe "#level" do
31
31
  it "should return the name of the currently active level" do
32
- logger.level.should == :info
32
+ expect(logger.level).to eq(:info)
33
33
  end
34
34
  end
35
35
 
36
36
  describe "#level=" do
37
37
  it "should allow the level to be changed" do
38
38
  logger.level = :warn
39
- logger.level.should == :warn
40
- logger.level_active?(:info).should be_false
41
- logger.level_active?(:warn).should be_true
39
+ expect(logger.level).to eq(:warn)
40
+ expect(logger.level_active?(:info)).to be_falsey
41
+ expect(logger.level_active?(:warn)).to be_truthy
42
42
  end
43
43
  end
44
44
 
45
45
  describe "#log" do
46
46
  it "should not forward any messages for levels that are inactive" do
47
47
  sink = double("sink")
48
- sink.should_not_receive(:add_record)
48
+ expect(sink).to_not receive(:add_record)
49
49
 
50
50
  my_logger = Steno::Logger.new("test", [sink])
51
51
 
@@ -54,7 +54,7 @@ describe Steno::Logger do
54
54
 
55
55
  it "should forward messages for levels that are active" do
56
56
  sink = double("sink")
57
- sink.should_receive(:add_record).with(any_args())
57
+ expect(sink).to receive(:add_record).with(any_args())
58
58
 
59
59
  my_logger = Steno::Logger.new("test", [sink])
60
60
 
@@ -64,19 +64,19 @@ describe Steno::Logger do
64
64
  it "should not invoke a supplied block if the level is inactive" do
65
65
  invoked = false
66
66
  logger.debug { invoked = true }
67
- invoked.should be_false
67
+ expect(invoked).to be_falsey
68
68
  end
69
69
 
70
70
  it "should invoke a supplied block if the level is active" do
71
71
  invoked = false
72
72
  logger.warn { invoked = true }
73
- invoked.should be_true
73
+ expect(invoked).to be_truthy
74
74
  end
75
75
 
76
76
  it "creates a record with the proper level" do
77
77
  sink = double("sink")
78
- Steno::Record.should_receive(:new).with("test", :warn, "message", anything, anything).and_call_original
79
- sink.stub(:add_record)
78
+ expect(Steno::Record).to receive(:new).with("test", :warn, "message", anything, anything).and_call_original
79
+ allow(sink).to receive(:add_record)
80
80
 
81
81
  my_logger = Steno::Logger.new("test", [sink])
82
82
 
@@ -86,7 +86,7 @@ describe Steno::Logger do
86
86
 
87
87
  describe "#logf" do
88
88
  it "should format messages according to the supplied format string" do
89
- logger.should_receive(:log).with(:debug, "test 1 2.20")
89
+ expect(logger).to receive(:log).with(:debug, "test 1 2.20")
90
90
  logger.debugf("test %d %0.2f", 1, 2.2)
91
91
  end
92
92
  end
@@ -94,8 +94,8 @@ describe Steno::Logger do
94
94
  describe "#tag" do
95
95
  it "should return a tagged logger" do
96
96
  tagged_logger = logger.tag("foo" => "bar")
97
- tagged_logger.should_not be_nil
98
- tagged_logger.user_data.should == { "foo" => "bar" }
97
+ expect(tagged_logger).to_not be_nil
98
+ expect(tagged_logger.user_data).to eq({ "foo" => "bar" })
99
99
  end
100
100
  end
101
101
  end
@@ -5,26 +5,26 @@ describe Steno::Record do
5
5
  let(:record) { Steno::Record.new("test", :info, message) }
6
6
 
7
7
  it "should set the process id" do
8
- record.process_id.should == Process.pid
8
+ expect(record.process_id).to eq(Process.pid)
9
9
  end
10
10
 
11
11
  it "should set the thread id" do
12
- record.thread_id.should == Thread.current.object_id
12
+ expect(record.thread_id).to eq(Thread.current.object_id)
13
13
  end
14
14
 
15
15
  it "should set the fiber id(if available)", :needs_fibers => true do
16
- record.fiber_id.should == Fiber.current.object_id
16
+ expect(record.fiber_id).to eq(Fiber.current.object_id)
17
17
  end
18
18
 
19
19
  it "should set the source" do
20
- record.source.should == "test"
20
+ expect(record.source).to eq("test")
21
21
  end
22
22
 
23
23
  it "should stringify the message" do
24
- record.message.should be_a(String)
24
+ expect(record.message).to be_a(String)
25
25
  end
26
26
 
27
27
  it "should use a UTC timestamp" do
28
- record.timestamp.to_f.should be_within(0.1).of(Time.now.utc.to_f)
28
+ expect(record.timestamp.to_f).to be_within(0.1).of(Time.now.utc.to_f)
29
29
  end
30
30
  end
@@ -11,20 +11,20 @@ describe Steno::Sink::IO do
11
11
 
12
12
  describe "#initialize" do
13
13
  it "should initialize FluentLogger with the default option" do
14
- Fluent::Logger::FluentLogger.should_receive(:new).with("steno", {
14
+ expect(Fluent::Logger::FluentLogger).to receive(:new).with("steno", {
15
15
  :host => "127.0.0.1",
16
16
  :port => 24224,
17
17
  :buffer_limit => Fluent::Logger::FluentLogger::BUFFER_LIMIT,
18
- }).and_return()
18
+ }).and_return(nil)
19
19
  sink = Steno::Sink::Fluentd.new()
20
20
  end
21
21
 
22
22
  it "should initialize FliuentLogger with override options" do
23
- Fluent::Logger::FluentLogger.should_receive(:new).with("vcap", {
23
+ expect(Fluent::Logger::FluentLogger).to receive(:new).with("vcap", {
24
24
  :host => "localhost",
25
25
  :port => 8080,
26
26
  :buffer_limit => 1024,
27
- }).and_return()
27
+ }).and_return(nil)
28
28
  sink = Steno::Sink::Fluentd.new({
29
29
  :tag_prefix => "vcap",
30
30
  :host => "localhost",
@@ -37,10 +37,10 @@ describe Steno::Sink::IO do
37
37
  describe "#add_record" do
38
38
  it "should post an record with the correct tag" do
39
39
  fluentd = double("fluentd")
40
- Fluent::Logger::FluentLogger.should_receive(:new).and_return(fluentd)
41
- fluentd.should_receive(:post).with("source", record)
40
+ expect(Fluent::Logger::FluentLogger).to receive(:new).and_return(fluentd)
41
+ expect(fluentd).to receive(:post).with("source", record)
42
42
  sink = Steno::Sink::Fluentd.new()
43
43
  sink.add_record(record)
44
44
  end
45
45
  end
46
- end
46
+ end
@@ -13,55 +13,55 @@ describe Steno::Sink::IO do
13
13
  it "should return a new sink configured to append to the file at path with autosync set to true by default" do
14
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
19
  mock_sink = double("sink")
20
- Steno::Sink::IO.should_receive(:new).with(mock_handle,
20
+ expect(Steno::Sink::IO).to receive(:new).with(mock_handle,
21
21
  :max_retries => 10).
22
22
  and_return(mock_sink)
23
23
 
24
24
  returned = Steno::Sink::IO.for_file("path",
25
25
  :max_retries => 10)
26
- returned.should == mock_sink
26
+ expect(returned).to eq(mock_sink)
27
27
  end
28
28
 
29
29
  it "should return a new sink configured to append to the file at path with specified options" do
30
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
35
  mock_sink = double("sink")
36
- Steno::Sink::IO.should_receive(:new).with(mock_handle,
36
+ expect(Steno::Sink::IO).to receive(:new).with(mock_handle,
37
37
  :max_retries => 10).
38
38
  and_return(mock_sink)
39
39
 
40
40
  returned = Steno::Sink::IO.for_file("path",
41
41
  :autoflush => false,
42
42
  :max_retries => 10)
43
- returned.should == mock_sink
43
+ expect(returned).to eq(mock_sink)
44
44
  end
45
45
  end
46
46
 
47
47
  describe "#add_record" do
48
48
  it "should encode the record and write it to the underlying io object" do
49
49
  codec = double("codec")
50
- codec.should_receive(:encode_record).with(record).and_return(record.message)
50
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
51
51
 
52
52
  io = double("io")
53
- io.should_receive(:write).with(record.message)
53
+ expect(io).to receive(:write).with(record.message)
54
54
 
55
55
  Steno::Sink::IO.new(io, :codec => codec).add_record(record)
56
56
  end
57
57
 
58
58
  it "should by default not retry on IOError" do
59
59
  codec = double("codec")
60
- codec.should_receive(:encode_record).with(record).and_return(record.message)
60
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
61
61
 
62
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
67
  Steno::Sink::IO.new(io, :codec => codec).add_record(record)
@@ -70,11 +70,11 @@ describe Steno::Sink::IO do
70
70
 
71
71
  it "should retry not more than specified number of times on IOError" do
72
72
  codec = double("codec")
73
- codec.should_receive(:encode_record).with(record).and_return(record.message)
73
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
74
74
 
75
75
  io = double("io")
76
76
 
77
- io.should_receive(:write).exactly(3).times.with(record.message).
77
+ expect(io).to receive(:write).exactly(3).times.with(record.message).
78
78
  and_raise(IOError)
79
79
 
80
80
  expect do
@@ -85,25 +85,25 @@ describe Steno::Sink::IO do
85
85
 
86
86
  it "should retry on IOError and succeed" do
87
87
  codec = double("codec")
88
- codec.should_receive(:encode_record).with(record).and_return(record.message)
88
+ expect(codec).to receive(:encode_record).with(record).and_return(record.message)
89
89
 
90
90
  io = double("io")
91
- io.should_receive(:write).with(record.message).once.
91
+ expect(io).to receive(:write).with(record.message).once.
92
92
  and_raise(IOError)
93
- io.should_receive(:write).with(record.message).once.ordered.
93
+ expect(io).to receive(:write).with(record.message).once.ordered.
94
94
  and_return(record.message)
95
95
 
96
96
  expect do
97
97
  Steno::Sink::IO.new(io, :codec => codec, :max_retries => 1).
98
98
  add_record(record)
99
- end.to_not raise_error(IOError)
99
+ end.to_not raise_error
100
100
  end
101
101
  end
102
102
 
103
103
  describe "#flush" do
104
104
  it "should call flush on the underlying io object" do
105
105
  io = double("io")
106
- io.should_receive(:flush)
106
+ expect(io).to receive(:flush)
107
107
 
108
108
  Steno::Sink::IO.new(io).flush
109
109
  end
@@ -11,26 +11,28 @@ unless Steno::Sink::WINDOWS
11
11
 
12
12
  let(:record_with_big_message) do
13
13
  Steno::Record.new("source", level.name,
14
- "a" * (Steno::Sink::Syslog::MAX_MESSAGE_SIZE + 1))
14
+ "a" * (Steno::Sink::Syslog::MAX_MESSAGE_SIZE + 1))
15
15
  end
16
16
 
17
17
  describe "#add_record" do
18
+ after do
19
+ Syslog::Logger.syslog = nil
20
+ end
21
+
18
22
  it "should append an encoded record with the correct priority" do
19
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
31
  codec = double("codec")
30
- codec.should_receive(:encode_record).with(record).and_return(record.message)
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
@@ -38,10 +40,8 @@ unless Steno::Sink::WINDOWS
38
40
  it "should truncate the record message if its greater than than allowed size" do
39
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)
@@ -50,17 +50,17 @@ unless Steno::Sink::WINDOWS
50
50
  slice(0..(Steno::Sink::Syslog::MAX_MESSAGE_SIZE) - 4)
51
51
  truncated << Steno::Sink::Syslog::TRUNCATE_POSTFIX
52
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
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
@@ -10,15 +10,15 @@ describe Steno do
10
10
  describe "#logger" do
11
11
  it "should return a new Steno::Logger instance" do
12
12
  logger = Steno.logger("test")
13
- logger.should_not be_nil
14
- logger.name.should == "test"
13
+ expect(logger).to_not be_nil
14
+ expect(logger.name).to eq("test")
15
15
  end
16
16
 
17
17
  it "should memoize loggers by name" do
18
18
  logger1 = Steno.logger("test")
19
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
 
@@ -26,28 +26,28 @@ describe Steno do
26
26
  it "should modify the levels of existing loggers that match the regex" do
27
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
36
  it "should modify 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
42
  it "should reset the levels of previously matching loggers when changed" do
43
43
  Steno.set_logger_regexp(/foo/, :debug)
44
44
 
45
45
  logger = Steno.logger("foo")
46
- logger.level.should == :debug
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
 
@@ -56,12 +56,12 @@ describe Steno do
56
56
  Steno.set_logger_regexp(/te/, :debug)
57
57
 
58
58
  logger = Steno.logger("test")
59
- logger.level.should == :debug
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
 
@@ -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,3 +1,5 @@
1
+ require 'spec_helper'
2
+
1
3
  describe Steno::TaggedLogger do
2
4
  let(:sink) { NullSink.new }
3
5
  let(:logger) { Steno::Logger.new("test", [sink]) }
@@ -6,28 +8,28 @@ describe Steno::TaggedLogger do
6
8
 
7
9
  it "should add any user data to each log record" do
8
10
  tagged_logger.info("testing", "test" => "data")
9
- sink.records.size.should == 1
10
- sink.records[0].data.should == user_data.merge("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
14
  tagged_logger.log_exception(RuntimeError.new("hi"))
13
- sink.records.size.should == 2
14
- sink.records[1].data.should == user_data.merge(:backtrace => nil)
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
19
  it "should forward missing methods to the proxied logger" do
18
- tagged_logger.level.should == :info
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
28
  describe "#tag" do
27
29
  it "should return a new tagged logger with merged user-data" do
28
30
  tl = tagged_logger.tag("bar" => "baz")
29
- tl.proxied_logger.should == logger
30
- tl.user_data.should == user_data.merge("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
@@ -28,10 +28,9 @@ Gem::Specification.new do |gem|
28
28
  gem.add_dependency("yajl-ruby", "~> 1.0")
29
29
  gem.add_dependency("fluent-logger")
30
30
 
31
- gem.add_development_dependency("ci_reporter")
32
31
  gem.add_development_dependency("rack-test")
33
32
  gem.add_development_dependency("rake")
34
- gem.add_development_dependency("rspec")
33
+ gem.add_development_dependency("rspec", "~>3.4.0")
35
34
 
36
35
  if RUBY_PLATFORM=~ /mswin|mingw|cygwin/
37
36
  gem.platform = Gem::Platform::CURRENT
metadata CHANGED
@@ -1,99 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steno
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - mpage
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-17 00:00:00.000000000 Z
11
+ date: 2016-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yajl-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fluent-logger
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: ci_reporter
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ! '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ! '>='
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rack-test
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ! '>='
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
47
  version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ! '>='
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rake
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - ! '>='
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ! '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rspec
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - ! '>='
73
+ - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: 3.4.0
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - ! '>='
80
+ - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '0'
82
+ version: 3.4.0
97
83
  description: A thread-safe logging library designed to support multiple log destinations.
98
84
  email:
99
85
  - mpage@rbcon.com
@@ -156,17 +142,17 @@ require_paths:
156
142
  - lib
157
143
  required_ruby_version: !ruby/object:Gem::Requirement
158
144
  requirements:
159
- - - ! '>='
145
+ - - ">="
160
146
  - !ruby/object:Gem::Version
161
147
  version: '0'
162
148
  required_rubygems_version: !ruby/object:Gem::Requirement
163
149
  requirements:
164
- - - ! '>='
150
+ - - ">="
165
151
  - !ruby/object:Gem::Version
166
152
  version: '0'
167
153
  requirements: []
168
154
  rubyforge_project:
169
- rubygems_version: 2.2.2
155
+ rubygems_version: 2.4.5.1
170
156
  signing_key:
171
157
  specification_version: 4
172
158
  summary: A logging library.