appsignal 0.4.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.
Files changed (59) hide show
  1. data/.gitignore +19 -0
  2. data/.rvmrc +1 -0
  3. data/.travis.yml +30 -0
  4. data/Gemfile +3 -0
  5. data/LICENCE +20 -0
  6. data/README.md +48 -0
  7. data/Rakefile +52 -0
  8. data/appsignal.gemspec +33 -0
  9. data/bin/appsignal +13 -0
  10. data/config/appsignal.yml +8 -0
  11. data/gemfiles/3.0.gemfile +16 -0
  12. data/gemfiles/3.1.gemfile +16 -0
  13. data/gemfiles/3.2.gemfile +16 -0
  14. data/gemfiles/edge.gemfile +16 -0
  15. data/lib/appsignal.rb +45 -0
  16. data/lib/appsignal/agent.rb +104 -0
  17. data/lib/appsignal/auth_check.rb +19 -0
  18. data/lib/appsignal/capistrano.rb +41 -0
  19. data/lib/appsignal/cli.rb +118 -0
  20. data/lib/appsignal/config.rb +30 -0
  21. data/lib/appsignal/exception_notification.rb +25 -0
  22. data/lib/appsignal/marker.rb +35 -0
  23. data/lib/appsignal/middleware.rb +30 -0
  24. data/lib/appsignal/railtie.rb +19 -0
  25. data/lib/appsignal/transaction.rb +77 -0
  26. data/lib/appsignal/transaction/faulty_request_formatter.rb +30 -0
  27. data/lib/appsignal/transaction/params_sanitizer.rb +36 -0
  28. data/lib/appsignal/transaction/regular_request_formatter.rb +11 -0
  29. data/lib/appsignal/transaction/slow_request_formatter.rb +34 -0
  30. data/lib/appsignal/transaction/transaction_formatter.rb +93 -0
  31. data/lib/appsignal/transmitter.rb +53 -0
  32. data/lib/appsignal/version.rb +3 -0
  33. data/lib/generators/appsignal/USAGE +8 -0
  34. data/lib/generators/appsignal/appsignal_generator.rb +70 -0
  35. data/lib/generators/appsignal/templates/appsignal.yml +4 -0
  36. data/log/.gitkeep +0 -0
  37. data/resources/cacert.pem +3849 -0
  38. data/spec/appsignal/agent_spec.rb +259 -0
  39. data/spec/appsignal/auth_check_spec.rb +36 -0
  40. data/spec/appsignal/capistrano_spec.rb +81 -0
  41. data/spec/appsignal/cli_spec.rb +124 -0
  42. data/spec/appsignal/config_spec.rb +40 -0
  43. data/spec/appsignal/exception_notification_spec.rb +12 -0
  44. data/spec/appsignal/inactive_railtie_spec.rb +30 -0
  45. data/spec/appsignal/marker_spec.rb +83 -0
  46. data/spec/appsignal/middleware_spec.rb +73 -0
  47. data/spec/appsignal/railtie_spec.rb +54 -0
  48. data/spec/appsignal/transaction/faulty_request_formatter_spec.rb +49 -0
  49. data/spec/appsignal/transaction/params_sanitizer_spec.rb +68 -0
  50. data/spec/appsignal/transaction/regular_request_formatter_spec.rb +14 -0
  51. data/spec/appsignal/transaction/slow_request_formatter_spec.rb +76 -0
  52. data/spec/appsignal/transaction/transaction_formatter_spec.rb +178 -0
  53. data/spec/appsignal/transaction_spec.rb +191 -0
  54. data/spec/appsignal/transmitter_spec.rb +64 -0
  55. data/spec/appsignal_spec.rb +66 -0
  56. data/spec/generators/appsignal/appsignal_generator_spec.rb +222 -0
  57. data/spec/spec_helper.rb +85 -0
  58. data/spec/support/delegate_matcher.rb +39 -0
  59. metadata +247 -0
