transaction_logger 1.0.2 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30f8e8e54923dfdc287aeb35da8c13dd4ab6b49c
4
- data.tar.gz: fcd753fbf378de1fd0e5c3b2d12592c34bfdbf67
3
+ metadata.gz: 2e0b34abcfe7bb0e2aab8a11e94fa283e3cd4c8a
4
+ data.tar.gz: 2b5525a2f7b0d65d0acaf2deb86765075509483e
5
5
  SHA512:
6
- metadata.gz: 8396dc16368ead80fd6e778acdc4ddf3d1072645ff08699a0caf651c0c58732a3e643ef8a0cb54b1c52ccfb276c1544c9730630f43a5a9e4cccbed31793f49a5
7
- data.tar.gz: c514903ed15b3bfcc772c352b4edc18227c3c5ab4499d98fba7ab69db1125bc41afe8040d8f8f174e69ed9c2b8e92a4dfd9d2940d892528f782dd258d219c7a7
6
+ metadata.gz: 946306e6960761db73217526eba5262b97817fb4a902f07e7d475730f8ef9f813367a1435ac9b09f3434654a0cae3f10e511871c8c446442d6f70174cc427e66
7
+ data.tar.gz: 1028997dbb986ff41f157d9676d5b086005f45723b9fa488fd15f53a29225bcb80509d8ee3380bc3c23793fc25d851bbf86102bed6edb717b90b2c668c3d0ad4
data/README.md CHANGED
@@ -86,10 +86,19 @@ class YourClass
86
86
  end
87
87
  ```
88
88
 
89
- By default, the transaction will be named *YourClass:some_method*, and have no context. You can easily change this by adding the following symbols to an additional options parameter:
89
+ By default, the transaction will be named *YourClass:some_method*. You can easily change this by adding the name to the options params:
90
90
 
91
91
  ```ruby
92
- add_transaction_log :some_method, {name: "Custom Name", context: {}}
92
+ add_transaction_log :some_method, {name: "Custom Name" }
93
+ ```
94
+
95
+ You can set a *context* to the options that is pushed to the logger. It can either anything supporting `.to_hash` or a `Proc`.
96
+ The proc will be evaluated in the scope of the traced method.
97
+
98
+ ```ruby
99
+ add_transaction_log :some_method, {context: "Custom Context" }
100
+ add_transaction_log :some_method, {context: { key: "value context" } }
101
+ add_transaction_log :some_method, {context: -> { request.params } }
93
102
  ```
94
103
 
95
104
  ### Example
@@ -108,7 +117,7 @@ class ExampleClass
108
117
  logger.info "Success"
109
118
  end
110
119
 
111
- add_transaction_log :some_method, {context: {some_id: 12}}
120
+ add_transaction_log :some_method, { context: { some_id: 12 } }
112
121
  end
113
122
  ```
114
123
 
@@ -143,6 +152,10 @@ The expected output is:
143
152
 
144
153
  ## Version History
145
154
 
