request_headers_logger 0.0.4 → 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 +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +3 -9
- data/README.md +7 -8
- data/lib/request_headers_logger.rb +3 -8
- data/lib/request_headers_logger/configuration.rb +0 -2
- data/lib/request_headers_logger/delayed_job/request_header_delayed_plugin.rb +0 -11
- data/lib/request_headers_logger/message_queue/message_queue_plugin.rb +0 -9
- data/lib/request_headers_logger/railtie.rb +13 -0
- data/lib/request_headers_logger/text_formatter.rb +13 -2
- data/lib/request_headers_logger/version.rb +1 -1
- data/spec/configuration_spec.rb +0 -8
- data/spec/text_formatter_spec.rb +70 -24
- metadata +17 -19
- data/Gemfile.lock +0 -80
- data/bin/travis +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e7b41746047401b957cc85417b20f911cde79f6ae69ba703ec582941965c1650
|
4
|
+
data.tar.gz: 613329a86a1352f39f01a5a815d56813ccc7c1bf186c60610f4371f8895b8ce2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 512d286d34c872bb01134c8e1b5f55a793c9db473b57c1d3227a110d525ea1ada3c167619ab2445beea4a3945e8e616ab5b8e8090a5a262729b13603e708eaf8
|
7
|
+
data.tar.gz: e72953e00874b9ffa7154dd12bd04064357e43e391784022f57662bc60deb5da60c2830ef9067649ec6f3b4151f8c9f1ebacff15e1f3b0879adea7a8ae517eed
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -16,11 +16,11 @@ The gem can be used to share *RequestHeader* store items the asynchronous servic
|
|
16
16
|
|
17
17
|
So how does it work with Rails.
|
18
18
|
|
19
|
-
Add this line to your application's Gemfile:
|
19
|
+
Add this line to your application's Gemfile after the delayed job and message_queue gems:
|
20
20
|
|
21
|
-
|
21
|
+
```ruby
|
22
22
|
gem 'request_headers_logger'
|
23
|
-
|
23
|
+
```
|
24
24
|
|
25
25
|
And then execute:
|
26
26
|
|
@@ -33,11 +33,10 @@ That's it now Delayed job logs should show the *X-Request-Id* from the http requ
|
|
33
33
|
|
34
34
|
### Configure RequestHeadersLogger
|
35
35
|
|
36
|
-
```
|
37
|
-
|
36
|
+
```ruby
|
37
|
+
RequestHeadersLogger.configure do |config|
|
38
38
|
config[:logger_format] = 'json' # Options [text json] default: text
|
39
39
|
config[:tag_format] = 'key_val' # Options: [val key_val] default: val
|
40
|
-
config[:Loggers] << MessageQueue.logger # List of all loggers used.
|
41
40
|
end
|
42
41
|
```
|
43
42
|
|
@@ -45,6 +44,6 @@ end
|
|
45
44
|
|
46
45
|
Per default the delayed job plug in applies a whitelist to only filter *X-Request-Id* header from the store. To white list new flags, you can do the following.
|
47
46
|
|
48
|
-
|
47
|
+
```ruby
|
49
48
|
RequestHeadersLogger.whitelist << "customer-id".to_sym
|
50
|
-
|
49
|
+
```
|
@@ -6,6 +6,7 @@ require 'request_headers_logger/json_formatter'
|
|
6
6
|
require 'request_headers_logger/text_formatter'
|
7
7
|
require 'request_headers_logger/delayed_job/delayed_job'
|
8
8
|
require 'request_headers_logger/message_queue/message_queue'
|
9
|
+
require 'request_headers_logger/railtie' if defined?(Rails)
|
9
10
|
|
10
11
|
module RequestHeadersLogger # :nodoc:
|
11
12
|
extend self
|
@@ -34,19 +35,13 @@ module RequestHeadersLogger # :nodoc:
|
|
34
35
|
@configuration[:loggers]
|
35
36
|
end
|
36
37
|
|
37
|
-
def prepare_loggers
|
38
|
-
loggers.each do |logger|
|
39
|
-
logger_formatter logger
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
38
|
def logger_formatter(logger)
|
46
39
|
logger.formatter ||= Logger::Formatter.new
|
47
40
|
logger.formatter.extend formatter_class
|
48
41
|
end
|
49
42
|
|
43
|
+
private
|
44
|
+
|
50
45
|
def formatter_class
|
51
46
|
RequestHeadersLogger.const_get("#{log_format.capitalize}Formatter")
|
52
47
|
end
|
@@ -10,7 +10,6 @@ module RequestHeadersLogger
|
|
10
10
|
|
11
11
|
CONFIG_KEYS = [
|
12
12
|
:log_format, # [logger_format] default or json
|
13
|
-
:loggers, # [Loggers] List of all loggers used.
|
14
13
|
:tag_format, # [tag_format]
|
15
14
|
].freeze
|
16
15
|
|
@@ -20,7 +19,6 @@ module RequestHeadersLogger
|
|
20
19
|
def initialize
|
21
20
|
@configs = {
|
22
21
|
log_format: LOG_FORMATS.first,
|
23
|
-
loggers: [],
|
24
22
|
tag_format: TAG_FORMATS.first
|
25
23
|
}
|
26
24
|
end
|
@@ -13,23 +13,12 @@ module RequestHeadersLogger
|
|
13
13
|
|
14
14
|
lifecycle.before(:perform) do |worker, job|
|
15
15
|
RequestHeadersMiddleware.store = job.payload_object.instance_variable_get(:@store)
|
16
|
-
set_dj_loggers
|
17
16
|
end
|
18
17
|
|
19
18
|
lifecycle.after(:perform) do |worker, job|
|
20
19
|
RequestHeadersMiddleware.store = {}
|
21
20
|
end
|
22
21
|
end
|
23
|
-
|
24
|
-
def self.set_dj_loggers
|
25
|
-
RequestHeadersLogger.configure do |config|
|
26
|
-
loggers = [Delayed::Worker.logger]
|
27
|
-
loggers << ::Rails.logger
|
28
|
-
|
29
|
-
config[:loggers].push(loggers).flatten!.uniq!
|
30
|
-
end
|
31
|
-
RequestHeadersLogger.prepare_loggers
|
32
|
-
end
|
33
22
|
end
|
34
23
|
end
|
35
24
|
|
@@ -24,21 +24,12 @@ module RequestHeadersLogger
|
|
24
24
|
lifecycle.before(:consume) do |delivery_info, properties, payload|
|
25
25
|
store = symbolize(properties.headers)&.dig(:store) || {}
|
26
26
|
RequestHeadersMiddleware.store = store
|
27
|
-
|
28
|
-
set_mq_loggers
|
29
27
|
end
|
30
28
|
|
31
29
|
lifecycle.after(:consume) do |delivery_info, properties, payload|
|
32
30
|
RequestHeadersMiddleware.store = {}
|
33
31
|
end
|
34
32
|
end
|
35
|
-
|
36
|
-
def self.set_mq_loggers
|
37
|
-
RequestHeadersLogger.configure do |config|
|
38
|
-
config[:loggers] << MessageQueue.logger
|
39
|
-
end
|
40
|
-
RequestHeadersLogger.prepare_loggers
|
41
|
-
end
|
42
33
|
end
|
43
34
|
end
|
44
35
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RequestHeadersLogger
|
4
|
+
class Railtie < ::Rails::Railtie
|
5
|
+
config.after_initialize do
|
6
|
+
RequestHeadersLogger.logger_formatter(MessageQueue.logger) if defined?(MessageQueue)
|
7
|
+
if defined?(Delayed)
|
8
|
+
RequestHeadersLogger.logger_formatter(Delayed::Worker.logger)
|
9
|
+
RequestHeadersLogger.logger_formatter(Rails.logger)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -7,11 +7,22 @@ module RequestHeadersLogger
|
|
7
7
|
def call(severity, time, progname, msg)
|
8
8
|
format(::Logger::Formatter::Format,
|
9
9
|
severity_name(severity)[0],
|
10
|
-
|
10
|
+
format_time(time),
|
11
11
|
$PID,
|
12
12
|
severity_name(severity),
|
13
13
|
progname,
|
14
|
-
|
14
|
+
"#{tags_text}#{to_string(msg)}")
|
15
|
+
end
|
16
|
+
|
17
|
+
def format_time(time)
|
18
|
+
return format_datetime(time) if respond_to? :format_datetime
|
19
|
+
time.strftime(@datetime_format || '%Y-%m-%dT%H:%M:%S.%6N ')
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_string(msg)
|
23
|
+
return msg2str(msg) if respond_to? :format_datetime
|
24
|
+
return msg.inspect unless msg.is_a? String
|
25
|
+
msg
|
15
26
|
end
|
16
27
|
|
17
28
|
def severity_name(severity)
|
data/spec/configuration_spec.rb
CHANGED
@@ -41,21 +41,13 @@ RSpec.describe RequestHeadersLogger::Configuration do
|
|
41
41
|
it 'return text as default for log_format' do
|
42
42
|
expect(config[:log_format]).to eq('text')
|
43
43
|
end
|
44
|
-
|
45
|
-
it 'return empty array as default for loggers' do
|
46
|
-
expect(config[:loggers]).to eq([])
|
47
|
-
end
|
48
44
|
end
|
49
45
|
|
50
46
|
describe '[]=' do
|
51
47
|
it 'assign valid config keys' do
|
52
|
-
logger = Logger.new(STDOUT)
|
53
|
-
|
54
48
|
config[:log_format] = 'json'
|
55
|
-
config[:loggers] << logger
|
56
49
|
|
57
50
|
expect(config[:log_format]).to eq('json')
|
58
|
-
expect(config[:loggers].first).to eq(logger)
|
59
51
|
end
|
60
52
|
|
61
53
|
it 'raise an error for invalid configs ' do
|
data/spec/text_formatter_spec.rb
CHANGED
@@ -4,42 +4,88 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
RSpec.describe RequestHeadersLogger::TextFormatter do
|
6
6
|
let(:buffer) { StringIO.new }
|
7
|
-
let(:logger) do
|
8
|
-
logger = Logger.new(buffer)
|
9
|
-
logger.progname = 'dummy'
|
10
|
-
logger.formatter = Logger::Formatter.new
|
11
|
-
logger.formatter.extend RequestHeadersLogger::TextFormatter
|
12
|
-
logger
|
13
|
-
end
|
14
7
|
|
15
|
-
|
16
|
-
logger
|
8
|
+
context 'Using a Logger::Formatter' do
|
9
|
+
let(:logger) do
|
10
|
+
logger = Logger.new(buffer)
|
11
|
+
logger.progname = 'dummy'
|
12
|
+
logger.formatter = Logger::Formatter.new
|
13
|
+
logger.formatter.extend RequestHeadersLogger::TextFormatter
|
14
|
+
logger
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
it 'output logs in a text format' do
|
18
|
+
logger.info('text log message')
|
20
19
|
|
21
|
-
|
22
|
-
before do
|
23
|
-
RequestHeadersMiddleware.store = { 'X-Request-Id': 'ef382618', 'tag': 'SSS' }
|
20
|
+
expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: text log message$/)
|
24
21
|
end
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
context 'store has some tags' do
|
24
|
+
before do
|
25
|
+
RequestHeadersMiddleware.store = { 'X-Request-Id': 'ef382618', 'tag': 'SSS' }
|
26
|
+
end
|
27
|
+
|
28
|
+
after do
|
29
|
+
RequestHeadersMiddleware.store = {}
|
30
|
+
RequestHeadersLogger.configure { |c| c[:tag_format] = 'val' }
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'output tags with key_val formmat' do
|
34
|
+
RequestHeadersLogger.configure { |c| c[:tag_format] = 'key_val' }
|
35
|
+
logger.info('text log message')
|
36
|
+
output = buffer.string
|
37
|
+
|
38
|
+
expect(output).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[X-Request-Id: ef382618\] text log message$/)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'include tags in the log line' do
|
42
|
+
logger.info('text log message')
|
43
|
+
|
44
|
+
expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[ef382618\] text log message$/)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'Using a Proc' do
|
50
|
+
let(:logger) do
|
51
|
+
logger = Logger.new(buffer)
|
52
|
+
logger.progname = 'dummy'
|
53
|
+
# rubocop:disable Metrics/LineLength
|
54
|
+
logger.formatter = proc { |severity, datetime, progname, msg| "[#{datetime} ##{Process.pid}] #{severity}: #{msg}\n" }
|
55
|
+
# rubocop:enable Metrics/LineLength
|
56
|
+
logger.formatter.extend RequestHeadersLogger::TextFormatter
|
57
|
+
logger
|
29
58
|
end
|
30
59
|
|
31
|
-
it 'output
|
32
|
-
RequestHeadersLogger.configure { |c| c[:tag_format] = 'key_val' }
|
60
|
+
it 'output logs in a text format' do
|
33
61
|
logger.info('text log message')
|
34
|
-
output = buffer.string
|
35
62
|
|
36
|
-
expect(
|
63
|
+
expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: text log message$/)
|
37
64
|
end
|
38
65
|
|
39
|
-
|
40
|
-
|
66
|
+
context 'store has some tags' do
|
67
|
+
before do
|
68
|
+
RequestHeadersMiddleware.store = { 'X-Request-Id': 'ef382618', 'tag': 'SSS' }
|
69
|
+
end
|
70
|
+
|
71
|
+
after do
|
72
|
+
RequestHeadersMiddleware.store = {}
|
73
|
+
RequestHeadersLogger.configure { |c| c[:tag_format] = 'val' }
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'output tags with key_val formmat' do
|
77
|
+
RequestHeadersLogger.configure { |c| c[:tag_format] = 'key_val' }
|
78
|
+
logger.info('text log message')
|
79
|
+
output = buffer.string
|
80
|
+
|
81
|
+
expect(output).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[X-Request-Id: ef382618\] text log message$/)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'include tags in the log line' do
|
85
|
+
logger.info('text log message')
|
41
86
|
|
42
|
-
|
87
|
+
expect(buffer.string).to match(/I, \[[0-9\-T:\.# ]*\] INFO -- dummy: \[ef382618\] text log message$/)
|
88
|
+
end
|
43
89
|
end
|
44
90
|
end
|
45
91
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: request_headers_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Al-waleed Shihadeh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: request_headers_middleware
|
@@ -68,42 +68,42 @@ dependencies:
|
|
68
68
|
name: rake
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- - "~>"
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '12.0'
|
74
71
|
- - ">="
|
75
72
|
- !ruby/object:Gem::Version
|
76
73
|
version: 12.0.0
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '12.0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "~>"
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '12.0'
|
84
81
|
- - ">="
|
85
82
|
- !ruby/object:Gem::Version
|
86
83
|
version: 12.0.0
|
84
|
+
- - "~>"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '12.0'
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: rspec
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
|
-
- - "~>"
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '3.5'
|
94
91
|
- - ">="
|
95
92
|
- !ruby/object:Gem::Version
|
96
93
|
version: 3.5.0
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.5'
|
97
97
|
type: :development
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '3.5'
|
104
101
|
- - ">="
|
105
102
|
- !ruby/object:Gem::Version
|
106
103
|
version: 3.5.0
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '3.5'
|
107
107
|
- !ruby/object:Gem::Dependency
|
108
108
|
name: rubocop
|
109
109
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,8 +135,7 @@ dependencies:
|
|
135
135
|
description: RequestHeaderLogger Allows you to tag logs with RequestHeader flags.
|
136
136
|
email:
|
137
137
|
- wshihadh@gmail.com
|
138
|
-
executables:
|
139
|
-
- travis
|
138
|
+
executables: []
|
140
139
|
extensions: []
|
141
140
|
extra_rdoc_files: []
|
142
141
|
files:
|
@@ -145,11 +144,9 @@ files:
|
|
145
144
|
- ".ruby-version"
|
146
145
|
- ".travis.yml"
|
147
146
|
- Gemfile
|
148
|
-
- Gemfile.lock
|
149
147
|
- LICENSE.txt
|
150
148
|
- README.md
|
151
149
|
- Rakefile
|
152
|
-
- bin/travis
|
153
150
|
- lib/request_headers_logger.rb
|
154
151
|
- lib/request_headers_logger/configuration.rb
|
155
152
|
- lib/request_headers_logger/delayed_job/delayed_job.rb
|
@@ -158,6 +155,7 @@ files:
|
|
158
155
|
- lib/request_headers_logger/json_formatter.rb
|
159
156
|
- lib/request_headers_logger/message_queue/message_queue.rb
|
160
157
|
- lib/request_headers_logger/message_queue/message_queue_plugin.rb
|
158
|
+
- lib/request_headers_logger/railtie.rb
|
161
159
|
- lib/request_headers_logger/text_formatter.rb
|
162
160
|
- lib/request_headers_logger/version.rb
|
163
161
|
- request_headers_logger.gemspec
|
@@ -188,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
186
|
version: '0'
|
189
187
|
requirements: []
|
190
188
|
rubyforge_project:
|
191
|
-
rubygems_version: 2.
|
189
|
+
rubygems_version: 2.7.8
|
192
190
|
signing_key:
|
193
191
|
specification_version: 4
|
194
192
|
summary: RequestHeaderLogger Allows you to tag logs with RequestHeader flags.
|
data/Gemfile.lock
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
request_headers_logger (0.0.4)
|
5
|
-
request_headers_middleware (~> 0.0.4)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activesupport (5.1.5)
|
11
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
-
i18n (~> 0.7)
|
13
|
-
minitest (~> 5.1)
|
14
|
-
tzinfo (~> 1.1)
|
15
|
-
ast (2.4.0)
|
16
|
-
concurrent-ruby (1.0.5)
|
17
|
-
delayed_job (4.1.4)
|
18
|
-
activesupport (>= 3.0, < 5.2)
|
19
|
-
diff-lcs (1.2.5)
|
20
|
-
docile (1.1.5)
|
21
|
-
i18n (0.9.5)
|
22
|
-
concurrent-ruby (~> 1.0)
|
23
|
-
json (2.1.0)
|
24
|
-
minitest (5.11.3)
|
25
|
-
parallel (1.12.1)
|
26
|
-
parser (2.5.0.2)
|
27
|
-
ast (~> 2.4.0)
|
28
|
-
powerpack (0.1.1)
|
29
|
-
rack (1.6.5)
|
30
|
-
rainbow (3.0.0)
|
31
|
-
rake (12.0.0)
|
32
|
-
request_headers_middleware (0.0.4)
|
33
|
-
request_store
|
34
|
-
request_store (1.4.0)
|
35
|
-
rack (>= 1.4)
|
36
|
-
rspec (3.5.0)
|
37
|
-
rspec-core (~> 3.5.0)
|
38
|
-
rspec-expectations (~> 3.5.0)
|
39
|
-
rspec-mocks (~> 3.5.0)
|
40
|
-
rspec-core (3.5.4)
|
41
|
-
rspec-support (~> 3.5.0)
|
42
|
-
rspec-expectations (3.5.0)
|
43
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
-
rspec-support (~> 3.5.0)
|
45
|
-
rspec-mocks (3.5.0)
|
46
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
-
rspec-support (~> 3.5.0)
|
48
|
-
rspec-support (3.5.0)
|
49
|
-
rubocop (0.53.0)
|
50
|
-
parallel (~> 1.10)
|
51
|
-
parser (>= 2.5)
|
52
|
-
powerpack (~> 0.1)
|
53
|
-
rainbow (>= 2.2.2, < 4.0)
|
54
|
-
ruby-progressbar (~> 1.7)
|
55
|
-
unicode-display_width (~> 1.0, >= 1.0.1)
|
56
|
-
ruby-progressbar (1.9.0)
|
57
|
-
simplecov (0.12.0)
|
58
|
-
docile (~> 1.1.0)
|
59
|
-
json (>= 1.8, < 3)
|
60
|
-
simplecov-html (~> 0.10.0)
|
61
|
-
simplecov-html (0.10.0)
|
62
|
-
thread_safe (0.3.6)
|
63
|
-
tzinfo (1.2.5)
|
64
|
-
thread_safe (~> 0.1)
|
65
|
-
unicode-display_width (1.3.0)
|
66
|
-
|
67
|
-
PLATFORMS
|
68
|
-
ruby
|
69
|
-
|
70
|
-
DEPENDENCIES
|
71
|
-
delayed_job (~> 4.1, >= 4.1.4)
|
72
|
-
rack (~> 1.6, >= 1.6.5)
|
73
|
-
rake (~> 12.0, >= 12.0.0)
|
74
|
-
request_headers_logger!
|
75
|
-
rspec (~> 3.5, >= 3.5.0)
|
76
|
-
rubocop (~> 0.53.0)
|
77
|
-
simplecov (~> 0.12.0)
|
78
|
-
|
79
|
-
BUNDLED WITH
|
80
|
-
1.16.1
|