statsd-instrument 2.9.2 → 3.0.0.pre1

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +0 -11
  3. data/benchmark/send-metrics-to-dev-null-log +4 -2
  4. data/benchmark/send-metrics-to-local-udp-receiver +7 -6
  5. data/lib/statsd/instrument.rb +35 -69
  6. data/lib/statsd/instrument/assertions.rb +14 -14
  7. data/lib/statsd/instrument/client.rb +0 -10
  8. data/lib/statsd/instrument/environment.rb +1 -23
  9. data/lib/statsd/instrument/expectation.rb +14 -14
  10. data/lib/statsd/instrument/helpers.rb +1 -30
  11. data/lib/statsd/instrument/railtie.rb +0 -4
  12. data/lib/statsd/instrument/strict.rb +12 -118
  13. data/lib/statsd/instrument/version.rb +1 -1
  14. data/test/assertions_test.rb +9 -21
  15. data/test/client_test.rb +11 -0
  16. data/test/environment_test.rb +1 -37
  17. data/test/integration_test.rb +9 -24
  18. data/test/statsd_instrumentation_test.rb +25 -50
  19. data/test/statsd_test.rb +2 -29
  20. metadata +4 -26
  21. data/benchmark/datagram-client +0 -40
  22. data/lib/statsd/instrument/backend.rb +0 -18
  23. data/lib/statsd/instrument/backends/capture_backend.rb +0 -32
  24. data/lib/statsd/instrument/backends/logger_backend.rb +0 -20
  25. data/lib/statsd/instrument/backends/null_backend.rb +0 -9
  26. data/lib/statsd/instrument/backends/udp_backend.rb +0 -152
  27. data/lib/statsd/instrument/legacy_client.rb +0 -301
  28. data/lib/statsd/instrument/metric.rb +0 -155
  29. data/test/assertions_on_legacy_client_test.rb +0 -344
  30. data/test/capture_backend_test.rb +0 -26
  31. data/test/compatibility/dogstatsd_datagram_compatibility_test.rb +0 -161
  32. data/test/deprecations_test.rb +0 -139
  33. data/test/logger_backend_test.rb +0 -22
  34. data/test/metric_test.rb +0 -47
  35. data/test/udp_backend_test.rb +0 -228
@@ -3,38 +3,9 @@
3
3
  module StatsD::Instrument::Helpers
4
4
  def capture_statsd_datagrams(client: nil, &block)
5
5
  client ||= StatsD.singleton_client
6
- case client
7
- when StatsD.legacy_singleton_client
8
- capture_statsd_metrics_on_legacy_client(&block)
9
- when StatsD::Instrument::Client
10
- client.capture(&block)
11
- else
12
- raise ArgumentError, "Don't know how to capture StatsD datagrams from #{client.inspect}!"
13
- end
6
+ client.capture(&block)
14
7
  end
15
8
 
16
9
  # For backwards compatibility
17
10
  alias_method :capture_statsd_calls, :capture_statsd_datagrams
18
-
19
- def capture_statsd_metrics_on_legacy_client(&block)
20
- capture_backend = StatsD::Instrument::Backends::CaptureBackend.new
21
- with_capture_backend(capture_backend, &block)
22
- capture_backend.collected_metrics
23
- end
24
-
25
- private
26
-
27
- def with_capture_backend(backend)
28
- if StatsD.legacy_singleton_client.backend.is_a?(StatsD::Instrument::Backends::CaptureBackend)
29
- backend.parent = StatsD.legacy_singleton_client.backend
30
- end
31
-
32
- old_backend = StatsD.legacy_singleton_client.backend
33
- begin
34
- StatsD.legacy_singleton_client.backend = backend
35
- yield
36
- ensure
37
- StatsD.legacy_singleton_client.backend = old_backend
38
- end
39
- end
40
11
  end
@@ -8,8 +8,4 @@ class StatsD::Instrument::Railtie < Rails::Railtie
8
8
  initializer 'statsd-instrument.use_rails_logger' do
9
9
  ::StatsD.logger = Rails.logger
10
10
  end
