appsignal 0.11.13.beta.1 → 0.11.13.beta.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a2d6b6b69b1d8d66673b8322f59914d9b0ee411e
4
+ data.tar.gz: 1f10620110c8acc23fb9c0bfdd6eba8e027d262e
5
+ SHA512:
6
+ metadata.gz: 968ef086fccf1833f3f6049dc16b800c8488069252a700424bc98d03cb58164f2ebd0d4b0a11bcba7464b1d9f2af67e1482d78790886c4fa76be117068263ad0
7
+ data.tar.gz: 96225881c0898a7a0febb304cd0253cdf5237729c1b5e89af777ac15bf08845b9ea1c7943ad834b02e638f3810bfdfd92210f346df8a8795b6410f1b2c582502
data/CHANGELOG.md CHANGED
@@ -1,7 +1,13 @@
1
1
  # 0.11.13
2
- * Configure Net::HTTP to only use TLS
2
+ * Add Padrino support
3
+ * Add Rake task monitoring
3
4
  * Add http proxy support
5
+ * Configure Net::HTTP to only use TLS
4
6
  * Don't send queue if there is no content
7
+ * Don't retry transmission when response code is 400 (no content)
8
+ * Display warning message when attempting to send a non-exception to `send_exception`
9
+ * Fix capistrano 2 detection
10
+ * Fix issue with Sinatra integration attempting to attach an exception to a transaction that doesn't exist.
5
11
 
6
12
  # 0.11.12
7
13
  * Sanitizer will no longer inspect unknown objects, since implementations of inspect sometimes trigger unexpected behavior.
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'padrino', '~> 0.12.0'
4
+
5
+ gem 'generator_spec'
6
+
7
+ gemspec :path => '../'
data/lib/appsignal.rb CHANGED
@@ -102,6 +102,10 @@ module Appsignal
102
102
 
103
103
  def send_exception(exception, tags=nil)
104
104
  return if !active? || is_ignored_exception?(exception)
105
+ unless exception.is_a?(Exception)
106
+ logger.error('Can\'t send exception, given value is not an exception')
107
+ return
108
+ end
105
109
  transaction = Appsignal::Transaction.create(SecureRandom.uuid, ENV)
106
110
  transaction.add_exception(exception)
107
111
  transaction.set_tags(tags) if tags
@@ -203,6 +203,9 @@ module Appsignal
203
203
  Appsignal.logger.error 'API token cannot be authorized'
204
204
  shutdown(false, 401)
205
205
  true
206
+ when 400
207
+ Appsignal.logger.error 'Empty body sent'
208
+ true
206
209
  else
207
210
  Appsignal.logger.error "Unknown Appsignal response code: '#{code}'"
208
211
  false
@@ -1,6 +1,7 @@
1
1
  require 'appsignal'
2
+ require 'capistrano/version'
2
3
 
3
- if defined?(Capistrano::VERSION)
4
+ if defined?(Capistrano::VERSION) && Gem::Version.new(Capistrano::VERSION) >= Gem::Version.new(3)
4
5
  # Capistrano 3+
5
6
  load File.expand_path('../integrations/capistrano/appsignal.cap', __FILE__)
6
7
  else
