rack-logs 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ Ignored
2
+
3
+
4
+
5
+
6
+ Much log, such information
@@ -0,0 +1 @@
1
+ LOG ENTRY 1234
@@ -0,0 +1 @@
1
+ Nothing to see here
@@ -0,0 +1,6 @@
1
+ Ignored
2
+
3
+
4
+
5
+
6
+ Other log, such information
@@ -0,0 +1 @@
1
+ LOG ENTRY 5678
@@ -22,4 +22,14 @@ describe 'Rack::Logs::Config' do
22
22
  expect(config.pattern).to eq '*.doge'
23
23
  end
24
24
  end
25
+
26
+ describe '#lines' do
27
+ it 'defaults to 200' do
28
+ expect(config.lines).to eq 200
29
+ end
30
+ it 'is configurable' do
31
+ config.lines = 300
32
+ expect(config.lines).to eq 300
33
+ end
34
+ end
25
35
  end
@@ -1,8 +1,11 @@
1
- require 'fakefs/safe'
1
+ require 'timeout'
2
2
  require 'rack/logs/viewer'
3
3
 
4
4
  describe 'Rack::Logs::Viewer' do
5
- let(:config) { instance_double "Rack::Logs::Config", pattern: '*.doge', log_dir: './tmp' }
5
+ let(:config) do
6
+ instance_double "Rack::Logs::Config", lines: 5, pattern: '*.doge',
7
+ log_dir: support_path('fixtures/log')
8
+ end
6
9
 
7
10
  describe '#initialize' do
8
11
  it 'takes a configuration' do
@@ -12,30 +15,73 @@ describe 'Rack::Logs::Viewer' do
12
15
 
13
16
  describe '#call env' do
14
17
  let(:viewer) { Rack::Logs::Viewer.new config }
15
- let(:response) { viewer.call({}) }
18
+ let(:contents) { response[2].inject("") { |contents, fragment| contents + fragment } }
16
19
 
17
- before do
18
- FakeFS.activate!
19
- FileUtils.mkdir_p('./tmp')
20
- File.open('./tmp/not_log.txt','w') { |file| file.write 'Nothing to see here' }
21
- File.open('./tmp/my_log.doge','w') { |file| file.write 'Much log, such information' }
20
+ around do |example|
21
+ begin
22
+ Timeout::timeout(0.01) { example.run }
23
+ rescue Timeout::Error
24
+ fail "Performance regression, even large files should be under .01s"
25
+ end
22
26
  end
23
- after do
24
- FakeFS.deactivate!
27
+
28
+ shared_examples_for "a rack logs response" do
29
+ integer_const =
30
+ if ENV["RUBY_VERSION"].to_f >= 2.4
31
+ Integer
32
+ else
33
+ Fixnum
34
+ end
35
+
36
+ it 'returns a rack response' do
37
+ expect(response[0]).to be_a integer_const
38
+ expect(response[1]).to be_a Hash
39
+ expect(response[1].keys).to include 'Content-Type'
40
+ expect(response[2].respond_to? :each).to be true
41
+ end
42
+
43
+ it 'limits itself to the last n lines' do
44
+ expect(contents).to_not match "Ignored"
45
+ end
46
+ end
47
+
48
+ context "for all files" do
49
+ let(:response) { viewer.call({}) }
50
+
51
+ it_should_behave_like "a rack logs response"
52
+
53
+ it 'returns the contents of all the logs' do
54
+ expect(contents).to match "log/my_log\.doge\n\n"
55
+ expect(contents).to match "Much log, such information"
56
+ expect(contents).to match "log/other_log\.doge\n\n"
57
+ expect(contents).to match "Other log, such information"
58
+ end
25
59
  end
26
60
 
27
- it 'returns a rack response' do
28
- expect(response[0]).to be_a Fixnum
29
- expect(response[1]).to be_a Hash
30
- expect(response[1].keys).to include 'Content-Type'
31
- expect(response[2].respond_to? :each).to be true
61
+ context "for a file" do
62
+ let(:response) { viewer.call({ 'PATH_INFO' => '/my_log.doge' }) }
63
+
64
+ it_should_behave_like "a rack logs response"
65
+
66
+ it 'returns the contents the specific log' do
67
+ expect(contents).to match "log/my_log\.doge\n\n"
68
+ expect(contents).to match "Much log, such information"
69
+ end
70
+ it 'ignores other contents' do
71
+ expect(contents).to_not match "log/other_log\.doge\n\n"
72
+ expect(contents).to_not match "Other log, such information"
73
+ end
32
74
  end