@@ -0,0 +1,222 @@
1
+ require 'spec_helper'
2
+ require 'generator_spec/test_case'
3
+ require './lib/generators/appsignal/appsignal_generator'
4
+
5
+ # The generator doesn't know we're testing
6
+ # So change the path while running the generator
7
+ # Change it back upon completion
8
+ def run_generator_in_tmp(args=[])
9
+ FileUtils.cd("spec/tmp") do
10
+ @output = run_generator(args)
11
+ end
12
+ end
13
+
14
+ describe AppsignalGenerator do
15
+ include GeneratorSpec::TestCase
16
+ destination File.expand_path("../../../tmp", __FILE__)
17
+
18
+ context "with key" do
19
+ context "known key" do
20
+ before do
21
+ prepare_destination
22
+ authcheck = mock()
23
+ Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
24
+ authcheck.should_receive(:perform).and_return('200')
25
+ run_generator_in_tmp %w(my_app_key)
26
+ end
27
+
28
+ specify "should mention successful auth check" do
29
+ @output.should include('AppSignal has confirmed authorisation!')
30
+ end
31
+ end
32
+
33
+ context "invalid key" do
34
+ before do
35
+ prepare_destination
36
+ authcheck = mock()
37
+ Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
38
+ authcheck.should_receive(:perform).and_return('401')
39
+ run_generator_in_tmp %w(my_app_key)
40
+ end
41
+
42
+ specify "should mention invalid key" do
43
+ @output.should include('Push key not valid with AppSignal...')
44
+ end
45
+ end
46
+
47
+ context "failed check" do
48
+ before do
49
+ prepare_destination
50
+ authcheck = mock()
51
+ Appsignal::AuthCheck.should_receive(:new).and_return(authcheck)
52
+ authcheck.should_receive(:perform).and_return('500')
53
+ authcheck.should_receive(:uri).and_return('auth')
54
+ run_generator_in_tmp %w(my_app_key)
55
+ end
56
+
57
+ specify "should mention failed check" do
58
+ @output.should include('Could not confirm authorisation: 500 at auth')
59
+ end
60
+ end
61
+
62
+ context "internal failure" do
63
+ before do
64
+ prepare_destination
65
+ run_generator_in_tmp %w(my_app_key)
66
+ end
67
+
68
+ specify "should mention internal failure" do
69
+ @output.should include('Something went wrong while trying to '\
70
+ 'authenticate with AppSignal:')
71
+ end
72
+ end
73
+ end
74
+
75
+ context "without key" do
76
+ before do
77
+ prepare_destination
78
+ run_generator_in_tmp %w()
79
+ end
80
+
81
+ specify "no config files are created" do
82
+ destination_root.should have_structure {
83
+ directory 'config' do
84
+ no_file 'appsignal.yml'
85
+ no_file 'deploy.rb'
86
+ end
87
+ }
88
+ end
89
+ end
90
+
91
+ context "without capistrano" do
92
+ before :all do
93
+ prepare_destination
94
+ run_generator_in_tmp %w(my_app_key)
95
+ end
96
+
97
+ specify "config file is created" do
98
+ destination_root.should have_structure {
99
+ directory 'config' do
100
+ file 'appsignal.yml' do
101
+ contains 'production:'
102
+ contains 'api_key: "my_app_key"'
103
+ end
104
+ no_file 'deploy.rb'
105
+ end
106
+ }
107
+ end
108
+
109
+ specify "should mention the deploy task" do
110
+ @output.should include('No capistrano setup detected!')
111
+ @output.should include('appsignal notify_of_deploy -h')
112
+ end
113
+ end
114
+
115
+ context "with capistrano" do
116
+ before :all do
117
+ prepare_destination
118
+ cap_file = File.expand_path('Capfile', destination_root)
119
+ File.open(cap_file, 'w') {}
120
+ FileUtils.mkdir(File.expand_path('config', destination_root))
121
+ deploy_file = File.expand_path(File.join('config', 'deploy.rb'),
122
+ destination_root)
123
+ File.open(deploy_file, 'w') {}
124
+ run_generator_in_tmp %w(my_app_key)
125
+ end
126
+
127
+ specify "config file is created and capistrano deploy file modified" do
128
+ destination_root.should have_structure {
129
+ file 'Capfile'
130
+ directory 'config' do
131
+ file 'appsignal.yml'
132
+ file 'deploy.rb' do
133
+ contains "require 'appsignal/capistrano'"
134
+ end
135
+ end
136
+ }
137
+ end
138
+
139
+ specify "should not mention the deploy task" do
140
+ @output.should_not include('No capistrano setup detected!')
141
+ @output.should_not include('appsignal notify_of_deploy -h')
142
+ end
143
+ end
144
+
145
+ context "with custom environment" do
146
+ before do
147
+ prepare_destination
148
+ run_generator_in_tmp %w(my_app_key --environment=development)
149
+ end
150
+
151
+ specify "config file is created" do
152
+ destination_root.should have_structure {
153
+ directory 'config' do
154
+ file 'appsignal.yml' do
155
+ contains 'development:'
156
+ contains 'api_key: "my_app_key"'
157
+ end
158
+ no_file 'deploy.rb'
159
+ end
160
+ }
161
+ end
162
+ end
163
+
164
+ context "with multiple environments" do
165
+ context "with new environment" do
166
+ before :all do
167
+ prepare_destination
168
+ FileUtils.mkdir(File.expand_path('config', destination_root))
169
+ config_file = File.join('config', 'appsignal.yml')
170
+ File.open(File.expand_path(config_file, destination_root), 'w') do |f|
171
+ f.write("production:\n api_key: 111")
172
+ end
173
+ run_generator_in_tmp %w(my_app_key --environment=development)
174
+ end
175
+
176
+ specify "config file is created" do
177
+ destination_root.should have_structure {
178
+ directory 'config' do
179
+ file 'appsignal.yml' do
180
+ contains 'production:'
181
+ contains "\ndevelopment:"
182
+ contains 'api_key: "my_app_key"'
183
+ end
184
+ no_file 'deploy.rb'
185
+ end
186
+ }
187
+ end
188
+
189
+ specify "should not give error about conflicting environment" do
190
+ @output.should_not include('error Environment already setup')
191
+ end
192
+ end
193
+
194
+ context "with existing environment" do
195
+ before :all do
196
+ prepare_destination
197
+ FileUtils.mkdir(File.expand_path('config', destination_root))
198
+ config_file = File.join('config', 'appsignal.yml')
199
+ File.open(File.expand_path(config_file, destination_root), 'w') do |f|
200
+ f.write("development:\n api_key: \"111\"")
201
+ end
202
+ run_generator_in_tmp %w(my_app_key --environment=development)
203
+ end
204
+
205
+ specify "config file is created" do
206
+ destination_root.should have_structure {
207
+ directory 'config' do
208
+ file 'appsignal.yml' do
209
+ contains "development:"
210
+ contains 'api_key: "111"'
211
+ end
212
+ no_file 'deploy.rb'
213
+ end
214
+ }
215
+ end
216
+
217
+ specify "should give error about conflicting environment" do
218
+ @output.should include('error Environment already setup')
219
+ end
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,85 @@
1
+ require 'rspec'
2
+ require 'rails'
3
+ require 'action_controller/railtie'
4
+
5
+ Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
6
+
7
+ module Rails
8
+ class Application
9
+ end
10
+ end
11
+
12
+ module MyApp
13
+ class Application < Rails::Application
14
+ config.active_support.deprecation = proc { |message, stack| }
15
+ end
16
+ end
17
+
18
+ require 'appsignal'
19
+
20
+ RSpec.configure do |config|
21
+ end
22
+
23
+ def transaction_with_exception
24
+ appsignal_transaction.tap do |o|
25
+ begin
26
+ raise ArgumentError, 'oh no'
27
+ rescue ArgumentError => exception
28
+ env = {}
29
+ o.add_exception(
30
+ Appsignal::ExceptionNotification.new(env, exception)
31
+ )
32
+ end
33
+ end
34
+ end
35
+
36
+ def regular_transaction
37
+ appsignal_transaction(:process_action_event => create_process_action_event)
38
+ end
39
+
40
+ def slow_transaction
41
+ appsignal_transaction(
42
+ :process_action_event => create_process_action_event(nil, nil, Time.parse('01-01-2001 10:01:00'))
43
+ )
44
+ end
45
+
46
+ def appsignal_transaction(args = {})
47
+ process_action_event = args.delete(:process_action_event)
48
+ events = args.delete(:events) || [create_process_action_event(name='query.mongoid')]
49
+ exception = args.delete(:exception)
50
+ Appsignal::Transaction.create(
51
+ '1',
52
+ {
53
+ 'HTTP_USER_AGENT' => 'IE6',
54
+ 'SERVER_NAME' => 'localhost',
55
+ 'action_dispatch.routes' => 'not_available'
56
+ }.merge(args)
57
+ ).tap do |o|
58
+ o.set_process_action_event(process_action_event)
59
+ o.add_exception(exception)
60
+ events.each { |event| o.add_event(event) }
61
+ end
62
+ end
63
+
64
+ def create_process_action_event(name=nil, start=nil, ending=nil, tid=nil, payload=nil)
65
+ ActiveSupport::Notifications::Event.new(
66
+ name || 'process_action.action_controller',
67
+ start || Time.parse("01-01-2001 10:00:00"),
68
+ ending || Time.parse("01-01-2001 10:00:01"),
69
+ tid || '1',
70
+ payload || create_payload
71
+ )
72
+ end
73
+
74
+ def create_payload(args = {})
75
+ {
76
+ :path => '/blog',
77
+ :action => 'show',
78
+ :controller => 'BlogPostsController',
79
+ :request_format => 'html',
80
+ :request_method => "GET",
81
+ :status => '200',
82
+ :view_runtime => 500,
83
+ :db_runtime => 500
84
+ }.merge(args)
85
+ end
@@ -0,0 +1,39 @@
1
+ # RSpec matcher to spec delegations.
2
+ #
3
+ # Usage:
4
+ #
5
+ # describe Post do
6
+ # it { should delegate(:name).to(:author).with_prefix } # post.author_name
7
+ # it { should delegate(:month).to(:created_at) }
8
+ # it { should delegate(:year).to(:created_at) }
9
+ # end
10
+ RSpec::Matchers.define :delegate do |method|
11
+ match do |delegator|
12
+ @method = @prefix ? :"#{@to}_#{method}" : method
13
+ @delegator = delegator
14
+ begin
15
+ @delegator.send(@to)
16
+ rescue NoMethodError
17
+ raise "#{@delegator} does not respond to #{@to}!"
18
+ end
19
+ @delegator.stub(@to => double('receiver'))
20
+ @delegator.send(@to).stub(method => :called)
21
+ @delegator.send(@method) == :called
22
+ end
23
+
24
+ description do
25
+ "delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
26
+ end
27
+
28
+ failure_message_for_should do |text|
29
+ "expected #{@delegator} to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
30
+ end
31
+
32
+ failure_message_for_should_not do |text|
33
+ "expected #{@delegator} not to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
34
+ end
35
+
36
+ chain(:to) { |receiver| @to = receiver }
37
+ chain(:with_prefix) { @prefix = true }
38
+
39
+ end
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appsignal
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Robert Beekman
9
+ - Steven Weller
10
+ - Thijs Cadier
11
+ - Ron Cadier
12
+ - Jacob Vosmaer
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+ date: 2013-02-22 00:00:00.000000000 Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: rails
20
+ requirement: !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ~>
24
+ - !ruby/object:Gem::Version
25
+ version: '3'
26
+ type: :runtime
27
+ prerelease: false
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '3'
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ requirement: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ - !ruby/object:Gem::Dependency
51
+ name: json
52
+ requirement: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ - !ruby/object:Gem::Dependency
67
+ name: rack
68
+ requirement: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec
84
+ requirement: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: capistrano
100
+ requirement: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: generator_spec
116
+ requirement: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ description: The official appsignal.com gem
131
+ email:
132
+ - contact@appsignal.com
133
+ executables:
134
+ - appsignal
135
+ extensions: []
136
+ extra_rdoc_files: []
137
+ files:
138
+ - .gitignore
139
+ - .rvmrc
140
+ - .travis.yml
141
+ - Gemfile
142
+ - LICENCE
143
+ - README.md
144
+ - Rakefile
145
+ - appsignal.gemspec
146
+ - bin/appsignal
147
+ - config/appsignal.yml
148
+ - gemfiles/3.0.gemfile
149
+ - gemfiles/3.1.gemfile
150
+ - gemfiles/3.2.gemfile
151
+ - gemfiles/edge.gemfile
152
+ - lib/appsignal.rb
153
+ - lib/appsignal/agent.rb
154
+ - lib/appsignal/auth_check.rb
155
+ - lib/appsignal/capistrano.rb
156
+ - lib/appsignal/cli.rb
157
+ - lib/appsignal/config.rb
158
+ - lib/appsignal/exception_notification.rb
159
+ - lib/appsignal/marker.rb
160
+ - lib/appsignal/middleware.rb
161
+ - lib/appsignal/railtie.rb
162
+ - lib/appsignal/transaction.rb
163
+ - lib/appsignal/transaction/faulty_request_formatter.rb
164
+ - lib/appsignal/transaction/params_sanitizer.rb
165
+ - lib/appsignal/transaction/regular_request_formatter.rb
166
+ - lib/appsignal/transaction/slow_request_formatter.rb
167
+ - lib/appsignal/transaction/transaction_formatter.rb
168
+ - lib/appsignal/transmitter.rb
169
+ - lib/appsignal/version.rb
170
+ - lib/generators/appsignal/USAGE
171
+ - lib/generators/appsignal/appsignal_generator.rb
172
+ - lib/generators/appsignal/templates/appsignal.yml
173
+ - log/.gitkeep
174
+ - resources/cacert.pem
175
+ - spec/appsignal/agent_spec.rb
176
+ - spec/appsignal/auth_check_spec.rb
177
+ - spec/appsignal/capistrano_spec.rb
178
+ - spec/appsignal/cli_spec.rb
179
+ - spec/appsignal/config_spec.rb
180
+ - spec/appsignal/exception_notification_spec.rb
181
+ - spec/appsignal/inactive_railtie_spec.rb
182
+ - spec/appsignal/marker_spec.rb
183
+ - spec/appsignal/middleware_spec.rb
184
+ - spec/appsignal/railtie_spec.rb
185
+ - spec/appsignal/transaction/faulty_request_formatter_spec.rb
186
+ - spec/appsignal/transaction/params_sanitizer_spec.rb
187
+ - spec/appsignal/transaction/regular_request_formatter_spec.rb
188
+ - spec/appsignal/transaction/slow_request_formatter_spec.rb
189
+ - spec/appsignal/transaction/transaction_formatter_spec.rb
190
+ - spec/appsignal/transaction_spec.rb
191
+ - spec/appsignal/transmitter_spec.rb
192
+ - spec/appsignal_spec.rb
193
+ - spec/generators/appsignal/appsignal_generator_spec.rb
194
+ - spec/spec_helper.rb
195
+ - spec/support/delegate_matcher.rb
196
+ homepage: http://github.com/80beans/appsignal
197
+ licenses: []
198
+ post_install_message:
199
+ rdoc_options: []
200
+ require_paths:
201
+ - lib
202
+ required_ruby_version: !ruby/object:Gem::Requirement
203
+ none: false
204
+ requirements:
205
+ - - ! '>='
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ segments:
209
+ - 0
210
+ hash: -2703450297702771893
211
+ required_rubygems_version: !ruby/object:Gem::Requirement
212
+ none: false
213
+ requirements:
214
+ - - ! '>='
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ segments:
218
+ - 0
219
+ hash: -2703450297702771893
220
+ requirements: []
221
+ rubyforge_project:
222
+ rubygems_version: 1.8.23
223
+ signing_key:
224
+ specification_version: 3
225
+ summary: Logs performance and exception data from your app toappsignal.com
226
+ test_files:
227
+ - spec/appsignal/agent_spec.rb
228
+ - spec/appsignal/auth_check_spec.rb
229
+ - spec/appsignal/capistrano_spec.rb
230
+ - spec/appsignal/cli_spec.rb
231
+ - spec/appsignal/config_spec.rb
232
+ - spec/appsignal/exception_notification_spec.rb
233
+ - spec/appsignal/inactive_railtie_spec.rb
234
+ - spec/appsignal/marker_spec.rb
235
+ - spec/appsignal/middleware_spec.rb
236
+ - spec/appsignal/railtie_spec.rb
237
+ - spec/appsignal/transaction/faulty_request_formatter_spec.rb
238
+ - spec/appsignal/transaction/params_sanitizer_spec.rb
239
+ - spec/appsignal/transaction/regular_request_formatter_spec.rb
240
+ - spec/appsignal/transaction/slow_request_formatter_spec.rb
241
+ - spec/appsignal/transaction/transaction_formatter_spec.rb
242
+ - spec/appsignal/transaction_spec.rb
243
+ - spec/appsignal/transmitter_spec.rb
244
+ - spec/appsignal_spec.rb
245
+ - spec/generators/appsignal/appsignal_generator_spec.rb
246
+ - spec/spec_helper.rb
247
+ - spec/support/delegate_matcher.rb