rf_logger 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48bfb144bdbf72a511aadac75f6dbb3156603034
4
- data.tar.gz: 38384d7a71e1d011894674282eab6b67af905fd2
3
+ metadata.gz: 81caf0a521defb598ff45606fa41b4a3716b6cca
4
+ data.tar.gz: 380ede66b6abbd83af7e7f8bf8ad0023992e96af
5
5
  SHA512:
6
- metadata.gz: 8de9535830368540b4ff1caf1b57c57ff21487e4fe161eff869d225eda6ea05e67159cbdd76126291b0283dd8819a2f98f2fd355790397cbb48fd92820c311de
7
- data.tar.gz: 73dc68be426f72760a446b415fe9b6e7ddb4b9df9872230e7bfb3dacfdea92f37b9a0231bbafb76e207926e20f75ab86ef0d5c825c648d411cefd23e9aad1654
6
+ metadata.gz: 94eacd45bc0183dcded21c6cab446b0a3025fb98111ef76f505b244e076ecd9cce3995670b7ffc7360c38992825d56e1eb3d2b57682d6343cfbc7662092db156
7
+ data.tar.gz: 526e62a0c64f1bc1a4801c533d56840547e7f6acecebfbc7d57e23e7d02555a14a183c79c339ef99da2d730d03baafbc1b354c78e738385e263f88f98d24a3f0
@@ -2,11 +2,17 @@ require "thread/inheritable_attributes"
2
2
 
3
3
  module RfLogger
4
4
  class RequestMiddleware
5
+ REQUEST_ID_ENV = [
6
+ /\.request_id/, # matches action_dispatch.request_id & rory.request_id
7
+ "X-Request-Id", # If framework middleware has not been set fallback to default.
8
+ "HTTP_X_REQUEST_ID"
9
+ ].freeze
10
+
5
11
  # @param [Hash] options
6
- # @option opts [Hash{:label => "header_name"}] :tagged The subject
12
+ # @option opts [Hash{:label => ["header_name", /or regex/]}] :tagged match on rack request env keys. First value found has priority.
7
13
  def initialize(app, options={})
8
- @app = app
9
- @tagged = options.fetch(:tagged, { request_id: "X-Request-Id" })
14
+ @app = app
15
+ @tagged = options.fetch(:tagged, { request_id: REQUEST_ID_ENV })
10
16
  end
11
17
 
12
18
  def call(env)
@@ -16,13 +22,26 @@ module RfLogger
16
22
  end
17
23
 
18
24
  def tagged
19
- @tagged.each_with_object({}) do |(key, value), hash|
20
- hash[key] = @env[value]
25
+ @tagged.each_with_object({}) do |(label, matches), tags|
26
+ [*matches].each do |match|
27
+ break if (val = find_by(match)) && (tags[label] = val)
28
+ end
21
29
  end
22
30
  end
23
31
 
24
32
  private
25
33
 
34
+ def find_by(match)
35
+ case match
36
+ when String
37
+ @env[match]
38
+ when Regexp
39
+ (@env.find { |k, _| match =~ k }|| []).last
40
+ else
41
+ raise "Unknown tagged match type: #{match}"
42
+ end
43
+ end
44
+
26
45
  def set_tagged_thread_var
27
46
  Thread.current.set_inheritable_attribute(:rf_logger_request_tags, tagged)
28
47
  end
@@ -1,3 +1,3 @@
1
1
  module RfLogger
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -1,35 +1,66 @@
1
1
  require "rf_logger/request/request_middleware"
2
+ require "thread/inheritable_attributes"
2
3
 
3
4
  RSpec.describe RfLogger::RequestMiddleware do
4
5
  subject { RfLogger::RequestMiddleware.new(*init_arguments).call(env) }
5
6
  let(:env) { {} }
6
7
  let(:init_arguments) { [->(_) {}] }
7
- after { Thread.current[:rf_logger_request_id] = nil }
8
+ let(:rf_logger_request_tags) { Thread.current.get_inheritable_attribute(:rf_logger_request_tags) || :tags_not_present }
8
9
 