33
- it 'returns the contents of the logs' do
34
- contents = ""
35
- response[2].each do |fragment|
36
- contents << fragment
75
+
76
+ context "for a forbidden file" do
77
+ let(:response) { viewer.call({ 'PATH_INFO' => '/../tmp/secret_file.txt' }) }
78
+
79
+ it 'returns a 404 rack response' do
80
+ expect(response[0]).to eq 404
81
+ expect(response[1]).to be_a Hash
82
+ expect(response[1].keys).to include 'Content-Type'
83
+ expect(response[2]).to eq ['No Such File']
37
84
  end
38
- expect(contents).to eq "## tmp/my_log.doge\n\nMuch log, such information"
39
85
  end
40
86
  end
41
87
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Rowe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-03 00:00:00.000000000 Z
11
+ date: 2020-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -16,44 +16,30 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.5.2
19
+ version: 2.2.3
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
- version: 1.5.2
26
+ version: 2.2.3
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: 13.0.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: 13.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: fakefs
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
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
42
+ name: bundler
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ">="
@@ -86,14 +72,14 @@ dependencies:
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 3.0.0.beta1
75
+ version: 3.9.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: 3.0.0.beta1
82
+ version: 3.9.0
97
83
  description: Simple rack based log viewer
98
84
  email:
99
85
  - hello@jonrowe.co.uk
@@ -110,12 +96,21 @@ files:
110
96
  - Rakefile
111
97
  - lib/rack-logs.rb
112
98
  - lib/rack/logs.rb
99
+ - lib/rack/logs/backport.rb
113
100
  - lib/rack/logs/config.rb
114
101
  - lib/rack/logs/version.rb
115
102
  - lib/rack/logs/viewer.rb
116
103
  - rack-logs.gemspec
104
+ - spec/integration/accessing_an_individual_log_spec.rb
117
105
  - spec/integration/running_rack_logs_via_rack_spec.rb
118
106
  - spec/spec_helper.rb
107
+ - spec/support/fixtures/log/large_log.doge
108
+ - spec/support/fixtures/log/my_log.doge
109
+ - spec/support/fixtures/log/my_log_file.log
110
+ - spec/support/fixtures/log/not_log.txt
111
+ - spec/support/fixtures/log/other_log.doge
112
+ - spec/support/fixtures/other_log_file.log
113
+ - spec/support/fixtures/tmp/secret_file.txt
119
114
  - spec/unit/rack/logs/config_spec.rb
120
115
  - spec/unit/rack/logs/viewer_spec.rb
121
116
  - spec/unit/rack/logs_spec.rb
@@ -139,14 +134,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
134
  - !ruby/object:Gem::Version
140
135
  version: '0'
141
136
  requirements: []
142
- rubyforge_project:
143
- rubygems_version: 2.2.0
137
+ rubygems_version: 3.1.3
144
138
  signing_key:
145
139
  specification_version: 4
146
140
  summary: Simple rack based log viewer
147
141
  test_files:
142
+ - spec/integration/accessing_an_individual_log_spec.rb
148
143
  - spec/integration/running_rack_logs_via_rack_spec.rb
149
144
  - spec/spec_helper.rb
145
+ - spec/support/fixtures/log/large_log.doge
146
+ - spec/support/fixtures/log/my_log.doge
147
+ - spec/support/fixtures/log/my_log_file.log
148
+ - spec/support/fixtures/log/not_log.txt
149
+ - spec/support/fixtures/log/other_log.doge
150
+ - spec/support/fixtures/other_log_file.log
151
+ - spec/support/fixtures/tmp/secret_file.txt
150
152
  - spec/unit/rack/logs/config_spec.rb
151
153
  - spec/unit/rack/logs/viewer_spec.rb
152
154
  - spec/unit/rack/logs_spec.rb