11
-
12
- initializer 'statsd-instrument.setup_backend', after: 'statsd-instrument.use_rails_logger' do
13
- ::StatsD.backend = ::StatsD::Instrument::Environment.default_backend
14
- end
15
11
  end
@@ -55,9 +55,7 @@ module StatsD
55
55
  super
56
56
  end
57
57
 
58
- def service_check(name, status, tags: nil, no_prefix: false,
59
- hostname: nil, timestamp: nil, message: nil)
60
-
58
+ def service_check(name, status, tags: nil, no_prefix: false, hostname: nil, timestamp: nil, message: nil)
61
59
  super
62
60
  end
63
61
 
@@ -106,133 +104,30 @@ module StatsD
106
104
  end
107
105
  end
108
106
 
109
- module VoidCollectMetric
110
- protected
111
-
112
- def collect_metric(type, name, value, sample_rate:, tags: nil, prefix:, metadata: nil)
113
- super
114
- StatsD::Instrument::VOID
115
- end
116
- end
117
-
118
107
  module StrictMetaprogramming
119
- def statsd_measure(method, name, sample_rate: nil, tags: nil,
120
- no_prefix: false, client: StatsD.singleton_client)
121
-
108
+ def statsd_measure(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
122
109
  check_method_and_metric_name(method, name)
123
-
124
- # Unfortunately, we have to inline the new method implementation because we have to fix the
125
- # Stats.measure call to not use the `as_dist` and `prefix` arguments.
126
- add_to_method(method, name, :measure) do
127
- define_method(method) do |*args, &block|
128
- key = StatsD::Instrument.generate_metric_name(nil, name, self, *args)
129
- client.measure(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix) do
130
- super(*args, &block)
131
- end
132
- end
133
- end
110
+ super
134
111
  end
135
112
 
136
- def statsd_distribution(method, name, sample_rate: nil, tags: nil,
137
- no_prefix: false, client: StatsD.singleton_client)
138
-
113
+ def statsd_distribution(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
139
114
  check_method_and_metric_name(method, name)
140
-
141
- # Unfortunately, we have to inline the new method implementation because we have to fix the
142
- # Stats.distribution call to not use the `prefix` argument.
143
-
144
- add_to_method(method, name, :distribution) do
145
- define_method(method) do |*args, &block|
146
- key = StatsD::Instrument.generate_metric_name(nil, name, self, *args)
147
- client.distribution(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix) do
148
- super(*args, &block)
149
- end
150
- end
151
- end
115
+ super
152
116
  end
153
117
 
154
- def statsd_count_success(method, name, sample_rate: nil, tags: nil,
155
- no_prefix: false, client: StatsD.singleton_client)
156
-
118
+ def statsd_count_success(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
157
119
  check_method_and_metric_name(method, name)
158
-
159
- # Unfortunately, we have to inline the new method implementation because we have to fix the
160
- # Stats.increment call to not use the `prefix` argument.
161
-
162
- add_to_method(method, name, :count_success) do
163
- define_method(method) do |*args, &block|
164
- begin
165
- truthiness = result = super(*args, &block)
166
- rescue
167
- truthiness = false
168
- raise
169
- else
170
- if block_given?
171
- begin
172
- truthiness = yield(result)
173
- rescue
174
- truthiness = false
175
- end
176
- end
177
- result
178
- ensure
179
- suffix = truthiness == false ? 'failure' : 'success'
180
- key = "#{StatsD::Instrument.generate_metric_name(nil, name, self, *args)}.#{suffix}"
181
- client.increment(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix)
182
- end
183
- end
184
- end
120
+ super
185
121
  end
186
122
 
187
- def statsd_count_if(method, name, sample_rate: nil, tags: nil,
188
- no_prefix: false, client: StatsD.singleton_client)
189
-
123
+ def statsd_count_if(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
190
124
  check_method_and_metric_name(method, name)
191
-
192
- # Unfortunately, we have to inline the new method implementation because we have to fix the
193
- # Stats.increment call to not use the `prefix` argument.
194
-
195
- add_to_method(method, name, :count_if) do
196
- define_method(method) do |*args, &block|
197
- begin
198
- truthiness = result = super(*args, &block)
199
- rescue
200
- truthiness = false
201
- raise
202
- else
203
- if block_given?
204
- begin
205
- truthiness = yield(result)
206
- rescue
207
- truthiness = false
208
- end
209
- end
210
- result
211
- ensure
212
- if truthiness
213
- key = StatsD::Instrument.generate_metric_name(nil, name, self, *args)
214
- client.increment(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix)
215
- end
216
- end
217
- end
218
- end
125
+ super
219
126
  end
220
127
 
221
- def statsd_count(method, name, sample_rate: nil, tags: nil,
222
- no_prefix: false, client: StatsD.singleton_client)
223
-
128
+ def statsd_count(method, name, sample_rate: nil, tags: nil, no_prefix: false, client: nil)
224
129
  check_method_and_metric_name(method, name)
225
-
226
- # Unfortunately, we have to inline the new method implementation because we have to fix the
227
- # Stats.increment call to not use the `prefix` argument.
228
-
229
- add_to_method(method, name, :count) do
230
- define_method(method) do |*args, &block|
231
- key = StatsD::Instrument.generate_metric_name(nil, name, self, *args)
232
- client.increment(key, sample_rate: sample_rate, tags: tags, no_prefix: no_prefix)
233
- super(*args, &block)
234
- end
235
- end
130
+ super
236
131
  end
237
132
 
238
133
  private
@@ -250,6 +145,5 @@ module StatsD
250
145
  end
251
146
  end
252
147
 
253
- StatsD.singleton_class.prepend(StatsD::Instrument::Strict)
254
- StatsD::Instrument::LegacyClient.prepend(StatsD::Instrument::VoidCollectMetric)
148
+ StatsD::Instrument::Client.prepend(StatsD::Instrument::Strict)
255
149
  StatsD::Instrument.prepend(StatsD::Instrument::StrictMetaprogramming)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module StatsD
4
4
  module Instrument
5
- VERSION = "2.9.2"
5
+ VERSION = "3.0.0.pre1"
6
6
  end
7
7
  end
@@ -132,55 +132,43 @@ class AssertionsTest < Minitest::Test
132
132
  end
133
133
 
134
134
  def test_assert_statsd_gauge_call_with_numeric_value
135
- @test_case.assert_statsd_gauge('gauge', 42) do
135
+ @test_case.assert_statsd_gauge('gauge', value: 42) do
136
136
  StatsD.gauge('gauge', 42)
137
137
  end
138
138
 
139
- @test_case.assert_statsd_gauge('gauge', '42') do
139
+ @test_case.assert_statsd_gauge('gauge', value: '42') do
140
140
  StatsD.gauge('gauge', 42)
141
141
  end
142
142
 
143
143
  assert_raises(Minitest::Assertion) do
144
- @test_case.assert_statsd_gauge('gauge', 42) do
144
+ @test_case.assert_statsd_gauge('gauge', value: 42) do
145
145
  StatsD.gauge('gauge', 45)
146
146
  end
147
147
  end
148
-
149
- @test_case.assert_statsd_gauge('gauge', value: 42) do
150
- StatsD.gauge('gauge', 42)
151
- end
152
148
  end
153
149
 
154
150
  def test_assert_statsd_set_call_with_string_value
155
- @test_case.assert_statsd_set('set', 12345) do
151
+ @test_case.assert_statsd_set('set', value: 12345) do
156
152
  StatsD.set('set', '12345')
157
153
  end
158
154
 
159
- @test_case.assert_statsd_set('set', '12345') do
155
+ @test_case.assert_statsd_set('set', value: '12345') do
160
156
  StatsD.set('set', '12345')
161
157
  end
162
158
 
163
- @test_case.assert_statsd_set('set', 12345) do
159
+ @test_case.assert_statsd_set('set', value: 12345) do
164
160
  StatsD.set('set', 12345)
165
161
  end
166
162
 
167
- @test_case.assert_statsd_set('set', '12345') do
163
+ @test_case.assert_statsd_set('set', value: '12345') do
168
164
  StatsD.set('set', 12345)
169
165
  end
170
166
 
171
167
  assert_raises(Minitest::Assertion) do
172
- @test_case.assert_statsd_set('set', '42') do
168
+ @test_case.assert_statsd_set('set', value: '42') do
173
169
  StatsD.set('set', 45)
174
170
  end
175
171
  end
176
-
177
- @test_case.assert_statsd_set('set', value: 12345) do
178
- StatsD.set('set', '12345')
179
- end
180
-
181
- @test_case.assert_statsd_set('set', 'wrong_value', value: 12345) do
182
- StatsD.set('set', '12345')
183
- end
184
172
  end
185
173
 
186
174
  def test_tags_will_match_subsets
@@ -297,7 +285,7 @@ class AssertionsTest < Minitest::Test
297
285
  end
298
286
 
299
287
  foo_1_metric = StatsD::Instrument::Expectation.increment('counter', times: 2, tags: ['foo:1'])
300
- foo_2_metric = StatsD::Instrument::Expectation.increment('counter', 1, tags: ['foo:2'])
288
+ foo_2_metric = StatsD::Instrument::Expectation.increment('counter', tags: ['foo:2'])
301
289
  @test_case.assert_statsd_expectations([foo_1_metric, foo_2_metric]) do
302
290
  StatsD.increment('counter', tags: { foo: 1 })
303
291
  StatsD.increment('counter', tags: { foo: 1 })
@@ -186,6 +186,17 @@ class ClientTest < Minitest::Test
186
186
  assert_equal "bar", datagrams[1].name
187
187
  end
188
188
 
189
+ def test_default_tags_normalization
190
+ client = StatsD::Instrument::Client.new(default_tags: { first_tag: 'f|irst_value', second_tag: 'sec,ond_value' })
191
+ datagrams = client.capture do
192
+ client.increment('bar', tags: ['th|ird_#,tag'])
193
+ end
194
+
195
+ assert_includes datagrams.first.tags, 'first_tag:first_value'
196
+ assert_includes datagrams.first.tags, 'second_tag:second_value'
197
+ assert_includes datagrams.first.tags, 'third_#tag'
198
+ end
199
+
189
200
  def test_sampling
190
201
  mock_sink = mock('sink')
191
202
  mock_sink.stubs(:sample?).returns(false, true, false, false, true)
@@ -5,37 +5,6 @@ require 'test_helper'
5
5
  module Rails; end
6
6
 
7
7
  class EnvironmentTest < Minitest::Test
8
- def setup
9
- ENV['STATSD_ADDR'] = nil
10
- ENV['IMPLEMENTATION'] = nil
11
- end
12
-
13
- def test_default_backend_uses_logger_in_development_environment
14
- StatsD::Instrument::Environment.stubs(:environment).returns('development')
15
- assert_instance_of StatsD::Instrument::Backends::LoggerBackend, StatsD::Instrument::Environment.default_backend
16
- end
17
-
18
- def test_default_backend_uses_null_backend_in_test_environment
19
- StatsD::Instrument::Environment.stubs(:environment).returns('test')
20
- assert_instance_of StatsD::Instrument::Backends::NullBackend, StatsD::Instrument::Environment.default_backend
21
- end
22
-
23
- def test_default_backend_uses_udp_backend_in_production_environment
24
- StatsD::Instrument::Environment.stubs(:environment).returns('production')
25
- assert_instance_of StatsD::Instrument::Backends::UDPBackend, StatsD::Instrument::Environment.default_backend
26
- end
27
-
28
- def test_default_backend_uses_environment_variables_in_production_environment
29
- StatsD::Instrument::Environment.stubs(:environment).returns('production')
30
- ENV['STATSD_ADDR'] = '127.0.0.1:1234'
31
- ENV['STATSD_IMPLEMENTATION'] = 'datadog'
32
-
33
- backend = StatsD::Instrument::Environment.default_backend
34
- assert_equal '127.0.0.1', backend.host
35
- assert_equal 1234, backend.port
36
- assert_equal :datadog, backend.implementation
37
- end
38
-
39
8
  def test_environment_prefers_statsd_env_if_available
40
9
  env = StatsD::Instrument::Environment.new(
41
10
  'STATSD_ENV' => 'set_from_STATSD_ENV',
@@ -62,13 +31,8 @@ class EnvironmentTest < Minitest::Test
62
31
  assert_equal 'development', env.environment
63
32
  end
64
33
 
65
- def test_legacy_client_is_default_client
34
+ def test_client_returns_client_instance
66
35
  env = StatsD::Instrument::Environment.new({})
67
- assert_kind_of StatsD::Instrument::LegacyClient, env.client
68
- end
69
-
70
- def test_client_returns_new_client_if_environment_asks_for_it
71
- env = StatsD::Instrument::Environment.new('STATSD_USE_NEW_CLIENT' => '1')
72
36
  assert_kind_of StatsD::Instrument::Client, env.client
73
37
  end
74
38
 
@@ -6,39 +6,24 @@ class IntegrationTest < Minitest::Test
6
6
  def setup
7
7
  @server = UDPSocket.new
8
8
  @server.bind('localhost', 0)
9
- port = @server.addr[1]
10
9
 
11
- @old_backend = StatsD.backend
12
- StatsD.backend = StatsD::Instrument::Backends::UDPBackend.new("localhost:#{port}")
10
+ @env = StatsD::Instrument::Environment.new(
11
+ 'STATSD_ADDR' => "#{@server.addr[2]}:#{@server.addr[1]}",
12
+ 'STATSD_IMPLEMENTATION' => 'dogstatsd',
13
+ 'STATSD_ENV' => 'production',
14
+ )
15
+
16
+ @old_client = StatsD.singleton_client
17
+ StatsD.singleton_client = @env.client
13
18
  end
14
19
 
15
20
  def teardown
21
+ StatsD.singleton_client = @old_client
16
22
  @server.close
17
- StatsD.backend = @old_backend
18
23
  end
19
24
 
20
25
  def test_live_local_udp_socket
21
26
  StatsD.increment('counter')
22
27
  assert_equal "counter:1|c", @server.recvfrom(100).first
23
28
  end
24
-
25
- def test_synchronize_in_exit_handler_handles_thread_error_and_exits_cleanly
26
- pid = fork do
27
- Signal.trap('TERM') do
28
- StatsD.increment('exiting')
29
- Process.exit!(0)
30
- end
31
-
32
- sleep 100
33
- end
34
-
35
- Process.kill('TERM', pid)
36
- _, exit_status = Process.waitpid2(pid)
37
-
38
- assert_equal 0, exit_status, "The forked process did not exit cleanly"
39
- assert_equal "exiting:1|c", @server.recvfrom_nonblock(100).first
40
-
41
- rescue NotImplementedError
42
- pass("Fork is not implemented on #{RUBY_PLATFORM}")
43
- end
44
29
  end
@@ -326,30 +326,42 @@ class StatsDInstrumentationTest < Minitest::Test
326
326
  end
327
327
 
328
328
  def test_statsd_respects_global_prefix_changes
329
- StatsD.prefix = 'Foo'
329
+ old_client = StatsD.singleton_client
330
+
331
+ StatsD.singleton_client = StatsD::Instrument::Client.new(prefix: 'Foo')
330
332
  ActiveMerchant::Gateway.singleton_class.extend StatsD::Instrument
331
333
  ActiveMerchant::Gateway.singleton_class.statsd_count :sync, 'ActiveMerchant.Gateway.sync'
332
- StatsD.prefix = 'Quc'
334
+ StatsD.singleton_client = StatsD::Instrument::Client.new(prefix: 'Quc')
333
335
 
334
- statsd_calls = capture_statsd_calls { ActiveMerchant::Gateway.sync }
335
- assert_equal 1, statsd_calls.length
336
- assert_equal "Quc.ActiveMerchant.Gateway.sync", statsd_calls.first.name
336
+ datagrams = capture_statsd_calls { ActiveMerchant::Gateway.sync }
337
+ assert_equal 1, datagrams.length
338
+ assert_equal "Quc.ActiveMerchant.Gateway.sync", datagrams.first.name
337
339
  ensure
338
- StatsD.prefix = nil
340
+ StatsD.singleton_client = old_client
339
341
  ActiveMerchant::Gateway.singleton_class.statsd_remove_count :sync, 'ActiveMerchant.Gateway.sync'
340
342
  end
341
343
 
344
+ def test_statsd_count_with_injected_client
345
+ client = StatsD::Instrument::Client.new(prefix: 'prefix')
346
+
347
+ ActiveMerchant::Gateway.statsd_count(:ssl_post, 'ActiveMerchant.Gateway.ssl_post', client: client)
348
+ assert_statsd_increment('prefix.ActiveMerchant.Gateway.ssl_post', client: client) do
349
+ ActiveMerchant::Gateway.new.purchase(true)
350
+ end
351
+ ensure
352
+ ActiveMerchant::Gateway.statsd_remove_count :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
353
+ end
354
+
342
355
  def test_statsd_macro_can_disable_prefix
343
- StatsD.prefix = 'Foo'
356
+ client = StatsD::Instrument::Client.new(prefix: 'foo')
344
357
  ActiveMerchant::Gateway.singleton_class.extend StatsD::Instrument
345
- ActiveMerchant::Gateway.singleton_class.statsd_count_success :sync, 'ActiveMerchant.Gateway.sync', no_prefix: true
346
- StatsD.prefix = 'Quc'
358
+ ActiveMerchant::Gateway.singleton_class.statsd_count_success(:sync,
359
+ 'ActiveMerchant.Gateway.sync', no_prefix: true, client: client)
347
360
 
348
- statsd_calls = capture_statsd_calls { ActiveMerchant::Gateway.sync }
349
- assert_equal 1, statsd_calls.length
350
- assert_equal "ActiveMerchant.Gateway.sync.success", statsd_calls.first.name
361
+ datagrams = client.capture { ActiveMerchant::Gateway.sync }
362
+ assert_equal 1, datagrams.length
363
+ assert_equal "ActiveMerchant.Gateway.sync.success", datagrams.first.name
351
364
  ensure
352
- StatsD.prefix = nil
353
365
  ActiveMerchant::Gateway.singleton_class.statsd_remove_count_success :sync, 'ActiveMerchant.Gateway.sync'
354
366
  end
355
367
 
@@ -417,43 +429,6 @@ class StatsDInstrumentationTest < Minitest::Test
417
429
  end
418
430
  end
419
431
 
420
- def test_statsd_measure_with_new_client
421
- old_client = StatsD.singleton_client
422
- StatsD.singleton_client = StatsD::Instrument::Client.new
423
-
424
- ActiveMerchant::UniqueGateway.statsd_measure :ssl_post, 'ActiveMerchant.Gateway.ssl_post', sample_rate: 0.3
425
- assert_statsd_measure('ActiveMerchant.Gateway.ssl_post', sample_rate: 0.3) do
426
- ActiveMerchant::UniqueGateway.new.purchase(true)
427
- end
428
- ensure
429
- ActiveMerchant::UniqueGateway.statsd_remove_measure :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
430
- StatsD.singleton_client = old_client
431
- end
432
-
433
- def test_statsd_count_with_new_client
434
- old_client = StatsD.singleton_client
435
- StatsD.singleton_client = StatsD::Instrument::Client.new
436
-
437
- ActiveMerchant::Gateway.statsd_count :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
438
- assert_statsd_increment('ActiveMerchant.Gateway.ssl_post') do
439
- ActiveMerchant::Gateway.new.purchase(true)
440
- end
441
- ensure
442
- ActiveMerchant::Gateway.statsd_remove_count :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
443
- StatsD.singleton_client = old_client
444
- end
445
-
446
- def test_statsd_count_with_injected_client
447
- client = StatsD::Instrument::Client.new(prefix: 'prefix')
448
-
449
- ActiveMerchant::Gateway.statsd_count(:ssl_post, 'ActiveMerchant.Gateway.ssl_post', client: client)
450
- assert_statsd_increment('prefix.ActiveMerchant.Gateway.ssl_post', client: client) do
451
- ActiveMerchant::Gateway.new.purchase(true)
452
- end
453
- ensure
454
- ActiveMerchant::Gateway.statsd_remove_count :ssl_post, 'ActiveMerchant.Gateway.ssl_post'
455
- end
456
-
457
432
  private
458
433
 
459
434
  def assert_scope(klass, method, expected_scope)