9
- context "when tagged is missing" do
10
- let(:env) { { "X-Request-Id" => "uuid-from_env" } }
11
- it "defaults to getting the request_id" do
12
- subject
13
- expect(Thread.current[:inheritable_attributes][:rf_logger_request_tags]).to eq({ :request_id => "uuid-from_env" })
14
- end
10
+ before do
11
+ Thread.current.set_inheritable_attribute(:rf_logger_request_tags, nil)
15
12
  end
16
13
 
17
- context "when tagged option is given that exists" do
18
- let(:env) { { "X-OtherHeader" => "other_request_id" } }
19
- let(:init_arguments) { [->(_) {}, tagged: { custom_env_key: "X-OtherHeader" }] }
14
+ context "when tagged: keyword arg is not given it loads defaults" do
15
+ before { subject }
16
+ context "when env[/request_id/] is present" do
17
+ let(:env) { { "some_other_env" => "other_value",
18
+ "sinatra.request_id" => "framework_request_id_value",
19
+ "X-Request-Id" => "http_request_id_value" } }
20
+ it { expect(rf_logger_request_tags).to eq({ :request_id => "framework_request_id_value" }) }
21
+ end
22
+
23
+ context "when env['X-Request-Id'] is the only value" do
24
+ let(:env) { { "X-Request-Id" => "http_request_id_value", "some_other_env" => "other_value" } }
25
+ it { expect(rf_logger_request_tags).to eq({ :request_id => "http_request_id_value" }) }
26
+ end
27
+
28
+ context "when env[/request_id/] os env['X-Request-Id'] NOT is present" do
29
+ let(:env) { {} }
20
30
 
21
- it "sets current Thread variable" do
22
- subject
23
- expect(Thread.current[:inheritable_attributes][:rf_logger_request_tags]).to eq({ :custom_env_key => "other_request_id" })
31
+ it "is not set in the tags" do
32
+ expect(rf_logger_request_tags).to eq({})
33
+ end
24
34
  end
25
35
  end
26
36
 
27
- context "when tagged option is given that does not exists" do
28
- let(:init_arguments) { [->(_) {}, tagged: { custom_env_key: "X-WontFindMe" }] }
37
+ context "when tagged: keyword arg is given" do
38
+ context "when the env exists" do
39
+ before { subject }
40
+ let(:env) { { "some_other_env" => "other_value", "X-OtherHeader" => "other_request_id" } }
41
+ let(:init_arguments) { [->(_) {}, tagged: { custom_env_key: "X-OtherHeader" }] }
42
+ it "sets current Thread variable" do
43
+ expect(rf_logger_request_tags).to eq({ :custom_env_key => "other_request_id" })
44
+ end
45
+ end
46
+
47
+ context "when a tagged match type is unknown" do
48
+ let(:env) { { "X-OtherHeader" => "other_request_id", "some_other_env" => "other_value" } }
49
+ let(:init_arguments) { [->(_) {}, tagged: { custom_env_key: [1] }] }
50
+
51
+ it "sets current Thread variable" do
52
+ expect { subject }.to raise_error("Unknown tagged match type: 1")
53
+ expect(rf_logger_request_tags).to eq(:tags_not_present)
54
+ end
55
+ end
56
+
57
+ context "when the env does not exists" do
58
+ before { subject }
59
+ let(:init_arguments) { [->(_) {}, tagged: { custom_env_key: "X-WontFindMe" }] }
29
60
 
30
- it "sets current Thread variable" do
31
- subject
32
- expect(Thread.current[:inheritable_attributes][:rf_logger_request_tags]).to eq({:custom_env_key=>nil})
61
+ it "is not set in the tags" do
62
+ expect(rf_logger_request_tags).to eq({})
63
+ end
33
64
  end
34
65
  end
35
66
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rf_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Zeisler
@@ -199,3 +199,4 @@ test_files:
199
199
  - spec/lib/rf_logger_spec.rb
200
200
  - spec/spec_helper.rb
201
201
  - spec/support/request_id_shared_examples.rb
202
+ has_rdoc: