jersey 0.0.3

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.
@@ -0,0 +1,39 @@
1
+ # Need this so we load up .env.test
2
+ ENV['RACK_ENV'] = 'test'
3
+
4
+ # Requies all the Gems
5
+ require_relative '../lib/jersey'
6
+ Jersey.setup
7
+
8
+ # require test runner
9
+ require 'minitest/autorun'
10
+ require 'minitest/pride' # :)
11
+
12
+ # load the test helpers
13
+ # Dir["./test/helpers/**/*.rb"].sort.each { |f| require f }
14
+
15
+ module JsonHelpers
16
+ def json; JSON.parse(last_response.body); end
17
+ end
18
+
19
+ class UnitTest < Minitest::Test
20
+ def setup
21
+ super
22
+ Jersey.logger.reset!
23
+ Jersey.logger.stream = StringIO.new unless ENV['LOG']
24
+ end
25
+
26
+ def logs
27
+ Jersey.logger.stream.string
28
+ end
29
+ end
30
+
31
+ class ApiTest < UnitTest
32
+ include Rack::Test::Methods
33
+ include JsonHelpers
34
+
35
+ # default app method to return an app named `App`
36
+ def app
37
+ self.class.const_get(:App)
38
+ end
39
+ end
@@ -0,0 +1,55 @@
1
+ require 'helper'
2
+
3
+ class LogTest < UnitTest
4
+ def setup
5
+ super
6
+ Jersey.logger.stream = StringIO.new
7
+ end
8
+
9
+ def test_log_json
10
+ logger = Jersey::JSONLogger.new(stream: StringIO.new)
11
+ logger.log(foo: "bar")
12
+ logdata = JSON.parse(logger.stream.string)
13
+ assert_equal('bar', logdata['foo'])
14
+ end
15
+
16
+ def test_log_nothing_logs_time
17
+ Jersey.log()
18
+ logdata = Logfmt.parse(logs)
19
+ assert(logdata['now'], 'must log time')
20
+ end
21
+
22
+ def test_log_hash
23
+ Jersey.log(foo: 'bar')
24
+ logdata = Logfmt.parse(logs)
25
+ assert_equal('bar', logdata['foo'])
26
+ assert(logdata['now'], 'must log time')
27
+ end
28
+
29
+ def test_log_error
30
+ begin
31
+ raise "boom!"
32
+ rescue => e
33
+ Jersey.log(e)
34
+ loglines = logs.lines
35
+ logdata = Logfmt.parse(loglines[0])
36
+ assert_equal('boom!', logdata['message'])
37
+ assert_equal(e.object_id, logdata['id'])
38
+ assert(logdata['now'], 'must log time')
39
+
40
+ logdata = Logfmt.parse(loglines[1])
41
+ assert_equal(1, logdata['line_number'])
42
+ assert_equal(e.object_id, logdata['id'])
43
+
44
+ logdata = Logfmt.parse(loglines[2])
45
+ assert_equal(2, logdata['line_number'])
46
+ assert_equal(e.object_id, logdata['id'])
47
+
48
+ logdata = Logfmt.parse(loglines.last)
49
+ assert_equal(10, logdata['line_number'])
50
+ assert_equal(e.object_id, logdata['id'])
51
+
52
+ assert_equal(11, loglines.size)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,161 @@
1
+ require 'helper'
2
+
3
+ class RequestLoggerTest < ApiTest
4
+ class App < Sinatra::Base
5
+ use Jersey::Middleware::RequestLogger
6
+
7
+ get('/get') { 'OK' }
8
+ post('/') { 'OK' }
9
+ put('/') { status(201); 'OK' }
10
+ delete('/') { 'OK' }
11
+ end
12
+
13
+ def setup
14
+ super
15
+ Jersey.logger.stream = StringIO.new
16
+ end
17
+
18
+ def test_logs_GET_request_method_path_and_time
19
+ get '/get'
20
+ loglines = logs.lines
21
+ logdata = Logfmt.parse(loglines[0])
22
+ assert_equal('start', logdata['at'])
23
+ assert_equal('GET', logdata['method'])
24
+ assert_equal('/get', logdata['path'])
25
+ assert(logdata['now'], 'must log time')
26
+
27
+ logdata = Logfmt.parse(loglines[1])
28
+ assert_equal('finish', logdata['at'])
29
+ assert_equal('GET', logdata['method'])
30
+ assert_equal('/get', logdata['path'])
31
+ assert_equal(200, logdata['status'])
32
+ assert_equal(2, logdata['content_length'])
33
+ assert(logdata['now'], 'must log time')
34
+ assert(logdata['elapsed'], 'must log duration')
35
+ end
36
+
37
+ def test_logs_POST_request_method_path_and_time
38
+ post '/'
39
+ logdata = Logfmt.parse(logs.lines[0])
40
+ assert_equal('POST', logdata['method'])
41
+ assert_equal('/', logdata['path'])
42
+ end
43
+
44
+ def test_logs_PUT_request_method_path_and_time
45
+ put '/'
46
+ logdata = Logfmt.parse(logs.lines[0])
47
+ assert_equal('PUT', logdata['method'])
48
+
49
+ logdata = Logfmt.parse(logs.lines[1])
50
+ assert_equal('PUT', logdata['method'])
51
+ assert_equal(201, logdata['status'])
52
+ end
53
+ end
54
+
55
+ class RequestLoggerWithRequestIDsTest < ApiTest
56
+ class App < Sinatra::Base
57
+ use RequestStore::Middleware
58
+ use Jersey::Middleware::RequestID
59
+ use Jersey::Middleware::RequestLogger
60
+
61
+ get('/') do
62
+ Jersey.log(at: 'mid-request')
63
+ 'OK'
64
+ end
65
+ end
66
+
67
+ def setup
68
+ super
69
+ Jersey.logger.stream = StringIO.new
70
+ end
71
+
72
+ # Testing a few things here
73
+ def test_logs_request_id
74
+ get '/'
75
+ loglines = logs.lines
76
+
77
+ logdata = Logfmt.parse(loglines[0])
78
+ request_id = logdata['request_id']
79
+ assert_equal('start', logdata['at'])
80
+ assert(request_id, 'must log request id')
81
+
82
+ logdata = Logfmt.parse(loglines[1])
83
+ assert_equal('mid-request', logdata['at'])
84
+ assert_equal(request_id, logdata['request_id'])
85
+
86
+ logdata = Logfmt.parse(loglines[2])
87
+ assert_equal('finish', logdata['at'])
88
+ assert_equal(request_id, logdata['request_id'])
89
+
90
+ end
91
+
92
+
93
+ def test_doesnt_persist_request_id
94
+ get '/'
95
+ logdata = Logfmt.parse(logs.lines[0])
96
+ request_id = logdata['request_id']
97
+
98
+ Jersey.log(foo: 'bar')
99
+ logdata = Logfmt.parse(logs.lines.last)
100
+ assert_equal('bar', logdata['foo'])
101
+ refute(logdata['request_id'], 'should not have request id')
102
+ end
103
+
104
+ def test_doesnt_clear_everything
105
+ Jersey.logger << {app_name: 'hotness'}
106
+ get '/'
107
+ logdata = Logfmt.parse(logs.lines[0])
108
+ assert_equal('hotness', logdata['app_name'])
109
+
110
+ get '/'
111
+ logdata = Logfmt.parse(logs.lines[3])
112
+ assert_equal('hotness', logdata['app_name'])
113
+ end
114
+ end
115
+
116
+ class RequestLoggerNoRequestStore < ApiTest
117
+ class App < Sinatra::Base
118
+ use Jersey::Middleware::RequestID
119
+ use Jersey::Middleware::RequestLogger
120
+
121
+ get('/') do
122
+ Jersey.log(at: 'mid-request')
123
+ 'OK'
124
+ end
125
+ end
126
+
127
+ def setup
128
+ super
129
+ Jersey.logger.stream = StringIO.new
130
+ end
131
+
132
+ # Testing a few things here
133
+ def test_logs_request_id
134
+ get '/'
135
+ loglines = logs.lines
136
+
137
+ logdata = Logfmt.parse(loglines[0])
138
+ request_id = logdata['request_id']
139
+ assert_equal('start', logdata['at'])
140
+ assert(request_id, 'must log request id')
141
+
142
+ logdata = Logfmt.parse(loglines[1])
143
+ assert_equal('mid-request', logdata['at'])
144
+ assert_equal(request_id, logdata['request_id'])
145
+
146
+ logdata = Logfmt.parse(loglines[2])
147
+ assert_equal('finish', logdata['at'])
148
+ assert_equal(request_id, logdata['request_id'])
149
+ end
150
+
151
+ def test_doesnt_persist_request_id
152
+ get '/'
153
+ logdata = Logfmt.parse(logs.lines[0])
154
+ request_id = logdata['request_id']
155
+
156
+ Jersey.log(foo: 'bar')
157
+ logdata = Logfmt.parse(logs.lines.last)
158
+ assert_equal('bar', logdata['foo'])
159
+ refute(logdata['request_id'], 'should not have request id')
160
+ end
161
+ end
@@ -0,0 +1,13 @@
1
+ require 'helper'
2
+
3
+ class SetupTest < UnitTest
4
+ def test_time_zone
5
+ t = Time.now
6
+ assert_equal('UTC', t.zone)
7
+ end
8
+
9
+ def test_time_to_s
10
+ t = Time.now
11
+ assert_equal(t.iso8601, t.to_s)
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jersey
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - csquared
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinatra-contrib
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: env-conf
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
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: request_store
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ description: Set of composable middleware and helpers for production sinatra APIs
98
+ email:
99
+ - christopher.continanza@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - Gemfile
106
+ - LICENSE.txt
107
+ - README.md
108
+ - Rakefile
109
+ - examples/readme.ru
110
+ - jersey.gemspec
111
+ - lib/jersey.rb
112
+ - lib/jersey/api.rb
113
+ - lib/jersey/base.rb
114
+ - lib/jersey/extensions/error_handler.rb
115
+ - lib/jersey/extensions/route_signature.rb
116
+ - lib/jersey/helpers/log.rb
117
+ - lib/jersey/http_errors.rb
118
+ - lib/jersey/log.rb
119
+ - lib/jersey/logging/base_logger.rb
120
+ - lib/jersey/logging/json_logger.rb
121
+ - lib/jersey/logging/logfmt_logger.rb
122
+ - lib/jersey/logging/mixins.rb
123
+ - lib/jersey/middleware/request_id.rb
124
+ - lib/jersey/middleware/request_logger.rb
125
+ - lib/jersey/setup.rb
126
+ - lib/jersey/time.rb
127
+ - lib/jersey/version.rb
128
+ - test/errors_test.rb
129
+ - test/helper.rb
130
+ - test/log_test.rb
131
+ - test/request_logger_test.rb
132
+ - test/setup_test.rb
133
+ homepage: ''
134
+ licenses:
135
+ - MIT
136
+ metadata: {}
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.2.0
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: Write APIs in the New Jersey Style
157
+ test_files:
158
+ - test/errors_test.rb
159
+ - test/helper.rb
160
+ - test/log_test.rb
161
+ - test/request_logger_test.rb
162
+ - test/setup_test.rb