155
+ ### v1.1.0
156
+ - Fixed issues [#32](https://github.com/blinkist/transaction_logger/issues/32) for missing context
157
+ - Added support for Proc as context [#34](https://github.com/blinkist/transaction_logger/issues/34)
158
+
146
159
  ### v1.0.1
147
160
  - Fixed issues with undefined trap_logger method
148
161
  - Hid module methods other than add_transaction_log
@@ -1,3 +1,3 @@
1
1
  module TransactionLogger
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -28,17 +28,28 @@ module TransactionLogger
28
28
  def add_transaction_log(method, options={})
29
29
  old_method = instance_method method
30
30
 
31
- options = {}
32
31
  options[:prefix] = TransactionLogger::Configure.instance_variable_get :@prefix
33
32
  options[:logger] = TransactionLogger::Configure.instance_variable_get :@logger
34
33
  options[:level_threshold] = TransactionLogger::Configure.instance_variable_get :@level_threshold
35
34
 
36
35
  define_method method do
36
+ context = options[:context]
37
+
38
+ if context.is_a? Proc
39
+ begin
40
+ context = instance_exec(&context)
41
+ rescue => e
42
+ context = "TransactionLogger: couldn't evaluate context: #{e.message}"
43
+ # Write an error to the untrapped logger
44
+ logger.error context
45
+ logger.error e.backtrace.take(10).join "\n"
46
+ end
47
+ end
48
+
37
49
  TransactionManager.start options, lambda { |transaction|
38
50
  transaction.name = options[:name]
39
51
  transaction.name ||= "#{old_method.bind(self).owner}#{method.inspect}"
40
- transaction.context = options[:context]
41
- transaction.context ||= {}
52
+ transaction.context = context || {}
42
53
 
43
54
  # Check for a logger on the instance
44
55
  if methods.include? :logger
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+ require "logger"
3
+
4
+ describe TransactionLogger::Transaction do
5
+ let (:test_lmbda) {
6
+ lambda do |_t|
7
+ end
8
+ }
9
+
10
+ subject {
11
+ TransactionLogger::Transaction.new(
12
+ { prefix: nil, logger: Logger.new(STDOUT), level_threshold: nil }, test_lmbda)
13
+ }
14
+
15
+ describe "#run" do
16
+ context "when no exception is raised" do
17
+ let (:test_lmbda) {
18
+ lambda do |_t|
19
+ "result"
20
+ end
21
+ }
22
+
23
+ let (:result) { subject.run }
24
+
25
+ it "returns lmda" do
26
+ expect(result).to eq "result"
27
+ end
28
+ end
29
+
30
+ context "when an exception is raised" do
31
+ let (:test_lmbda) {
32
+ lambda do |_t|
33
+ fail "test error"
34
+ end
35
+ }
36
+
37
+ let (:child) {
38
+ TransactionLogger::Transaction.new(
39
+ { prefix: nil, logger: Logger.new(STDOUT), level_threshold: nil }, test_lmbda)
40
+ }
41
+
42
+ let (:result) { subject.run }
43
+
44
+ it "raises an exception" do
45
+ expect { result }.to raise_error "test error"
46
+ end
47
+
48
+ it "calls failure" do
49
+ expect(subject).to receive(:failure)
50
+ result
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+ require "logger"
3
+
4
+ describe TransactionLogger::Configure do
5
+ let (:test_lmbda) {
6
+ lambda do |_t|
7
+ end
8
+ }
9
+
10
+ describe ".log_prefix" do
11
+ subject {
12
+ TransactionLogger::Transaction.new(
13
+ { prefix: nil, logger: Logger.new(STDOUT), level_threshold: nil }, test_lmbda)
14
+ }
15
+
16
+ context "when there is no prefix" do
17
+ it "does not change the output" do
18
+ expect(subject.to_hash).to include("name" => "undefined")
19
+ end
20
+ end
21
+
22
+ context "when a prefix is defined" do
23
+ let (:prefix) { "bta_" }
24
+
25
+ before :example do
26
+ described_class.log_prefix = prefix
27
+ end
28
+
29
+ subject {
30
+ TransactionLogger::Transaction.new(
31
+ { prefix: described_class.log_prefix, logger: Logger.new(STDOUT), level_threshold: nil }, test_lmbda)
32
+ }
33
+
34
+ after :example do
35
+ described_class.log_prefix = ""
36
+ end
37
+
38
+ it "adds the prefix to every key" do
39
+ expect(subject.to_hash).to include("bta_name" => "undefined")
40
+ end
41
+ end
42
+ end
43
+ end
@@ -74,6 +74,72 @@ describe TransactionLogger do
74
74
  end
75
75
  end
76
76
 
77
+ context "logging options" do
78
+ let(:logger_stub) { double(Logger) }
79
+
80
+ let(:test_logger) {
81
+ Class.new do
82
+ include TransactionLogger
83
+
84
+ def do_something
85
+ raise "Error"
86
+ end
87
+
88
+ def logger
89
+ Logger.new STDOUT
90
+ end
91
+
92
+ add_transaction_log :do_something, name: "my name", context: "my context"
93
+ end
94
+ }
95
+
96
+ it "sets transaction name and context" do
97
+ TransactionLogger::Configure.logger = logger_stub
98
+
99
+ expect(logger_stub).to receive(:error) do |msg|
100
+ expect(msg["context"]).to eq "my context"
101
+ expect(msg["name"]).to eq "my name"
102
+ end
103
+
104
+ test = test_logger.new
105
+ expect { test.do_something }.to raise_error "Error"
106
+ end
107
+ end
108
+
109
+ context "Dynamic context" do
110
+ let(:instance_logger_lambda) {
111
+ Class.new do
112
+ include TransactionLogger
113
+
114
+ def do_something
115
+ logger.info "TEST"
116
+ end
117
+
118
+ def dynamic_context
119
+ "Dynamic Context"
120
+ end
121
+
122
+ def logger
123
+ Logger.new STDOUT
124
+ end
125
+
126
+ add_transaction_log :do_something, context: -> { dynamic_context }
127
+ end
128
+ }
129
+
130
+ it "executes the lambda bound to the logged instance" do
131
+ test = instance_logger_lambda.new
132
+ expect(test).to receive(:dynamic_context).and_call_original
133
+ test.do_something
134
+ end
135
+
136
+ it "doesn't fail the method execution if the lambda eval fails" do
137
+ test = instance_logger_lambda.new
138
+ allow(test).to receive(:dynamic_context).and_raise "Some error"
139
+ expect { test.do_something }.to_not raise_error
140
+ end
141
+ end
142
+
77
143
  subject {
78
144
  TransactionLogger::Transaction.new(
79
145
  { prefix: nil, logger: Logger.new(STDOUT), level_threshold: nil }, test_lmbda)
@@ -112,75 +178,4 @@ describe TransactionLogger do
112
178
  end
113
179
  }
114
180
  end
115
-
116
- describe TransactionLogger::Configure do
117
- describe ".log_prefix" do
118
- context "when there is no prefix" do
119
- it "does not change the output" do
120
- expect(subject.to_hash).to include("name" => "undefined")
121
- end
122
- end
123
-
124
- context "when a prefix is defined" do
125
- let (:prefix) { "bta_" }
126
-
127
- before :example do
128
- described_class.log_prefix = prefix
129
- end
130
-
131
- subject {
132
- TransactionLogger::Transaction.new(
133
- { prefix: described_class.log_prefix, logger: Logger.new(STDOUT), level_threshold: nil }, test_lmbda)
134
- }
135
-
136
- after :example do
137
- described_class.log_prefix = ""
138
- end
139
-
140
- it "adds the prefix to every key" do
141
- expect(subject.to_hash).to include("bta_name" => "undefined")
142
- end
143
- end
144
- end
145
- end
146
-
147
- describe "#run" do
148
- context "when no exception is raised" do
149
- let (:test_lmbda) {
150
- lambda do |_t|
151
- "result"
152
- end
153
- }
154
-
155
- let (:result) { subject.run }
156
-
157
- it "returns lmda" do
158
- expect(result).to eq "result"
159
- end
160
- end
161
-
162
- context "when an exception is raised" do
163
- let (:test_lmbda) {
164
- lambda do |_t|
165
- fail "test error"
166
- end
167
- }
168
-
169
- let (:child) {
170
- TransactionLogger::Transaction.new(
171
- { prefix: nil, logger: Logger.new(STDOUT), level_threshold: nil }, test_lmbda)
172
- }
173
-
174
- let (:result) { subject.run }
175
-
176
- it "raises an exception" do
177
- expect { result }.to raise_error "test error"
178
- end
179
-
180
- it "calls failure" do
181
- expect(subject).to receive(:failure)
182
- result
183
- end
184
- end
185
- end
186
181
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transaction_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Donner
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-08-01 00:00:00.000000000 Z
12
+ date: 2015-08-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -176,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
176
  version: '0'
177
177
  requirements: []
178
178
  rubyforge_project:
179
- rubygems_version: 2.4.3
179
+ rubygems_version: 2.4.5
180
180
  signing_key:
181
181
  specification_version: 4
182
182
  summary: Contextual Business Transaction Logger for Ruby