appsignal 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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