yell 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +8 -6
- data/LICENSE.txt +1 -1
- data/README.md +1 -1
- data/lib/yell/version.rb +1 -1
- data/yell.gemspec +21 -25
- metadata +6 -54
- data/spec/compatibility/activesupport_logger_spec.rb +0 -36
- data/spec/compatibility/formatter_spec.rb +0 -21
- data/spec/compatibility/level_spec.rb +0 -36
- data/spec/fixtures/yell.yml +0 -7
- data/spec/spec_helper.rb +0 -56
- data/spec/threaded/yell_spec.rb +0 -101
- data/spec/yell/adapters/base_spec.rb +0 -43
- data/spec/yell/adapters/datefile_spec.rb +0 -168
- data/spec/yell/adapters/file_spec.rb +0 -84
- data/spec/yell/adapters/io_spec.rb +0 -71
- data/spec/yell/adapters/streams_spec.rb +0 -26
- data/spec/yell/adapters_spec.rb +0 -43
- data/spec/yell/configuration_spec.rb +0 -36
- data/spec/yell/dsl_spec.rb +0 -49
- data/spec/yell/event_spec.rb +0 -97
- data/spec/yell/formatter_spec.rb +0 -199
- data/spec/yell/level_spec.rb +0 -200
- data/spec/yell/loggable_spec.rb +0 -21
- data/spec/yell/logger_spec.rb +0 -290
- data/spec/yell/repository_spec.rb +0 -83
- data/spec/yell/silencer_spec.rb +0 -38
- data/spec/yell_spec.rb +0 -120
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yell::Adapters::Base do
|
4
|
-
|
5
|
-
context "initialize" do
|
6
|
-
context ":level" do
|
7
|
-
let(:level) { Yell::Level.new(:warn) }
|
8
|
-
|
9
|
-
it "should set the level" do
|
10
|
-
adapter = Yell::Adapters::Base.new(:level => level)
|
11
|
-
|
12
|
-
expect(adapter.level).to eq(level)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should set the level when block was given" do
|
16
|
-
adapter = Yell::Adapters::Base.new { |a| a.level = level }
|
17
|
-
|
18
|
-
expect(adapter.level).to eq(level)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "#write" do
|
24
|
-
let(:logger) { Yell::Logger.new }
|
25
|
-
let(:adapter) { Yell::Adapters::Base.new(:level => 1) }
|
26
|
-
|
27
|
-
it "should delegate :event to :write!" do
|
28
|
-
event = Yell::Event.new(logger, 1, "Hello World!")
|
29
|
-
expect(adapter).to receive(:write!).with(event)
|
30
|
-
|
31
|
-
adapter.write(event)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should not write when event does not have the right level" do
|
35
|
-
event = Yell::Event.new(logger, 0, "Hello World!")
|
36
|
-
expect(adapter).to_not receive(:write!)
|
37
|
-
|
38
|
-
adapter.write(event)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
@@ -1,168 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yell::Adapters::Datefile do
|
4
|
-
let(:logger) { Yell::Logger.new }
|
5
|
-
let(:message) { "Hello World" }
|
6
|
-
let(:event) { Yell::Event.new(logger, 1, message) }
|
7
|
-
|
8
|
-
let(:today) { Time.now }
|
9
|
-
let(:tomorrow) { Time.now + 86400 }
|
10
|
-
|
11
|
-
let(:filename) { fixture_path + '/test.log' }
|
12
|
-
let(:today_filename) { fixture_path + "/test.#{today.strftime(Yell::Adapters::Datefile::DefaultDatePattern)}.log" }
|
13
|
-
let(:tomorrow_filename) { fixture_path + "/test.#{tomorrow.strftime(Yell::Adapters::Datefile::DefaultDatePattern)}.log" }
|
14
|
-
|
15
|
-
let(:adapter) { Yell::Adapters::Datefile.new(:filename => filename, :format => "%m") }
|
16
|
-
|
17
|
-
before do
|
18
|
-
Timecop.freeze(today)
|
19
|
-
end
|
20
|
-
|
21
|
-
it { should be_kind_of Yell::Adapters::File }
|
22
|
-
|
23
|
-
describe "#write" do
|
24
|
-
let(:today_lines) { File.readlines(today_filename) }
|
25
|
-
|
26
|
-
before do
|
27
|
-
adapter.write(event)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should be output to filename with date pattern" do
|
31
|
-
expect(File.exist?(today_filename)).to be_truthy
|
32
|
-
|
33
|
-
expect(today_lines.size).to eq(2) # includes header line
|
34
|
-
expect(today_lines.last).to match(message)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should output to the same file" do
|
38
|
-
adapter.write(event)
|
39
|
-
|
40
|
-
expect(File.exist?(today_filename)).to be_truthy
|
41
|
-
expect(today_lines.size).to eq(3) # includes header line
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should not open file handle again" do
|
45
|
-
expect(File).to_not receive(:open)
|
46
|
-
|
47
|
-
adapter.write(event)
|
48
|
-
end
|
49
|
-
|
50
|
-
context "on rollover" do
|
51
|
-
let(:tomorrow_lines) { File.readlines(tomorrow_filename) }
|
52
|
-
|
53
|
-
before do
|
54
|
-
Timecop.freeze(tomorrow) { adapter.write(event) }
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should rotate file" do
|
58
|
-
expect(File.exist?(tomorrow_filename)).to be_truthy
|
59
|
-
|
60
|
-
expect(tomorrow_lines.size).to eq(2) # includes header line
|
61
|
-
expect(tomorrow_lines.last).to match(message)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe "#keep" do
|
67
|
-
before do
|
68
|
-
adapter.symlink = false # to not taint the Dir
|
69
|
-
adapter.keep = 2
|
70
|
-
|
71
|
-
adapter.write(event)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should keep the specified number or files upon rollover" do
|
75
|
-
expect(Dir[fixture_path + '/*.log'].size).to eq(1)
|
76
|
-
|
77
|
-
Timecop.freeze(tomorrow) { adapter.write(event) }
|
78
|
-
expect(Dir[fixture_path + '/*.log'].size).to eq(2)
|
79
|
-
|
80
|
-
Timecop.freeze(tomorrow + 86400 ) { adapter.write(event) }
|
81
|
-
expect(Dir[fixture_path + '/*.log'].size).to eq(2)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
describe "#symlink" do
|
86
|
-
context "when true (default)" do
|
87
|
-
before do
|
88
|
-
adapter.write(event)
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should be created on the original filename" do
|
92
|
-
expect(File.symlink?(filename)).to be_truthy
|
93
|
-
expect(File.readlink(filename)).to eq(today_filename)
|
94
|
-
end
|
95
|
-
|
96
|
-
it "should be recreated upon rollover" do
|
97
|
-
Timecop.freeze(tomorrow) { adapter.write(event) }
|
98
|
-
|
99
|
-
expect(File.symlink?(filename)).to be_truthy
|
100
|
-
expect(File.readlink(filename)).to eq(tomorrow_filename)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "when false" do
|
105
|
-
before do
|
106
|
-
adapter.symlink = false
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should not create the sylink the original filename" do
|
110
|
-
adapter.write( event )
|
111
|
-
|
112
|
-
expect(File.symlink?(filename)).to be_falsey
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
describe "#header" do
|
118
|
-
let(:header) { File.open(today_filename, &:readline) }
|
119
|
-
|
120
|
-
context "when true (default)" do
|
121
|
-
before do
|
122
|
-
adapter.write(event)
|
123
|
-
end
|
124
|
-
|
125
|
-
it "should be written" do
|
126
|
-
expect(header).to match(Yell::Adapters::Datefile::HeaderRegexp)
|
127
|
-
end
|
128
|
-
|
129
|
-
it "should be rewritten upon rollover" do
|
130
|
-
Timecop.freeze(tomorrow) { adapter.write(event) }
|
131
|
-
|
132
|
-
expect(File.symlink?(filename)).to be_truthy
|
133
|
-
expect(File.readlink(filename)).to eq(tomorrow_filename)
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context "when false" do
|
138
|
-
before do
|
139
|
-
adapter.header = false
|
140
|
-
end
|
141
|
-
|
142
|
-
it "should not be written" do
|
143
|
-
adapter.write(event)
|
144
|
-
|
145
|
-
expect(header).to eq("Hello World\n")
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
context "another adapter with the same :filename" do
|
151
|
-
let(:another_adapter) { Yell::Adapters::Datefile.new(:filename => filename) }
|
152
|
-
|
153
|
-
before do
|
154
|
-
adapter.write(event)
|
155
|
-
end
|
156
|
-
|
157
|
-
it "should not write the header again" do
|
158
|
-
another_adapter.write(event)
|
159
|
-
|
160
|
-
# 1: header
|
161
|
-
# 2: adapter write
|
162
|
-
# 3: another_adapter: write
|
163
|
-
expect(File.readlines(today_filename).size).to eq(3)
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
end
|
168
|
-
|
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yell::Adapters::File do
|
4
|
-
let(:devnull) { File.new('/dev/null', 'w') }
|
5
|
-
|
6
|
-
before do
|
7
|
-
allow(File).to receive(:open) { devnull }
|
8
|
-
end
|
9
|
-
|
10
|
-
it { should be_kind_of(Yell::Adapters::Io) }
|
11
|
-
|
12
|
-
context "#stream" do
|
13
|
-
subject { Yell::Adapters::File.new.send(:stream) }
|
14
|
-
|
15
|
-
it { should be_kind_of(File) }
|
16
|
-
end
|
17
|
-
|
18
|
-
context "#write" do
|
19
|
-
let(:logger) { Yell::Logger.new }
|
20
|
-
let(:event) { Yell::Event.new(logger, 1, "Hello World") }
|
21
|
-
|
22
|
-
context "default filename" do
|
23
|
-
let(:filename) { File.expand_path "#{Yell.env}.log" }
|
24
|
-
let(:adapter) { Yell::Adapters::File.new }
|
25
|
-
|
26
|
-
it "should print to file" do
|
27
|
-
expect(File).to(
|
28
|
-
receive(:open).
|
29
|
-
with(filename, File::WRONLY|File::APPEND|File::CREAT) { devnull }
|
30
|
-
)
|
31
|
-
|
32
|
-
adapter.write(event)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "with given :filename" do
|
37
|
-
let(:filename) { fixture_path + '/filename.log' }
|
38
|
-
let(:adapter) { Yell::Adapters::File.new(:filename => filename) }
|
39
|
-
|
40
|
-
it "should print to file" do
|
41
|
-
expect(File).to(
|
42
|
-
receive(:open).
|
43
|
-
with(filename, File::WRONLY|File::APPEND|File::CREAT) { devnull }
|
44
|
-
)
|
45
|
-
|
46
|
-
adapter.write(event)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "with given :pathname" do
|
51
|
-
let(:pathname) { Pathname.new(fixture_path).join('filename.log') }
|
52
|
-
let(:adapter) { Yell::Adapters::File.new( :filename => pathname ) }
|
53
|
-
|
54
|
-
it "should accept pathanme as filename" do
|
55
|
-
expect(File).to(
|
56
|
-
receive(:open).
|
57
|
-
with(pathname.to_s, File::WRONLY|File::APPEND|File::CREAT) { devnull }
|
58
|
-
)
|
59
|
-
|
60
|
-
adapter.write(event)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context "#sync" do
|
65
|
-
let(:adapter) { Yell::Adapters::File.new }
|
66
|
-
|
67
|
-
it "should sync by default" do
|
68
|
-
expect(devnull).to receive(:sync=).with(true)
|
69
|
-
|
70
|
-
adapter.write(event)
|
71
|
-
end
|
72
|
-
|
73
|
-
it "pass the option to File" do
|
74
|
-
adapter.sync = false
|
75
|
-
|
76
|
-
expect(devnull).to receive(:sync=).with(false)
|
77
|
-
|
78
|
-
adapter.write(event)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
|
-
|
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yell::Adapters::Io do
|
4
|
-
it { should be_kind_of Yell::Adapters::Base }
|
5
|
-
|
6
|
-
context "initialize" do
|
7
|
-
it "should set default :format" do
|
8
|
-
adapter = Yell::Adapters::Io.new
|
9
|
-
|
10
|
-
expect(adapter.format).to be_kind_of(Yell::Formatter)
|
11
|
-
end
|
12
|
-
|
13
|
-
context ":level" do
|
14
|
-
let(:level) { Yell::Level.new(:warn) }
|
15
|
-
|
16
|
-
it "should set the level" do
|
17
|
-
adapter = Yell::Adapters::Io.new(:level => level)
|
18
|
-
|
19
|
-
expect(adapter.level).to eq(level)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should set the level when block was given" do
|
23
|
-
adapter = Yell::Adapters::Io.new { |a| a.level = level }
|
24
|
-
|
25
|
-
expect(adapter.level).to eq(level)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context ":format" do
|
30
|
-
let(:format) { Yell::Formatter.new }
|
31
|
-
|
32
|
-
it "should set the level" do
|
33
|
-
adapter = Yell::Adapters::Io.new(:format => format)
|
34
|
-
|
35
|
-
expect(adapter.format).to eq(format)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should set the level when block was given" do
|
39
|
-
adapter = Yell::Adapters::Io.new { |a| a.format = format }
|
40
|
-
|
41
|
-
expect(adapter.format).to eq(format)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "#write" do
|
47
|
-
let(:logger) { Yell::Logger.new }
|
48
|
-
let(:event) { Yell::Event.new(logger, 1, "Hello World") }
|
49
|
-
let(:adapter) { Yell::Adapters::Io.new }
|
50
|
-
let(:stream) { File.new('/dev/null', 'w') }
|
51
|
-
|
52
|
-
before do
|
53
|
-
allow(adapter).to receive(:stream) { stream }
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should format the message" do
|
57
|
-
expect(adapter.format).to(
|
58
|
-
receive(:call).with(event).and_call_original
|
59
|
-
)
|
60
|
-
|
61
|
-
adapter.write(event)
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should print formatted message to stream" do
|
65
|
-
formatted = Yell::Formatter.new.call(event)
|
66
|
-
expect(stream).to receive(:syswrite).with(formatted)
|
67
|
-
|
68
|
-
adapter.write(event)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yell::Adapters::Stdout do
|
4
|
-
|
5
|
-
it { should be_kind_of(Yell::Adapters::Io) }
|
6
|
-
|
7
|
-
context "#stream" do
|
8
|
-
subject { Yell::Adapters::Stdout.new.send :stream }
|
9
|
-
|
10
|
-
it { should be_kind_of(IO) }
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
describe Yell::Adapters::Stderr do
|
16
|
-
|
17
|
-
it { should be_kind_of(Yell::Adapters::Io) }
|
18
|
-
|
19
|
-
context "#stream" do
|
20
|
-
subject { Yell::Adapters::Stderr.new.send(:stream) }
|
21
|
-
|
22
|
-
it { should be_kind_of(IO) }
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
|
data/spec/yell/adapters_spec.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yell::Adapters do
|
4
|
-
|
5
|
-
context ".new" do
|
6
|
-
it "should accept an adapter instance" do
|
7
|
-
stdout = Yell::Adapters::Stdout.new
|
8
|
-
adapter = Yell::Adapters.new(stdout)
|
9
|
-
|
10
|
-
expect(adapter).to eq(stdout)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should accept STDOUT" do
|
14
|
-
expect(Yell::Adapters::Stdout).to receive(:new).with(anything)
|
15
|
-
|
16
|
-
Yell::Adapters.new(STDOUT)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should accept STDERR" do
|
20
|
-
expect(Yell::Adapters::Stderr).to receive(:new).with(anything)
|
21
|
-
|
22
|
-
Yell::Adapters.new(STDERR)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should raise an unregistered adapter" do
|
26
|
-
expect {
|
27
|
-
Yell::Adapters.new(:unknown)
|
28
|
-
}.to raise_error(Yell::AdapterNotFound)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context ".register" do
|
33
|
-
let(:type) { :test }
|
34
|
-
let(:klass) { double }
|
35
|
-
|
36
|
-
it "should allow to being called from :new" do
|
37
|
-
Yell::Adapters.register(type, klass)
|
38
|
-
expect(klass).to receive(:new).with(anything)
|
39
|
-
|
40
|
-
Yell::Adapters.new(type)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Yell::Configuration do
|
4
|
-
|
5
|
-
describe ".load!" do
|
6
|
-
let(:file) { fixture_path + '/yell.yml' }
|
7
|
-
let(:config) { Yell::Configuration.load!(file) }
|
8
|
-
|
9
|
-
subject { config }
|
10
|
-
|
11
|
-
it { should be_kind_of(Hash) }
|
12
|
-
it { should have_key(:level) }
|
13
|
-
it { should have_key(:adapters) }
|
14
|
-
|
15
|
-
context ":level" do
|
16
|
-
subject { config[:level] }
|
17
|
-
|
18
|
-
it { should eq("info") }
|
19
|
-
end
|
20
|
-
|
21
|
-
context ":adapters" do
|
22
|
-
subject { config[:adapters] }
|
23
|
-
|
24
|
-
it { should be_kind_of(Array) }
|
25
|
-
|
26
|
-
# stdout
|
27
|
-
it { expect(subject.first).to eq(:stdout) }
|
28
|
-
|
29
|
-
# stderr
|
30
|
-
it { expect(subject.last).to be_kind_of(Hash) }
|
31
|
-
it { expect(subject.last).to eq(:stderr => {:level => 'gte.error'}) }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|