@@ -0,0 +1,49 @@
1
+ require 'appsignal'
2
+
3
+ module Appsignal::Integrations
4
+ module PadrinoPlugin
5
+ def self.init
6
+ Appsignal.logger.info("Loading Padrino (#{Padrino::VERSION}) integration")
7
+
8
+ root = Padrino.mounted_root
9
+ Appsignal.config = Appsignal::Config.new(root, Padrino.env)
10
+
11
+ Appsignal.start_logger(File.join(root, 'log'))
12
+ Appsignal.start
13
+
14
+ if Appsignal.active?
15
+ Padrino.use(Appsignal::Rack::Listener)
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ module Padrino::Routing::InstanceMethods
22
+ alias route_without_appsignal route!
23
+
24
+ def route!(base = settings, pass_block = nil)
25
+ if env['sinatra.static_file']
26
+ route_without_appsignal(base, pass_block)
27
+ else
28
+ payload = {
29
+ :params => request.params,
30
+ :session => request.session,
31
+ :method => request.request_method,
32
+ :path => request.path
33
+ }
34
+ ActiveSupport::Notifications.instrument('process_action.padrino', payload) do |payload|
35
+ begin
36
+ route_without_appsignal(base, pass_block)
37
+ rescue => e
38
+ Appsignal.add_exception(e); raise e
39
+ ensure
40
+ payload[:action] = "#{settings.name}:#{request.controller}##{request.action}"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ Padrino.after_load do
48
+ Appsignal::Integrations::PadrinoPlugin.init
49
+ end
@@ -0,0 +1,21 @@
1
+ module Rake
2
+ class Task
3
+ alias_method :invoke_without_appsignal, :invoke
4
+
5
+ def invoke(*args)
6
+ transaction = Appsignal::Transaction.create(SecureRandom.uuid, ENV)
7
+ transaction.set_kind('background_job')
8
+ transaction.set_action(name)
9
+
10
+ invoke_without_appsignal(*args)
11
+ rescue => exception
12
+ unless Appsignal.is_ignored_exception?(exception)
13
+ transaction.add_exception(exception)
14
+ end
15
+ raise exception
16
+ ensure
17
+ transaction.complete!
18
+ Appsignal.agent.send_queue if Appsignal.active?
19
+ end
20
+ end
21
+ end
@@ -7,6 +7,14 @@ module Appsignal
7
7
  end
8
8
 
9
9
  def call(env)
10
+ if Appsignal.active?
11
+ call_with_appsignal_monitoring(env)
12
+ else
13
+ @app.call(env)
14
+ end
15
+ end
16
+
17
+ def call_with_appsignal_monitoring(env)
10
18
  ActiveSupport::Notifications.instrument(
11
19
  'process_action.sinatra',
12
20
  raw_payload(env)
@@ -68,6 +68,14 @@ module Appsignal
68
68
  @paused = false
69
69
  end
70
70
 
71
+ def set_kind(kind)
72
+ @kind = kind
73
+ end
74
+
75
+ def set_action(action)
76
+ @action = action
77
+ end
78
+
71
79
  def set_process_action_event(event)
72
80
  return unless event && event.payload
73
81
  @process_action_event = event.dup
@@ -95,7 +103,7 @@ module Appsignal
95
103
  def add_exception(ex=nil)
96
104
  return unless ex
97
105
  Appsignal.logger.debug("Adding #{ex.class.name} to transaction: #{request_id}")
98
- @time = Time.now.utc.to_f
106
+ @time = Time.now.utc.to_f
99
107
  @exception = {
100
108
  :exception => ex.class.name,
101
109
  :message => ex.message,
@@ -26,6 +26,7 @@ module Appsignal
26
26
  :log_entry => {
27
27
  :path => fullpath,
28
28
  :kind => kind,
29
+ :action => action,
29
30
  :time => time,
30
31
  :environment => sanitized_environment,
31
32
  :session_data => sanitized_session_data,
@@ -1,3 +1,3 @@
1
1
  module Appsignal
2
- VERSION = '0.11.13.beta.1'
2
+ VERSION = '0.11.13.beta.2'
3
3
  end
@@ -560,7 +560,7 @@ describe Appsignal::Agent do
560
560
  end
561
561
 
562
562
  context "return values" do
563
- %w( 200 420 413 429 406 402 401 ).each do |code|
563
+ %w( 200 420 413 429 406 402 401 400 ).each do |code|
564
564
  it "should return true for '#{code}'" do
565
565
  subject.send(:handle_result, code).should be_true
566
566
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- if rails_present?
3
+ if active_record_present?
4
4
  require 'active_record'
5
5
  require 'appsignal/aggregator/middleware/active_record_sanitizer'
6
6
 
@@ -83,10 +83,16 @@ describe Appsignal::Aggregator::PostProcessor do
83
83
  subject.exists?(Appsignal::Aggregator::Middleware::DeleteBlanks).should be_true
84
84
  if rails_present?
85
85
  subject.exists?(Appsignal::Aggregator::Middleware::ActionViewSanitizer).should be_true
86
- subject.exists?(Appsignal::Aggregator::Middleware::ActiveRecordSanitizer).should be_true
86
+
87
+ if active_record_present?
88
+ subject.exists?(Appsignal::Aggregator::Middleware::ActiveRecordSanitizer).should be_true
89
+ end
87
90
  else
88
91
  subject.exists?(Appsignal::Aggregator::Middleware::ActionViewSanitizer).should be_false
89
- subject.exists?(Appsignal::Aggregator::Middleware::ActiveRecordSanitizer).should be_false
92
+
93
+ if active_record_present?
94
+ subject.exists?(Appsignal::Aggregator::Middleware::ActiveRecordSanitizer).should be_false
95
+ end
90
96
  end
91
97
  end
92
98
  end
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+
3
+ if padrino_present?
4
+ describe "Padrino integration" do
5
+ require File.expand_path('lib/appsignal/integrations/padrino.rb')
6
+
7
+ class ClassWithRouter
8
+ include Padrino::Routing
9
+ end
10
+
11
+ before :all do
12
+ @events = []
13
+ @subscriber = ActiveSupport::Notifications.subscribe do |*args|
14
+ @events << ActiveSupport::Notifications::Event.new(*args)
15
+ end
16
+ end
17
+ after :all do
18
+ ActiveSupport::Notifications.unsubscribe(@subscriber)
19
+ end
20
+
21
+ describe "Appsignal::Integrations::PadrinoPlugin" do
22
+ before do
23
+ Appsignal.stub(
24
+ :active? => true,
25
+ :start => true,
26
+ :start_logger => true
27
+ )
28
+ end
29
+
30
+ it "should start the logger on init" do
31
+ expect( Appsignal ).to receive(:start_logger)
32
+ end
33
+
34
+ it "should start appsignal on init" do
35
+ expect( Appsignal ).to receive(:start)
36
+ end
37
+
38
+ it "should add the Listener middleware to the stack" do
39
+ expect( Padrino ).to receive(:use).with(Appsignal::Rack::Listener)
40
+ end
41
+
42
+ context "when not active" do
43
+ before { Appsignal.stub(:active? => false) }
44
+
45
+ it "should not add the Listener middleware to the stack" do
46
+ expect( Padrino ).to_not receive(:use)
47
+ end
48
+ end
49
+
50
+ after { Appsignal::Integrations::PadrinoPlugin.init }
51
+ end
52
+
53
+ describe "Padrino::Routing::InstanceMethods" do
54
+ let(:base) { double }
55
+ let(:router) { ClassWithRouter.new }
56
+ let(:env) { {} }
57
+ let(:settings) { double(:name => 'TestApp') }
58
+
59
+ let(:request) do
60
+ double(
61
+ :params => {'id' => 1},
62
+ :session => {'user_id' => 123},
63
+ :request_method => 'GET',
64
+ :path => '/users/1',
65
+ :controller => 'users',
66
+ :action => 'show'
67
+ )
68
+ end
69
+
70
+ before do
71
+ router.stub(
72
+ :route_without_appsignal => true,
73
+ :request => request,
74
+ :env => env,
75
+ :settings => settings
76
+ )
77
+ end
78
+
79
+ context "when Sinatra tells us it's a static file" do
80
+ let(:env) { {'sinatra.static_file' => true} }
81
+
82
+ it "should call the original method" do
83
+ expect( router ).to receive(:route_without_appsignal)
84
+ end
85
+
86
+ it "should not instrument the request" do
87
+ expect( ActiveSupport::Notifications ).to_not receive(:instrument)
88
+ end
89
+
90
+ after { router.route!(base) }
91
+ end
92
+
93
+ context "with a dynamic request" do
94
+
95
+ it "should call the original method" do
96
+ expect( router ).to receive(:route_without_appsignal)
97
+ end
98
+
99
+ it "should instrument the action" do
100
+ expect( ActiveSupport::Notifications ).to receive(:instrument).with(
101
+ 'process_action.padrino',
102
+ {
103
+ :params => {'id' => 1},
104
+ :session => {'user_id' => 123},
105
+ :method => 'GET',
106
+ :path => '/users/1'
107
+ }
108
+ )
109
+ end
110
+
111
+ after { router.route!(base) }
112
+ end
113
+
114
+ it "should add the action to the payload" do
115
+ router.route!(base)
116
+
117
+ expect( @events.first.payload[:action] ).to eql('TestApp:users#show')
118
+ end
119
+
120
+ context "with an exception" do
121
+ before { router.stub(:route_without_appsignal).and_raise(VerySpecificError) }
122
+
123
+ it "should add the exception to the current transaction" do
124
+ expect( Appsignal ).to receive(:add_exception)
125
+
126
+ router.route!(base) rescue VerySpecificError
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+ require 'rake'
3
+ describe "Rack integration" do
4
+ let(:file) { File.expand_path('lib/appsignal/integrations/rake.rb') }
5
+ let(:app) { double(:current_scope => nil) }
6
+ let(:task) { Rake::Task.new('task', app) }
7
+ before do
8
+ load file
9
+ end
10
+
11
+ describe "#invoke" do
12
+ before do
13
+ task.stub(
14
+ :name => 'task:name',
15
+ :invoke_without_appsignal => true
16
+ )
17
+ end
18
+
19
+ it "should create a transaction" do
20
+ expect( Appsignal::Transaction ).to receive(:create)
21
+ end
22
+
23
+ context "with transaction" do
24
+ let!(:transaction) { Appsignal::Transaction.new('123', {}) }
25
+ let!(:agent) { double('Agent', :send_queue => true) }
26
+ before do
27
+ Appsignal::Transaction.stub(:create => transaction)
28
+ Appsignal.stub(:agent => agent, :active? => true)
29
+ end
30
+
31
+ it "should set the kind" do
32
+ expect( transaction ).to receive(:set_kind).with('background_job')
33
+ end
34
+
35
+ it "should set the action" do
36
+ expect( transaction ).to receive(:set_action).with('task:name')
37
+ end
38
+
39
+ it "should call the original task" do
40
+ expect( task ).to receive(:invoke_without_appsignal).with('foo')
41
+ end
42
+
43
+ it "should complete the transaction" do
44
+ expect( transaction ).to receive(:complete!)
45
+ end
46
+
47
+ it "should send the queue" do
48
+ expect( Appsignal.agent ).to receive(:send_queue)
49
+ end
50
+
51
+ context "when Appsignal is not active" do
52
+ before { Appsignal.stub(:active? => false) }
53
+
54
+ it "should not send the queue" do
55
+ expect( Appsignal.agent ).to_not receive(:send_queue)
56
+ end
57
+ end
58
+
59
+ context "with an exception" do
60
+ let(:exception) { VerySpecificError.new }
61
+
62
+ before do
63
+ task.stub(:invoke_without_appsignal).and_raise(exception)
64
+ Appsignal.stub(:is_ignored_exception? => false )
65
+ end
66
+
67
+ it "should add the exception to the transaction" do
68
+ expect( transaction ).to receive(:add_exception).with(exception)
69
+ end
70
+
71
+ context "when ignored" do
72
+ before { Appsignal.stub(:is_ignored_exception? => true ) }
73
+
74
+ it "should NOT add the exception to the transaction" do
75
+ expect( transaction ).to_not receive(:add_exception)
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ after { task.invoke('foo') rescue VerySpecificError }
82
+ end
83
+ end
@@ -23,6 +23,34 @@ if defined?(::Sinatra)
23
23
  let(:middleware) { Appsignal::Rack::SinatraInstrumentation.new(app, {}) }
24
24
 
25
25
  describe "#call" do
26
+ before do
27
+ middleware.stub(:raw_payload => {})
28
+ end
29
+
30
+ context "when appsignal is active" do
31
+ before { Appsignal.stub(:active? => true) }
32
+
33
+ it "should call with monitoring" do
34
+ expect( middleware ).to receive(:call_with_appsignal_monitoring).with(env)
35
+ end
36
+ end
37
+
38
+ context "when appsignal is not active" do
39
+ before { Appsignal.stub(:active? => false) }
40
+
41
+ it "should not call with monitoring" do
42
+ expect( middleware ).to_not receive(:call_with_appsignal_monitoring)
43
+ end
44
+
45
+ it "should call the stack" do
46
+ expect( app ).to receive(:call).with(env)
47
+ end
48
+ end
49
+
50
+ after { middleware.call(env) }
51
+ end
52
+
53
+ describe "#call_with_appsignal_monitoring" do
26
54
  before do
27
55
  middleware.stub(:raw_payload => {})
28
56
  env['sinatra.route'] = 'GET /'
@@ -31,7 +59,7 @@ if defined?(::Sinatra)
31
59
  it "should instrument the call" do
32
60
  app.should_receive(:call).with(env)
33
61
 
34
- middleware.call(env)
62
+ middleware.call_with_appsignal_monitoring(env)
35
63
 
36
64
  process_action_event = @events.last
37
65
  process_action_event.name.should == 'process_action.sinatra'
@@ -42,7 +70,7 @@ if defined?(::Sinatra)
42
70
  app.should_receive(:call).with(env).and_raise('the roof')
43
71
 
44
72
  lambda {
45
- middleware.call(env)
73
+ middleware.call_with_appsignal_monitoring(env)
46
74
  }.should raise_error
47
75
 
48
76
  process_action_event = @events.last
@@ -60,7 +88,7 @@ if defined?(::Sinatra)
60
88
  transaction.should_receive(:add_exception).with(exception)
61
89
  Appsignal::Transaction.stub(:current => transaction)
62
90
 
63
- middleware.call(env)
91
+ middleware.call_with_appsignal_monitoring(env)
64
92
  end
65
93
  end
66
94
 
@@ -56,6 +56,30 @@ describe Appsignal::Transaction::Formatter do
56
56
  end
57
57
  end
58
58
 
59
+ context "with a background request without payload" do
60
+ let(:transaction) do
61
+ Appsignal::Transaction.new('123', {}).tap do |transaction|
62
+ transaction.set_kind('web')
63
+ transaction.set_action('foo#bar')
64
+ end
65
+ end
66
+
67
+ it "should get the kind and action from the transaction" do
68
+ subject.to_hash.should == {
69
+ :request_id => '123',
70
+ :log_entry => {
71
+ :path => '/foo',
72
+ :kind => 'web',
73
+ :action => 'foo#bar',
74
+ :time => nil,
75
+ :environment => {},
76
+ :session_data => {},
77
+ :revision => nil},
78
+ :failed => false
79
+ }
80
+ end
81
+ end
82
+
59
83
  context "with an exception request" do
60
84
  let(:transaction) { transaction_with_exception }
61
85
 
@@ -189,6 +189,22 @@ describe Appsignal::Transaction do
189
189
  end
190
190
  end
191
191
 
192
+ describe "#set_kind" do
193
+ it "should set the kind" do
194
+ expect{
195
+ transaction.set_kind('web')
196
+ }.to change(transaction, :kind).from(nil).to('web')
197
+ end
198
+ end
199
+
200
+ describe "#set_action" do
201
+ it "should set the action" do
202
+ expect{
203
+ transaction.set_action('foo#bar')
204
+ }.to change(transaction, :action).from(nil).to('foo#bar')
205
+ end
206
+ end
207
+
192
208
  context "using exceptions" do
193
209
  let(:exception) do
194
210
  double(
@@ -403,8 +403,9 @@ describe Appsignal do
403
403
  end
404
404
 
405
405
  describe ".send_exception" do
406
- before { Appsignal::IPC.stub(:current => false) }
407
- let(:tags) { nil }
406
+ let(:tags) { nil }
407
+ let(:exception) { VerySpecificError.new }
408
+ before { Appsignal::IPC.stub(:current => false) }
408
409
 
409
410
  it "should send the exception to AppSignal" do
410
411
  agent = double(:shutdown => true, :active? => true)
@@ -430,13 +431,21 @@ describe Appsignal do
430
431
  Appsignal::Transaction.should_not_receive(:create)
431
432
  end
432
433
 
433
- after do
434
- begin
435
- raise "I am an exception"
436
- rescue Exception => e
437
- Appsignal.send_exception(e, tags)
434
+ context "when given class is not an exception" do
435
+ let(:exception) { double }
436
+
437
+ it "should log a message" do
438
+ expect( Appsignal.logger ).to receive(:error).with('Can\'t send exception, given value is not an exception')
439
+ end
440
+
441
+ it "should not send the exception" do
442
+ expect( Appsignal::Transaction ).to_not receive(:create)
438
443
  end
439
444
  end
445
+
446
+ after do
447
+ Appsignal.send_exception(exception, tags) rescue Exception
448
+ end
440
449
  end
441
450
 
442
451
  describe ".listen_for_exception" do
data/spec/spec_helper.rb CHANGED
@@ -20,6 +20,13 @@ def rails_present?
20
20
  RAILS_PRESENT
21
21
  end
22
22
 
23
+ def active_record_present?
24
+ require 'active_record'
25
+ true
26
+ rescue LoadError
27
+ false
28
+ end
29
+
23
30
  def running_jruby?
24
31
  defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
25
32
  end
@@ -45,6 +52,13 @@ rescue LoadError
45
52
  false
46
53
  end
47
54
 
55
+ def padrino_present?
56
+ require 'padrino'
57
+ true
58
+ rescue LoadError
59
+ false
60
+ end
61
+
48
62
  require 'appsignal'
49
63
 
50
64
  Dir[File.expand_path(File.join(File.dirname(__FILE__), 'support/helpers','*.rb'))].each {|f| require f}
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsignal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.13.beta.1
5
- prerelease: 8
4
+ version: 0.11.13.beta.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Robert Beekman
@@ -13,118 +12,104 @@ authors:
13
12
  autorequire:
14
13
  bindir: bin
15
14
  cert_chain: []
16
- date: 2015-07-09 00:00:00.000000000 Z
15
+ date: 2015-07-30 00:00:00.000000000 Z
17
16
  dependencies:
18
17
  - !ruby/object:Gem::Dependency
19
18
  name: rack
20
19
  requirement: !ruby/object:Gem::Requirement
21
- none: false
22
20
  requirements:
23
- - - ! '>='
21
+ - - ">="
24
22
  - !ruby/object:Gem::Version
25
23
  version: '0'
26
24
  type: :runtime
27
25
  prerelease: false
28
26
  version_requirements: !ruby/object:Gem::Requirement
29
- none: false
30
27
  requirements:
31
- - - ! '>='
28
+ - - ">="
32
29
  - !ruby/object:Gem::Version
33
30
  version: '0'
34
31
  - !ruby/object:Gem::Dependency
35
32
  name: thread_safe
36
33
  requirement: !ruby/object:Gem::Requirement
37
- none: false
38
34
  requirements:
39
- - - ! '>='
35
+ - - ">="
40
36
  - !ruby/object:Gem::Version
41
37
  version: '0'
42
38
  type: :runtime
43
39
  prerelease: false
44
40
  version_requirements: !ruby/object:Gem::Requirement
45
- none: false
46
41
  requirements:
47
- - - ! '>='
42
+ - - ">="
48
43
  - !ruby/object:Gem::Version
49
44
  version: '0'
50
45
  - !ruby/object:Gem::Dependency
51
46
  name: rake
52
47
  requirement: !ruby/object:Gem::Requirement
53
- none: false
54
48
  requirements:
55
- - - ! '>='
49
+ - - ">="
56
50
  - !ruby/object:Gem::Version
57
51
  version: '0'
58
52
  type: :development
59
53
  prerelease: false
60
54
  version_requirements: !ruby/object:Gem::Requirement
61
- none: false
62
55
  requirements:
63
- - - ! '>='
56
+ - - ">="
64
57
  - !ruby/object:Gem::Version
65
58
  version: '0'
66
59
  - !ruby/object:Gem::Dependency
67
60
  name: rspec
68
61
  requirement: !ruby/object:Gem::Requirement
69
- none: false
70
62
  requirements:
71
- - - ~>
63
+ - - "~>"
72
64
  - !ruby/object:Gem::Version
73
65
  version: 2.14.1
74
66
  type: :development
75
67
  prerelease: false
76
68
  version_requirements: !ruby/object:Gem::Requirement
77
- none: false
78
69
  requirements:
79
- - - ~>
70
+ - - "~>"
80
71
  - !ruby/object:Gem::Version
81
72
  version: 2.14.1
82
73
  - !ruby/object:Gem::Dependency
83
74
  name: pry
84
75
  requirement: !ruby/object:Gem::Requirement
85
- none: false
86
76
  requirements:
87
- - - ! '>='
77
+ - - ">="
88
78
  - !ruby/object:Gem::Version
89
79
  version: '0'
90
80
  type: :development
91
81
  prerelease: false
92
82
  version_requirements: !ruby/object:Gem::Requirement
93
- none: false
94
83
  requirements:
95
- - - ! '>='
84
+ - - ">="
96
85
  - !ruby/object:Gem::Version
97
86
  version: '0'
98
87
  - !ruby/object:Gem::Dependency
99
88
  name: timecop
100
89
  requirement: !ruby/object:Gem::Requirement
101
- none: false
102
90
  requirements:
103
- - - ! '>='
91
+ - - ">="
104
92
  - !ruby/object:Gem::Version
105
93
  version: '0'
106
94
  type: :development
107
95
  prerelease: false
108
96
  version_requirements: !ruby/object:Gem::Requirement
109
- none: false
110
97
  requirements:
111
- - - ! '>='
98
+ - - ">="
112
99
  - !ruby/object:Gem::Version
113
100
  version: '0'
114
101
  - !ruby/object:Gem::Dependency
115
102
  name: webmock
116
103
  requirement: !ruby/object:Gem::Requirement
117
- none: false
118
104
  requirements:
119
- - - ! '>='
105
+ - - ">="
120
106
  - !ruby/object:Gem::Version
121
107
  version: '0'
122
108
  type: :development
123
109
  prerelease: false
124
110
  version_requirements: !ruby/object:Gem::Requirement
125
- none: false
126
111
  requirements:
127
- - - ! '>='
112
+ - - ">="
128
113
  - !ruby/object:Gem::Version
129
114
  version: '0'
130
115
  description: The official appsignal.com gem
@@ -135,9 +120,9 @@ executables:
135
120
  extensions: []
136
121
  extra_rdoc_files: []
137
122
  files:
138
- - .gitignore
139
- - .rspec
140
- - .travis.yml
123
+ - ".gitignore"
124
+ - ".rspec"
125
+ - ".travis.yml"
141
126
  - CHANGELOG.md
142
127
  - Gemfile
143
128
  - LICENSE
@@ -149,6 +134,7 @@ files:
149
134
  - gemfiles/capistrano2.gemfile
150
135
  - gemfiles/capistrano3.gemfile
151
136
  - gemfiles/no_dependencies.gemfile
137
+ - gemfiles/padrino-0.13.gemfile
152
138
  - gemfiles/rails-3.0.gemfile
153
139
  - gemfiles/rails-3.1.gemfile
154
140
  - gemfiles/rails-3.2.gemfile
@@ -177,8 +163,10 @@ files:
177
163
  - lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb
178
164
  - lib/appsignal/integrations/capistrano/careful_logger.rb
179
165
  - lib/appsignal/integrations/delayed_job.rb
166
+ - lib/appsignal/integrations/padrino.rb
180
167
  - lib/appsignal/integrations/passenger.rb
181
168
  - lib/appsignal/integrations/rails.rb
169
+ - lib/appsignal/integrations/rake.rb
182
170
  - lib/appsignal/integrations/resque.rb
183
171
  - lib/appsignal/integrations/sequel.rb
184
172
  - lib/appsignal/integrations/sidekiq.rb
@@ -223,8 +211,10 @@ files:
223
211
  - spec/lib/appsignal/integrations/capistrano2_spec.rb
224
212
  - spec/lib/appsignal/integrations/capistrano3_spec.rb
225
213
  - spec/lib/appsignal/integrations/delayed_job_spec.rb
214
+ - spec/lib/appsignal/integrations/padrino_spec.rb
226
215
  - spec/lib/appsignal/integrations/passenger_spec.rb
227
216
  - spec/lib/appsignal/integrations/rails_spec.rb
217
+ - spec/lib/appsignal/integrations/rake_spec.rb
228
218
  - spec/lib/appsignal/integrations/resque_spec.rb
229
219
  - spec/lib/appsignal/integrations/sequel_spec.rb
230
220
  - spec/lib/appsignal/integrations/sidekiq_spec.rb
@@ -259,27 +249,26 @@ files:
259
249
  homepage: https://github.com/appsignal/appsignal
260
250
  licenses:
261
251
  - MIT
252
+ metadata: {}
262
253
  post_install_message:
263
254
  rdoc_options: []
264
255
  require_paths:
265
256
  - lib
266
257
  required_ruby_version: !ruby/object:Gem::Requirement
267
- none: false
268
258
  requirements:
269
- - - ! '>='
259
+ - - ">="
270
260
  - !ruby/object:Gem::Version
271
261
  version: '1.9'
272
262
  required_rubygems_version: !ruby/object:Gem::Requirement
273
- none: false
274
263
  requirements:
275
- - - ! '>'
264
+ - - ">"
276
265
  - !ruby/object:Gem::Version
277
266
  version: 1.3.1
278
267
  requirements: []
279
268
  rubyforge_project:
280
- rubygems_version: 1.8.23
269
+ rubygems_version: 2.4.5
281
270
  signing_key:
282
- specification_version: 3
271
+ specification_version: 4
283
272
  summary: Logs performance and exception data from your app to appsignal.com
284
273
  test_files:
285
274
  - spec/lib/appsignal/agent_spec.rb
@@ -298,8 +287,10 @@ test_files:
298
287
  - spec/lib/appsignal/integrations/capistrano2_spec.rb
299
288
  - spec/lib/appsignal/integrations/capistrano3_spec.rb
300
289
  - spec/lib/appsignal/integrations/delayed_job_spec.rb
290
+ - spec/lib/appsignal/integrations/padrino_spec.rb
301
291
  - spec/lib/appsignal/integrations/passenger_spec.rb
302
292
  - spec/lib/appsignal/integrations/rails_spec.rb
293
+ - spec/lib/appsignal/integrations/rake_spec.rb
303
294
  - spec/lib/appsignal/integrations/resque_spec.rb
304
295
  - spec/lib/appsignal/integrations/sequel_spec.rb
305
296
  - spec/lib/appsignal/integrations/sidekiq_spec.rb