rack-commonlogger 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5bdcd1f39f69551ac79ace49c6185f25845e3923
4
+ data.tar.gz: 4d1782eda0d67ce0705584f1dcec75490d5bb1b7
5
+ SHA512:
6
+ metadata.gz: 2529cb7b0525536e74b9ed1ef33ff5bbb37e838abec9f348ba796e777baaf2f7d5a4b23c01be13c01d016e773563602af5904248462512f48421165200d97a6b
7
+ data.tar.gz: 110beaaa8862dd4c990046f126b20ee99052f965ab500d8ff7a39c267ca8dfb909c1e1b182474b5a4464962ff1e3eb02e61b9e9c38acfb1cd0001121f23bc48b
@@ -0,0 +1,3 @@
1
+ module Rack
2
+ require_relative "rack/commonlogger"
3
+ end
@@ -0,0 +1,71 @@
1
+ module Rack
2
+ # Rack::CommonLogger forwards every request to the given +app+, and
3
+ # logs a line in the
4
+ # {Apache common log format}[http://httpd.apache.org/docs/1.3/logs.html#common]
5
+ # to the +logger+.
6
+ #
7
+ # If +logger+ is nil, CommonLogger will fall back +rack.errors+, which is
8
+ # an instance of Rack::NullLogger.
9
+ #
10
+ # +logger+ can be any class, including the standard library Logger, and is
11
+ # expected to have either +write+ or +<<+ method, which accepts the CommonLogger::FORMAT.
12
+ # According to the SPEC, the error stream must also respond to +puts+
13
+ # (which takes a single argument that responds to +to_s+), and +flush+
14
+ # (which is called without arguments in order to make the error appear for
15
+ # sure)
16
+ module CommonLogger
17
+ require_relative "commonlogger/version"
18
+ # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
19
+ #
20
+ # lilith.local - - [07/Aug/2006 23:58:02 -0400] "GET / HTTP/1.1" 500 -
21
+ #
22
+ # %{%s - %s [%s] "%s %s%s %s" %d %s\n} %
23
+ FORMAT = %{%s - %s [%s] "%s %s%s %s" %d %s %0.4f\n}
24
+
25
+ def initialize(app, logger = nil)
26
+ @app = app
27
+ @logger = logger
28
+ end
29
+
30
+ def call(env)
31
+ began_at = Time.now
32
+ status, header, body = @app.call(env)
33
+ header = Utils::HeaderHash.new(header)
34
+ body = BodyProxy.new(body) { log(env, status, header, began_at) }
35
+ [status, header, body]
36
+ end
37
+
38
+ private
39
+
40
+ def log(env, status, header, began_at)
41
+ now = Time.now
42
+ length = extract_content_length(header)
43
+
44
+ msg = FORMAT % [
45
+ env['HTTP_X_FORWARDED_FOR'] || env["REMOTE_ADDR"] || "-",
46
+ env["REMOTE_USER"] || "-",
47
+ now.strftime("%d/%b/%Y:%H:%M:%S %z"),
48
+ env[REQUEST_METHOD],
49
+ env[PATH_INFO],
50
+ env[QUERY_STRING].empty? ? "" : "?"+env[QUERY_STRING],
51
+ env["HTTP_VERSION"],
52
+ status.to_s[0..3],
53
+ length,
54
+ now - began_at ]
55
+
56
+ logger = @logger || env['rack.errors']
57
+ # Standard library logger doesn't support write but it supports << which actually
58
+ # calls to write on the log device without formatting
59
+ if logger.respond_to?(:write)
60
+ logger.write(msg)
61
+ else
62
+ logger << msg
63
+ end
64
+ end
65
+
66
+ def extract_content_length(headers)
67
+ value = headers[CONTENT_LENGTH] or return '-'
68
+ value.to_s == '0' ? '-' : value
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,5 @@
1
+ module Rack
2
+ module CommonLogger
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+
3
+ describe Rack::CommonLogger do
4
+ let(:application) { instance_double("Application") }
5
+ let(:middleware) { described_class.new(application) }
6
+ let(:verb) { "GET" }
7
+ let(:status) { 200 }
8
+ let(:headers) do
9
+ {
10
+ "REQUEST_METHOD" => verb,
11
+ "Content-Type" => "text/plain",
12
+ "Content-Length" => "0"
13
+ }
14
+ end
15
+ let(:body) { "" }
16
+
17
+ before(:each) do
18
+ allow(application).to receive(:call).and_return([status, headers, body])
19
+ end
20
+
21
+ describe "#call" do
22
+
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ describe Rack::CommonLogger::VERSION do
4
+ it "should be a string" do
5
+ expect(Rack::CommonLogger::VERSION).to be_kind_of(String)
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require "pry"
5
+ require "rspec"
6
+ require "rack/commonlogger"
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-commonlogger
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kurtis Rainbolt-Greene
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-doc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: codeclimate-test-reporter
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.4'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.4'
97
+ description: Writes commonlogger to responses
98
+ email:
99
+ - me@kurtisrainboltgreene.name
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - lib/rack-commonlogger.rb
105
+ - lib/rack/commonlogger.rb
106
+ - lib/rack/commonlogger/version.rb
107
+ - spec/lib/rack/commonlogger.rb
108
+ - spec/lib/rack/commonlogger/version_spec.rb
109
+ - spec/spec_helper.rb
110
+ homepage: http://krainboltgreene.github.io/rack-commonlogger
111
+ licenses:
112
+ - MIT
113
+ metadata: {}
114
+ post_install_message:
115
+ rdoc_options: []
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ requirements: []
129
+ rubyforge_project:
130
+ rubygems_version: 2.2.2
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: Writes commonlogger to responses
134
+ test_files:
135
+ - spec/lib/rack/commonlogger/version_spec.rb
136
+ - spec/lib/rack/commonlogger.rb
137
+ - spec/spec_helper.rb
138
+ has_rdoc: