request_headers_logger 0.0.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 +7 -0
- data/.gitignore +15 -0
- data/.rubocop.yml +27 -0
- data/.ruby-version +1 -0
- data/.travis.yml +19 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +81 -0
- data/LICENSE.txt +22 -0
- data/README.md +40 -0
- data/Rakefile +42 -0
- data/bin/travis +12 -0
- data/lib/request_headers_logger/delayed_job/delayed_job.rb +6 -0
- data/lib/request_headers_logger/delayed_job/performable_method.rb +18 -0
- data/lib/request_headers_logger/delayed_job/request_header_delayed_plugin.rb +35 -0
- data/lib/request_headers_logger/version.rb +5 -0
- data/lib/request_headers_logger.rb +40 -0
- data/request_headers_logger.gemspec +31 -0
- data/spec/delayed_job/performable_method_spec.rb +23 -0
- data/spec/request_headers_logger_spec.rb +65 -0
- data/spec/spec_helper.rb +47 -0
- data/spec/support/mock_dj_user.rb +11 -0
- metadata +205 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1a3ef4bf0a8787742b143de9fd75e856c99284dd
|
4
|
+
data.tar.gz: 8159bb657b7de2a5036a113d0dc05b65d4a1ac34
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b8bff686ae38f14bf3c5e4db57466c63385b307cd6a4633b61653b2b470f7fc89f27fbb843d50c28c507d2b0c319365af5ce988f08da479f57eea1d3d1a09ddb
|
7
|
+
data.tar.gz: f08ca98445f59ad39f3e0c88ad10b18f2cb4982049b177ce0fbf704ce4de2b3e6493f8314ce863dbaf881528d49a639ecce67e32590ab6e612f9e8ba849bfea7
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- '.git-hooks/**/*'
|
4
|
+
- 'bin/*'
|
5
|
+
- 'db/schema.rb'
|
6
|
+
- 'db/migrate/*'
|
7
|
+
- 'vendor/bundle/**/*'
|
8
|
+
- 'config/environments/*'
|
9
|
+
- 'Rakefile'
|
10
|
+
|
11
|
+
Style/ModuleFunction:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Metrics/BlockLength:
|
15
|
+
Exclude:
|
16
|
+
- 'Rakefile'
|
17
|
+
- '**/*.rake'
|
18
|
+
- 'spec/**/*.rb'
|
19
|
+
|
20
|
+
Metrics/LineLength:
|
21
|
+
Max: 120
|
22
|
+
|
23
|
+
Style/Documentation:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
Lint/UnusedBlockArgument:
|
27
|
+
Enabled: false
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.3
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
request_headers_logger (0.0.1)
|
5
|
+
activesupport (> 4.0)
|
6
|
+
request_headers_middleware (~> 0.0.4)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activesupport (5.1.5)
|
12
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
|
+
i18n (~> 0.7)
|
14
|
+
minitest (~> 5.1)
|
15
|
+
tzinfo (~> 1.1)
|
16
|
+
ast (2.4.0)
|
17
|
+
concurrent-ruby (1.0.5)
|
18
|
+
delayed_job (4.1.4)
|
19
|
+
activesupport (>= 3.0, < 5.2)
|
20
|
+
diff-lcs (1.2.5)
|
21
|
+
docile (1.1.5)
|
22
|
+
i18n (0.9.5)
|
23
|
+
concurrent-ruby (~> 1.0)
|
24
|
+
json (2.1.0)
|
25
|
+
minitest (5.11.3)
|
26
|
+
parallel (1.12.1)
|
27
|
+
parser (2.5.0.2)
|
28
|
+
ast (~> 2.4.0)
|
29
|
+
powerpack (0.1.1)
|
30
|
+
rack (1.6.5)
|
31
|
+
rainbow (3.0.0)
|
32
|
+
rake (12.0.0)
|
33
|
+
request_headers_middleware (0.0.4)
|
34
|
+
request_store
|
35
|
+
request_store (1.4.0)
|
36
|
+
rack (>= 1.4)
|
37
|
+
rspec (3.5.0)
|
38
|
+
rspec-core (~> 3.5.0)
|
39
|
+
rspec-expectations (~> 3.5.0)
|
40
|
+
rspec-mocks (~> 3.5.0)
|
41
|
+
rspec-core (3.5.4)
|
42
|
+
rspec-support (~> 3.5.0)
|
43
|
+
rspec-expectations (3.5.0)
|
44
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
+
rspec-support (~> 3.5.0)
|
46
|
+
rspec-mocks (3.5.0)
|
47
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
48
|
+
rspec-support (~> 3.5.0)
|
49
|
+
rspec-support (3.5.0)
|
50
|
+
rubocop (0.53.0)
|
51
|
+
parallel (~> 1.10)
|
52
|
+
parser (>= 2.5)
|
53
|
+
powerpack (~> 0.1)
|
54
|
+
rainbow (>= 2.2.2, < 4.0)
|
55
|
+
ruby-progressbar (~> 1.7)
|
56
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
57
|
+
ruby-progressbar (1.9.0)
|
58
|
+
simplecov (0.12.0)
|
59
|
+
docile (~> 1.1.0)
|
60
|
+
json (>= 1.8, < 3)
|
61
|
+
simplecov-html (~> 0.10.0)
|
62
|
+
simplecov-html (0.10.0)
|
63
|
+
thread_safe (0.3.6)
|
64
|
+
tzinfo (1.2.5)
|
65
|
+
thread_safe (~> 0.1)
|
66
|
+
unicode-display_width (1.3.0)
|
67
|
+
|
68
|
+
PLATFORMS
|
69
|
+
ruby
|
70
|
+
|
71
|
+
DEPENDENCIES
|
72
|
+
delayed_job (~> 4.1, >= 4.1.4)
|
73
|
+
rack (~> 1.6, >= 1.6.5)
|
74
|
+
rake (~> 12.0, >= 12.0.0)
|
75
|
+
request_headers_logger!
|
76
|
+
rspec (~> 3.5, >= 3.5.0)
|
77
|
+
rubocop (~> 0.53.0)
|
78
|
+
simplecov (~> 0.12.0)
|
79
|
+
|
80
|
+
BUNDLED WITH
|
81
|
+
1.16.1
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2017 Marc Grimme
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# RequestHeaderLogger
|
2
|
+
RequestHeaderLogger Allows you to tag logs with RequestHeader flags
|
3
|
+
|
4
|
+
In micro-service architecture it is very important to be able to corroborate logs from different services for a specific request. The correlation must include both services connected synchronously or asynchronously.
|
5
|
+
|
6
|
+
For this issue the *X-Request-Id* HTTP header was introduced. In Rails the *ActionDispatch::RequestId* middleware helps create a unique ID
|
7
|
+
for each request if not already defined by the *X-Request-Id* header. In addition, *RequestHeaderMiddleware* will allow you to share the same 'X-Request-Id' for multiple requests and multiple services.
|
8
|
+
|
9
|
+
Unfortunately, Using *RequestHeaderMiddleware* and *ActionDispatch::RequestId* do not solve the Issues completely. *RequestHeaderMiddleware* will share the *X-Request-Id* only with synchronous requests.
|
10
|
+
|
11
|
+
The gem can be used to share *RequestHeader* store items the asynchronous services (Delayed Jobs). The default is the while listed item is *X-Request-Id*. However, It is possible to extend the whilelist with more items.
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
### Rails
|
16
|
+
|
17
|
+
So how does it work with Rails.
|
18
|
+
|
19
|
+
Add this line to your application's Gemfile:
|
20
|
+
|
21
|
+
``
|
22
|
+
gem 'request_headers_logger'
|
23
|
+
``
|
24
|
+
|
25
|
+
And then execute:
|
26
|
+
|
27
|
+
``
|
28
|
+
$ bundle
|
29
|
+
``
|
30
|
+
|
31
|
+
That's it now Delayed job logs should show the *X-Request-Id* from the http request.
|
32
|
+
|
33
|
+
|
34
|
+
### Whitelist
|
35
|
+
|
36
|
+
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.
|
37
|
+
|
38
|
+
``
|
39
|
+
RequestHeadersLogger.whitelist << "customer-id".to_sym
|
40
|
+
``
|
data/Rakefile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
# Add default task. When you type just rake command this would run. Travis CI runs this. Making this run spec
|
7
|
+
desc 'Default: run specs.'
|
8
|
+
task :default => :spec
|
9
|
+
|
10
|
+
# Defining spec task for running spec
|
11
|
+
desc "Run specs"
|
12
|
+
RSpec::Core::RakeTask.new('spec') do |spec|
|
13
|
+
# Pattern filr for spec files to run. This is default btw.
|
14
|
+
spec.pattern = "./spec/**/*_spec.rb"
|
15
|
+
end
|
16
|
+
|
17
|
+
# Run the rdoc task to generate rdocs for this gem
|
18
|
+
require 'rdoc/task'
|
19
|
+
RDoc::Task.new do |rdoc|
|
20
|
+
require File.expand_path("../lib/request_headers_middleware/version", __FILE__)
|
21
|
+
version = RequestHeadersMiddleware::VERSION
|
22
|
+
|
23
|
+
rdoc.rdoc_dir = 'rdoc'
|
24
|
+
rdoc.title = "release_headers_middleware #{version}"
|
25
|
+
rdoc.rdoc_files.include('README*')
|
26
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "Code coverage detail"
|
30
|
+
task :coverage do
|
31
|
+
ENV['COVERAGE'] = "true"
|
32
|
+
Rake::Task['spec'].execute
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Console for checking things"
|
36
|
+
task :console do
|
37
|
+
require 'irb'
|
38
|
+
require 'irb/completion'
|
39
|
+
require 'logger_instrumentation'
|
40
|
+
ARGV.clear
|
41
|
+
IRB.start
|
42
|
+
end
|
data/bin/travis
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'delayed_job'
|
4
|
+
|
5
|
+
module Delayed
|
6
|
+
class PerformableMethod
|
7
|
+
attr_accessor :object, :method_name, :args, :store
|
8
|
+
|
9
|
+
def encode_with(coder)
|
10
|
+
coder.map = {
|
11
|
+
'object' => object,
|
12
|
+
'method_name' => method_name,
|
13
|
+
'args' => args,
|
14
|
+
'store' => store
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'delayed_job'
|
4
|
+
|
5
|
+
module RequestHeadersLogger
|
6
|
+
class RequestHeadersDelayedPlugin < Delayed::Plugin
|
7
|
+
callbacks do |lifecycle|
|
8
|
+
lifecycle.before(:enqueue) do |job|
|
9
|
+
obj = job.payload_object.dup
|
10
|
+
obj.instance_variable_set(:@store, RequestHeadersMiddleware.store)
|
11
|
+
job.payload_object = obj
|
12
|
+
end
|
13
|
+
|
14
|
+
lifecycle.before(:perform) do |worker, job|
|
15
|
+
RequestHeadersMiddleware.store = job.payload_object.instance_variable_get(:@store)
|
16
|
+
|
17
|
+
RequestHeadersLogger.tag_logger Delayed::Worker.logger
|
18
|
+
RequestHeadersLogger.tag_logger ::Rails.logger unless dj_use_rails_logger
|
19
|
+
end
|
20
|
+
|
21
|
+
lifecycle.after(:perform) do |worker, job|
|
22
|
+
RequestHeadersLogger.untag_logger Delayed::Worker.logger
|
23
|
+
RequestHeadersLogger.untag_logger ::Rails.logger unless dj_use_rails_logger
|
24
|
+
|
25
|
+
RequestHeadersMiddleware.store = {}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.dj_use_rails_logger
|
30
|
+
::Rails.logger == Delayed::Worker.logger
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Delayed::Worker.plugins << RequestHeadersLogger::RequestHeadersDelayedPlugin
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
require 'request_headers_middleware'
|
5
|
+
require 'request_headers_logger/delayed_job/delayed_job'
|
6
|
+
|
7
|
+
module RequestHeadersLogger # :nodoc:
|
8
|
+
extend self
|
9
|
+
|
10
|
+
attr_accessor :whitelist
|
11
|
+
@whitelist = ['x-request-id'.to_sym]
|
12
|
+
|
13
|
+
def tags
|
14
|
+
filter(RequestHeadersMiddleware.store)
|
15
|
+
end
|
16
|
+
|
17
|
+
def tag_logger(logger)
|
18
|
+
logger = tagged_logger(logger) unless logger.respond_to? :push_tags
|
19
|
+
tags.each do |_tag, value|
|
20
|
+
logger.push_tags(value) unless value.nil?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def untag_logger(logger)
|
25
|
+
logger = tagged_logger(logger) unless logger.respond_to? :pop_tags
|
26
|
+
tags.each do |_tag, value|
|
27
|
+
logger.pop_tags unless value.nil?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def tagged_logger(logger)
|
34
|
+
ActiveSupport::TaggedLogging.new(logger)
|
35
|
+
end
|
36
|
+
|
37
|
+
def filter(store)
|
38
|
+
store.select { |key, _value| @whitelist.include? key.downcase.to_sym }
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'request_headers_logger/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |gem|
|
8
|
+
gem.name = 'request_headers_logger'
|
9
|
+
gem.version = RequestHeadersLogger::VERSION
|
10
|
+
gem.authors = ['Al-waleed Shihadeh']
|
11
|
+
gem.email = ['wshihadh@gmail.com']
|
12
|
+
gem.description = 'RequestHeaderLogger Allows you to tag logs with RequestHeader flags.'
|
13
|
+
gem.summary = 'RequestHeaderLogger Allows you to tag logs with RequestHeader flags.'
|
14
|
+
gem.homepage = 'https://github.com/wshihadeh/request_headers_logger'
|
15
|
+
gem.licenses = ['MIT']
|
16
|
+
|
17
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
18
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
19
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
20
|
+
gem.require_paths = ['lib']
|
21
|
+
|
22
|
+
gem.add_dependency 'activesupport', '> 4.0'
|
23
|
+
gem.add_dependency 'request_headers_middleware', '~> 0.0.4'
|
24
|
+
|
25
|
+
gem.add_development_dependency 'delayed_job', '~> 4.1', '>= 4.1.4'
|
26
|
+
gem.add_development_dependency 'rack', '~> 1.6', '>= 1.6.5'
|
27
|
+
gem.add_development_dependency 'rake', '~> 12.0', '>= 12.0.0'
|
28
|
+
gem.add_development_dependency 'rspec', '~> 3.5', '>= 3.5.0'
|
29
|
+
gem.add_development_dependency 'rubocop', '~> 0.53.0'
|
30
|
+
gem.add_development_dependency 'simplecov', '~> 0.12.0'
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Delayed::PerformableMethod do
|
6
|
+
it 'has store attr_accessor' do
|
7
|
+
instance_methods = Delayed::PerformableMethod.instance_methods
|
8
|
+
expect(instance_methods.include?(:store)).to eq(true)
|
9
|
+
expect(instance_methods.include?(:store=)).to eq(true)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'set store' do
|
13
|
+
dj = Delayed::PerformableMethod.new(User.new, :send_email, {})
|
14
|
+
dj.store = { 'x-request-id': '101010' }
|
15
|
+
|
16
|
+
expect(dj.instance_variables).to eq(%I[@object @args @method_name @store])
|
17
|
+
expect(dj.object.class).to eq(User)
|
18
|
+
expect(dj.method_name).to eq(:send_email)
|
19
|
+
expect(dj.instance_variable_defined?(:@store)).to eq(true)
|
20
|
+
expect(dj.instance_variable_get(:@store)).to eq('x-request-id': '101010')
|
21
|
+
expect(dj.store[:'x-request-id']).to eq('101010')
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'active_support'
|
5
|
+
|
6
|
+
RSpec.describe RequestHeadersLogger do
|
7
|
+
let(:logger) { ActiveSupport::TaggedLogging.new(Logger.new(STDOUT)) }
|
8
|
+
|
9
|
+
describe '.tags' do
|
10
|
+
before(:each) do
|
11
|
+
@store = { 'X-Request-Id': 'ef382618-e46d-42f5-aca6-ae9e1db8fee0',
|
12
|
+
'X-Request-Id2': 'e46def38-2618-42f5-ae9e-1db8fee0aca6',
|
13
|
+
'X-Request-Id3': '618e46de-f382-42f5-aca6-8fee0ae9e1db' }
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'return only x-request-id by default' do
|
17
|
+
RequestHeadersMiddleware.store = @store
|
18
|
+
|
19
|
+
expect(RequestHeadersLogger.tags.count).to eq(1)
|
20
|
+
expect(RequestHeadersLogger.tags).to eq('X-Request-Id': 'ef382618-e46d-42f5-aca6-ae9e1db8fee0')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'return empty hash when whitelist is empty' do
|
24
|
+
RequestHeadersMiddleware.store = @store
|
25
|
+
RequestHeadersLogger.whitelist = []
|
26
|
+
|
27
|
+
expect(RequestHeadersLogger.tags.count).to eq(0)
|
28
|
+
expect(RequestHeadersLogger.tags).to eq({})
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'return only the white listed flags' do
|
32
|
+
RequestHeadersMiddleware.store = @store
|
33
|
+
RequestHeadersLogger.whitelist = ['x-request-id'.to_sym, 'x-request-id2'.to_sym]
|
34
|
+
|
35
|
+
expect(RequestHeadersLogger.tags.count).to eq(2)
|
36
|
+
expect(RequestHeadersLogger.tags[:'X-Request-Id']).to eq('ef382618-e46d-42f5-aca6-ae9e1db8fee0')
|
37
|
+
expect(RequestHeadersLogger.tags[:'X-Request-Id2']).to eq('e46def38-2618-42f5-ae9e-1db8fee0aca6')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '.tag_logger' do
|
42
|
+
it 'tag the logger' do
|
43
|
+
store = { 'X-Request-Id': 'ef382618-e46d-42f5-aca6-ae9e1db8fee0' }
|
44
|
+
RequestHeadersMiddleware.store = store
|
45
|
+
RequestHeadersLogger.tag_logger logger
|
46
|
+
tags = logger.formatter.current_tags
|
47
|
+
|
48
|
+
expect(tags.count).to eq(1)
|
49
|
+
expect(tags.first).to eq(store[:'X-Request-Id'])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '.untag_logger' do
|
54
|
+
it 'untag the logger' do
|
55
|
+
store = { 'X-Request-Id': 'ef382618-e46d-42f5-aca6-ae9e1db8fee0' }
|
56
|
+
RequestHeadersMiddleware.store = store
|
57
|
+
RequestHeadersLogger.tag_logger logger
|
58
|
+
RequestHeadersLogger.untag_logger logger
|
59
|
+
tags = logger.formatter.current_tags
|
60
|
+
|
61
|
+
expect(tags.count).to eq(0)
|
62
|
+
expect(tags).to eq([])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Notice there is a .rspec file in the root folder. It defines rspec arguments
|
4
|
+
|
5
|
+
# Ruby 1.9 uses simplecov. The ENV['COVERAGE'] is set when rake coverage
|
6
|
+
# is run in ruby 1.9
|
7
|
+
if ENV['COVERAGE']
|
8
|
+
require 'simplecov'
|
9
|
+
SimpleCov.start do
|
10
|
+
# Remove the spec folder from coverage. By default all code files are
|
11
|
+
# included.
|
12
|
+
# For more config options see
|
13
|
+
# https://github.com/colszowka/simplecov
|
14
|
+
add_filter File.expand_path('../spec', __dir__)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Modify load path so you can require 'ogstasher directly.
|
19
|
+
$LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
|
20
|
+
|
21
|
+
require 'rubygems'
|
22
|
+
# Loads bundler setup tasks. Now if I run spec without installing gems then it
|
23
|
+
# would say gem not installed and do bundle install instead of ugly load error
|
24
|
+
# on require.
|
25
|
+
require 'bundler/setup'
|
26
|
+
|
27
|
+
# This will require me all the gems automatically for the groups. If I do only
|
28
|
+
# .setup then I will have to require gems manually. Note that you have still
|
29
|
+
# have to require some gems if they are part of bigger gem like ActiveRecord
|
30
|
+
# which is part of Rails. You can say :require => false in gemfile to always
|
31
|
+
# use explicit requiring
|
32
|
+
Bundler.require(:test)
|
33
|
+
|
34
|
+
Dir[File.join('./spec/support/**/*.rb')].each { |f| require f }
|
35
|
+
|
36
|
+
# Set Rails environment as test
|
37
|
+
ENV['RAILS_ENV'] = 'test'
|
38
|
+
|
39
|
+
require 'delayed_job'
|
40
|
+
require 'request_headers_middleware'
|
41
|
+
require 'request_headers_logger'
|
42
|
+
require 'rack/mock'
|
43
|
+
|
44
|
+
RSpec.configure do |config|
|
45
|
+
config.run_all_when_everything_filtered = true
|
46
|
+
config.filter_run :focus
|
47
|
+
end
|
metadata
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: request_headers_logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Al-waleed Shihadeh
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: request_headers_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.4
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.4
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: delayed_job
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.1'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 4.1.4
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '4.1'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 4.1.4
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rack
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.6'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.6.5
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.6'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.6.5
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rake
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '12.0'
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 12.0.0
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '12.0'
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 12.0.0
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: rspec
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '3.5'
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.5.0
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.5'
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 3.5.0
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: rubocop
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - "~>"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 0.53.0
|
128
|
+
type: :development
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - "~>"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 0.53.0
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: simplecov
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - "~>"
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.12.0
|
142
|
+
type: :development
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 0.12.0
|
149
|
+
description: RequestHeaderLogger Allows you to tag logs with RequestHeader flags.
|
150
|
+
email:
|
151
|
+
- wshihadh@gmail.com
|
152
|
+
executables:
|
153
|
+
- travis
|
154
|
+
extensions: []
|
155
|
+
extra_rdoc_files: []
|
156
|
+
files:
|
157
|
+
- ".gitignore"
|
158
|
+
- ".rubocop.yml"
|
159
|
+
- ".ruby-version"
|
160
|
+
- ".travis.yml"
|
161
|
+
- Gemfile
|
162
|
+
- Gemfile.lock
|
163
|
+
- LICENSE.txt
|
164
|
+
- README.md
|
165
|
+
- Rakefile
|
166
|
+
- bin/travis
|
167
|
+
- lib/request_headers_logger.rb
|
168
|
+
- lib/request_headers_logger/delayed_job/delayed_job.rb
|
169
|
+
- lib/request_headers_logger/delayed_job/performable_method.rb
|
170
|
+
- lib/request_headers_logger/delayed_job/request_header_delayed_plugin.rb
|
171
|
+
- lib/request_headers_logger/version.rb
|
172
|
+
- request_headers_logger.gemspec
|
173
|
+
- spec/delayed_job/performable_method_spec.rb
|
174
|
+
- spec/request_headers_logger_spec.rb
|
175
|
+
- spec/spec_helper.rb
|
176
|
+
- spec/support/mock_dj_user.rb
|
177
|
+
homepage: https://github.com/wshihadeh/request_headers_logger
|
178
|
+
licenses:
|
179
|
+
- MIT
|
180
|
+
metadata: {}
|
181
|
+
post_install_message:
|
182
|
+
rdoc_options: []
|
183
|
+
require_paths:
|
184
|
+
- lib
|
185
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
requirements: []
|
196
|
+
rubyforge_project:
|
197
|
+
rubygems_version: 2.5.2
|
198
|
+
signing_key:
|
199
|
+
specification_version: 4
|
200
|
+
summary: RequestHeaderLogger Allows you to tag logs with RequestHeader flags.
|
201
|
+
test_files:
|
202
|
+
- spec/delayed_job/performable_method_spec.rb
|
203
|
+
- spec/request_headers_logger_spec.rb
|
204
|
+
- spec/spec_helper.rb
|
205
|
+
- spec/support/mock_dj_user.rb
|