exception_notification_more_info 1.0.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 (118) hide show
  1. checksums.yaml +7 -0
  2. data/Appraisals +7 -0
  3. data/CHANGELOG.rdoc +141 -0
  4. data/CODE_OF_CONDUCT.md +22 -0
  5. data/CONTRIBUTING.md +42 -0
  6. data/Gemfile +3 -0
  7. data/MIT-LICENSE +20 -0
  8. data/README.md +839 -0
  9. data/Rakefile +23 -0
  10. data/examples/sinatra/Gemfile +8 -0
  11. data/examples/sinatra/Gemfile.lock +95 -0
  12. data/examples/sinatra/Procfile +2 -0
  13. data/examples/sinatra/README.md +11 -0
  14. data/examples/sinatra/config.ru +3 -0
  15. data/examples/sinatra/sinatra_app.rb +32 -0
  16. data/exception_notification_more_info.gemspec +34 -0
  17. data/gemfiles/rails4_0.gemfile +7 -0
  18. data/gemfiles/rails4_1.gemfile +7 -0
  19. data/gemfiles/rails4_2.gemfile +7 -0
  20. data/lib/exception_notification.rb +11 -0
  21. data/lib/exception_notification/rack.rb +59 -0
  22. data/lib/exception_notification/rails.rb +8 -0
  23. data/lib/exception_notification/resque.rb +24 -0
  24. data/lib/exception_notification/sidekiq.rb +31 -0
  25. data/lib/exception_notifier.rb +121 -0
  26. data/lib/exception_notifier/base_notifier.rb +25 -0
  27. data/lib/exception_notifier/campfire_notifier.rb +36 -0
  28. data/lib/exception_notifier/email_notifier.rb +204 -0
  29. data/lib/exception_notifier/hipchat_notifier.rb +45 -0
  30. data/lib/exception_notifier/irc_notifier.rb +51 -0
  31. data/lib/exception_notifier/modules/backtrace_cleaner.rb +13 -0
  32. data/lib/exception_notifier/notifier.rb +16 -0
  33. data/lib/exception_notifier/slack_notifier.rb +73 -0
  34. data/lib/exception_notifier/views/exception_notifier/_backtrace.html.erb +3 -0
  35. data/lib/exception_notifier/views/exception_notifier/_backtrace.text.erb +1 -0
  36. data/lib/exception_notifier/views/exception_notifier/_data.html.erb +6 -0
  37. data/lib/exception_notifier/views/exception_notifier/_data.text.erb +1 -0
  38. data/lib/exception_notifier/views/exception_notifier/_environment.html.erb +10 -0
  39. data/lib/exception_notifier/views/exception_notifier/_environment.text.erb +5 -0
  40. data/lib/exception_notifier/views/exception_notifier/_request.html.erb +36 -0
  41. data/lib/exception_notifier/views/exception_notifier/_request.text.erb +10 -0
  42. data/lib/exception_notifier/views/exception_notifier/_session.html.erb +10 -0
  43. data/lib/exception_notifier/views/exception_notifier/_session.text.erb +2 -0
  44. data/lib/exception_notifier/views/exception_notifier/_title.html.erb +3 -0
  45. data/lib/exception_notifier/views/exception_notifier/_title.text.erb +3 -0
  46. data/lib/exception_notifier/views/exception_notifier/background_exception_notification.html.erb +53 -0
  47. data/lib/exception_notifier/views/exception_notifier/background_exception_notification.text.erb +14 -0
  48. data/lib/exception_notifier/views/exception_notifier/exception_notification.html.erb +54 -0
  49. data/lib/exception_notifier/views/exception_notifier/exception_notification.text.erb +24 -0
  50. data/lib/exception_notifier/webhook_notifier.rb +47 -0
  51. data/lib/generators/exception_notification/install_generator.rb +15 -0
  52. data/lib/generators/exception_notification/templates/exception_notification.rb +53 -0
  53. data/test/dummy/.gitignore +4 -0
  54. data/test/dummy/Gemfile +34 -0
  55. data/test/dummy/Gemfile.lock +137 -0
  56. data/test/dummy/Rakefile +7 -0
  57. data/test/dummy/app/controllers/application_controller.rb +3 -0
  58. data/test/dummy/app/controllers/posts_controller.rb +30 -0
  59. data/test/dummy/app/helpers/application_helper.rb +2 -0
  60. data/test/dummy/app/helpers/posts_helper.rb +2 -0
  61. data/test/dummy/app/models/post.rb +2 -0
  62. data/test/dummy/app/views/exception_notifier/_new_bkg_section.html.erb +1 -0
  63. data/test/dummy/app/views/exception_notifier/_new_bkg_section.text.erb +1 -0
  64. data/test/dummy/app/views/exception_notifier/_new_section.html.erb +1 -0
  65. data/test/dummy/app/views/exception_notifier/_new_section.text.erb +1 -0
  66. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  67. data/test/dummy/app/views/posts/_form.html.erb +0 -0
  68. data/test/dummy/app/views/posts/new.html.erb +0 -0
  69. data/test/dummy/app/views/posts/show.html.erb +0 -0
  70. data/test/dummy/config.ru +4 -0
  71. data/test/dummy/config/application.rb +42 -0
  72. data/test/dummy/config/boot.rb +6 -0
  73. data/test/dummy/config/database.yml +22 -0
  74. data/test/dummy/config/environment.rb +17 -0
  75. data/test/dummy/config/environments/development.rb +25 -0
  76. data/test/dummy/config/environments/production.rb +50 -0
  77. data/test/dummy/config/environments/test.rb +38 -0
  78. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  79. data/test/dummy/config/initializers/inflections.rb +10 -0
  80. data/test/dummy/config/initializers/mime_types.rb +5 -0
  81. data/test/dummy/config/initializers/secret_token.rb +8 -0
  82. data/test/dummy/config/initializers/session_store.rb +8 -0
  83. data/test/dummy/config/locales/en.yml +5 -0
  84. data/test/dummy/config/routes.rb +3 -0
  85. data/test/dummy/db/migrate/20110729022608_create_posts.rb +15 -0
  86. data/test/dummy/db/schema.rb +24 -0
  87. data/test/dummy/db/seeds.rb +7 -0
  88. data/test/dummy/lib/tasks/.gitkeep +0 -0
  89. data/test/dummy/public/404.html +26 -0
  90. data/test/dummy/public/422.html +26 -0
  91. data/test/dummy/public/500.html +26 -0
  92. data/test/dummy/public/favicon.ico +0 -0
  93. data/test/dummy/public/images/rails.png +0 -0
  94. data/test/dummy/public/index.html +239 -0
  95. data/test/dummy/public/javascripts/application.js +2 -0
  96. data/test/dummy/public/javascripts/controls.js +965 -0
  97. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  98. data/test/dummy/public/javascripts/effects.js +1123 -0
  99. data/test/dummy/public/javascripts/prototype.js +6001 -0
  100. data/test/dummy/public/javascripts/rails.js +191 -0
  101. data/test/dummy/public/robots.txt +5 -0
  102. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  103. data/test/dummy/public/stylesheets/scaffold.css +56 -0
  104. data/test/dummy/script/rails +6 -0
  105. data/test/dummy/test/fixtures/posts.yml +11 -0
  106. data/test/dummy/test/functional/posts_controller_test.rb +224 -0
  107. data/test/dummy/test/test_helper.rb +13 -0
  108. data/test/exception_notification/rack_test.rb +20 -0
  109. data/test/exception_notifier/campfire_notifier_test.rb +100 -0
  110. data/test/exception_notifier/email_notifier_test.rb +185 -0
  111. data/test/exception_notifier/hipchat_notifier_test.rb +177 -0
  112. data/test/exception_notifier/irc_notifier_test.rb +121 -0
  113. data/test/exception_notifier/sidekiq_test.rb +27 -0
  114. data/test/exception_notifier/slack_notifier_test.rb +179 -0
  115. data/test/exception_notifier/webhook_notifier_test.rb +68 -0
  116. data/test/exception_notifier_test.rb +103 -0
  117. data/test/test_helper.rb +18 -0
  118. metadata +428 -0
@@ -0,0 +1,3 @@
1
+ <pre style="font-size: 12px; padding: 10px; border: 1px solid #e1e1e8; background-color:#f5f5f5">
2
+ <%= @backtrace.join("\n") %>
3
+ </pre>
@@ -0,0 +1 @@
1
+ <%= raw @backtrace.join("\n") %>
@@ -0,0 +1,6 @@
1
+ <ul style="list-style: none">
2
+ <li>
3
+ <strong>data:</strong>
4
+ <span><%= PP.pp(@data, "") %></span>
5
+ </li>
6
+ </ul>
@@ -0,0 +1 @@
1
+ * data: <%= raw PP.pp(@data, "") %>
@@ -0,0 +1,10 @@
1
+ <% filtered_env = @request.filtered_env -%>
2
+
3
+ <ul style="list-style: none">
4
+ <% filtered_env.keys.map(&:to_s).sort.each do |key| -%>
5
+ <li>
6
+ <strong><%= key %>:</strong>
7
+ <span><%= inspect_object(filtered_env[key]) %></span>
8
+ </li>
9
+ <% end -%>
10
+ </ul>
@@ -0,0 +1,5 @@
1
+ <% filtered_env = @request.filtered_env -%>
2
+ <% max = filtered_env.keys.map(&:to_s).max { |a, b| a.length <=> b.length } -%>
3
+ <% filtered_env.keys.map(&:to_s).sort.each do |key| -%>
4
+ * <%= raw safe_encode("%-*s: %s" % [max.length, key, inspect_object(filtered_env[key])]) %>
5
+ <% end -%>
@@ -0,0 +1,36 @@
1
+ <ul style="list-style: none">
2
+ <li>
3
+ <strong>URL:</strong>
4
+ <span><%= @request.url %></span>
5
+ </li>
6
+ <li>
7
+ <strong>HTTP Method:</strong>
8
+ <span><%= @request.request_method %></span>
9
+ </li>
10
+ <li>
11
+ <strong>IP Address:</strong>
12
+ <span><%= @request.remote_ip %></span>
13
+ </li>
14
+ <li>
15
+ <strong>Parameters:</strong>
16
+ <span><%= @request.filtered_parameters.inspect %></span>
17
+ </li>
18
+ <li>
19
+ <strong>Timestamp:</strong>
20
+ <span><%= Time.current %></span>
21
+ </li>
22
+ <li>
23
+ <strong>Server:</strong>
24
+ <span><%= Socket.gethostname %></span>
25
+ </li>
26
+ <% if defined?(Rails) && Rails.respond_to?(:root) %>
27
+ <li>
28
+ <strong>Rails root:</strong>
29
+ <span><%= Rails.root %></span>
30
+ </li>
31
+ <% end %>
32
+ <li>
33
+ <strong>Process:</strong>
34
+ <span><%= $$ %></span>
35
+ </li>
36
+ </ul>
@@ -0,0 +1,10 @@
1
+ * URL : <%= raw safe_encode @request.url %>
2
+ * HTTP Method: <%= raw @request.request_method %>
3
+ * IP address : <%= raw @request.remote_ip %>
4
+ * Parameters : <%= raw safe_encode @request.filtered_parameters.inspect %>
5
+ * Timestamp : <%= raw Time.current %>
6
+ * Server : <%= raw Socket.gethostname %>
7
+ <% if defined?(Rails) && Rails.respond_to?(:root) %>
8
+ * Rails root : <%= raw Rails.root %>
9
+ <% end %>
10
+ * Process: <%= raw $$ %>
@@ -0,0 +1,10 @@
1
+ <ul style="list-style: none">
2
+ <li>
3
+ <strong>session_id: </strong>
4
+ <span><%= @request.ssl? ? "[FILTERED]" : (@request.session['session_id'] || (@request.env["rack.session.options"] and @request.env["rack.session.options"][:id]).inspect) %></span>
5
+ </li>
6
+ <li>
7
+ <strong>data: </strong>
8
+ <span><%= PP.pp(@request.session.to_hash, "") %></span>
9
+ </li>
10
+ </ul>
@@ -0,0 +1,2 @@
1
+ * session id: <%= @request.ssl? ? "[FILTERED]" : (raw (@request.session['session_id'] || (@request.env["rack.session.options"] and @request.env["rack.session.options"][:id])).inspect.html_safe) %>
2
+ * data: <%= raw PP.pp(@request.session.to_hash, "") %>
@@ -0,0 +1,3 @@
1
+ <h2>
2
+ <%= title.to_s.humanize %>
3
+ </h2>
@@ -0,0 +1,3 @@
1
+ -------------------------------
2
+ <%= raw title.to_s.humanize %>:
3
+ -------------------------------
@@ -0,0 +1,53 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Exception</title>
6
+ </head>
7
+ <body>
8
+
9
+ <%
10
+ sections_content = @sections.map do |section|
11
+ begin
12
+ summary = render(section).strip
13
+ unless summary.blank?
14
+ title = render("title", :title => section).strip
15
+ [title, summary]
16
+ end
17
+
18
+ rescue Exception => e
19
+ title = render("title", :title => section).strip
20
+ summary = ["ERROR: Failed to generate exception summary:", [e.class.to_s, e.message].join(": "), e.backtrace && e.backtrace.join("\n")].compact.join("\n\n")
21
+
22
+ [title, summary]
23
+ end
24
+ end
25
+ %>
26
+
27
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
28
+ <tr><td align="center" valign="top">
29
+ <table width="650" border="0" cellpadding="0" cellspacing="20">
30
+ <tr>
31
+ <td style="padding: 10px; border: 1px solid #eed3d7; background-color: #f2dede">
32
+ <h3 style="color: #b94a48">
33
+ <%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in background at <%= Time.current %> :
34
+ </h3>
35
+ <p style="color: #b94a48"><%= @exception.message %></p>
36
+ <pre style="font-size: 12px; padding: 5px; background-color:#f5f5f5">
37
+ <%= @backtrace.first %>
38
+ </pre>
39
+ </td>
40
+ </tr>
41
+ <% sections_content.each do |title, summary| %>
42
+ <tr>
43
+ <td style="border-bottom: 1px solid #eeeeee;"><%= raw title %></td>
44
+ </tr>
45
+ <tr>
46
+ <td><%= raw summary %></td>
47
+ </tr>
48
+ <% end %>
49
+ </table>
50
+ </td></tr>
51
+ </table>
52
+ </body>
53
+ </html>
@@ -0,0 +1,14 @@
1
+ <%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in background at <%= raw Time.current %> :
2
+
3
+ <%= @exception.message %>
4
+ <%= @backtrace.first %>
5
+
6
+ <% sections = @sections.map do |section|
7
+ summary = render(section).strip
8
+ unless summary.blank?
9
+ title = render("title", :title => section).strip
10
+ "#{title}\n\n#{summary.gsub(/^/, " ")}\n\n"
11
+ end
12
+ end.join
13
+ %>
14
+ <%= raw sections %>
@@ -0,0 +1,54 @@
1
+ <!DOCTYPE HTML>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Exception</title>
6
+ </head>
7
+ <body>
8
+
9
+ <%
10
+ sections_content = @sections.map do |section|
11
+ begin
12
+ summary = render(section).strip
13
+ unless summary.blank?
14
+ title = render("title", :title => section).strip
15
+ [title, summary]
16
+ end
17
+
18
+ rescue Exception => e
19
+ title = render("title", :title => section).strip
20
+ summary = ["ERROR: Failed to generate exception summary:", [e.class.to_s, e.message].join(": "), e.backtrace && e.backtrace.join("\n")].compact.join("\n\n")
21
+
22
+ [title, summary]
23
+ end
24
+ end
25
+ %>
26
+
27
+ <table width="100%" border="0" cellpadding="0" cellspacing="0">
28
+ <tr><td align="center" valign="top">
29
+ <table width="650" border="0" cellpadding="0" cellspacing="20">
30
+ <tr>
31
+ <td style="padding: 10px; border: 1px solid #eed3d7; background-color: #f2dede">
32
+ <h3 style="color: #b94a48">
33
+ <%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in <%= @kontroller.controller_name %>#<%= @kontroller.action_name %>:
34
+ </h3>
35
+ <p style="color: #b94a48"><%= @exception.message %></p>
36
+ <pre style="font-size: 12px; padding: 5px; background-color:#f5f5f5">
37
+ <%= @backtrace.first %>
38
+ </pre>
39
+ </td>
40
+ </tr>
41
+ <% sections_content.each do |title, summary| %>
42
+ <tr>
43
+ <td style="border-bottom: 1px solid #eeeeee;"><%= raw title %></td>
44
+ </tr>
45
+ <tr>
46
+ <td><%= raw summary %></td>
47
+ </tr>
48
+ <% end %>
49
+ </table>
50
+ </td></tr>
51
+ </table>
52
+
53
+ </body>
54
+ </html>
@@ -0,0 +1,24 @@
1
+ <%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in <%= @kontroller.controller_name %>#<%= @kontroller.action_name %>:
2
+
3
+ <%= raw @exception.message %>
4
+ <%= raw @backtrace.first %>
5
+
6
+ <%
7
+ sections = @sections.map do |section|
8
+ begin
9
+ summary = render(section).strip
10
+ unless summary.blank?
11
+ title = render("title", :title => section).strip
12
+ "#{title}\n\n#{summary.gsub(/^/, " ")}\n\n"
13
+ end
14
+
15
+ rescue Exception => e
16
+ title = render("title", :title => section).strip
17
+ summary = ["ERROR: Failed to generate exception summary:", [e.class.to_s, e.message].join(": "), e.backtrace && e.backtrace.join("\n")].compact.join("\n\n")
18
+
19
+ [title, summary.gsub(/^/, " "), nil].join("\n\n")
20
+ end
21
+ end.join
22
+ %>
23
+
24
+ <%= raw sections %>
@@ -0,0 +1,47 @@
1
+ require 'action_dispatch'
2
+
3
+ module ExceptionNotifier
4
+ class WebhookNotifier < BaseNotifier
5
+
6
+ def initialize(options)
7
+ super
8
+ @default_options = options
9
+ end
10
+
11
+ def call(exception, options={})
12
+ env = options[:env]
13
+
14
+ options = options.reverse_merge(@default_options)
15
+ url = options.delete(:url)
16
+ http_method = options.delete(:http_method) || :post
17
+
18
+ options[:body] ||= {}
19
+ options[:body][:server] = Socket.gethostname
20
+ options[:body][:process] = $$
21
+ if defined?(Rails) && Rails.respond_to?(:root)
22
+ options[:body][:rails_root] = Rails.root
23
+ end
24
+ options[:body][:exception] = {:error_class => exception.class.to_s,
25
+ :message => exception.message.inspect,
26
+ :backtrace => exception.backtrace}
27
+ options[:body][:data] = (env && env['exception_notifier.exception_data'] || {}).merge(options[:data] || {})
28
+
29
+ unless env.nil?
30
+ request = ActionDispatch::Request.new(env)
31
+
32
+ request_items = {:url => request.original_url,
33
+ :http_method => request.method,
34
+ :ip_address => request.remote_ip,
35
+ :parameters => request.filtered_parameters,
36
+ :timestamp => Time.current }
37
+
38
+ options[:body][:request] = request_items
39
+ options[:body][:session] = request.session
40
+ options[:body][:environment] = request.filtered_env
41
+ end
42
+ send_notice(exception, options, nil, @default_options) do |msg, opts|
43
+ HTTParty.send(http_method, url, opts)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,15 @@
1
+ module ExceptionNotification
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ desc "Creates a ExceptionNotification initializer."
5
+
6
+ source_root File.expand_path('../templates', __FILE__)
7
+ class_option :resque, :type => :boolean, :desc => 'Add support for sending notifications when errors occur in Resque jobs.'
8
+ class_option :sidekiq, :type => :boolean, :desc => 'Add support for sending notifications when errors occur in Sidekiq jobs.'
9
+
10
+ def copy_initializer
11
+ template 'exception_notification.rb', 'config/initializers/exception_notification.rb'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,53 @@
1
+ require 'exception_notification/rails'
2
+ <% if options.sidekiq? %>
3
+ require 'exception_notification/sidekiq'
4
+ <% end %>
5
+ <% if options.resque? %>
6
+ require 'resque/failure/multiple'
7
+ require 'resque/failure/redis'
8
+ require 'exception_notification/resque'
9
+
10
+ Resque::Failure::Multiple.classes = [Resque::Failure::Redis, ExceptionNotification::Resque]
11
+ Resque::Failure.backend = Resque::Failure::Multiple
12
+ <% end %>
13
+
14
+ ExceptionNotification.configure do |config|
15
+ # Ignore additional exception types.
16
+ # ActiveRecord::RecordNotFound, AbstractController::ActionNotFound and ActionController::RoutingError are already added.
17
+ # config.ignored_exceptions += %w{ActionView::TemplateError CustomError}
18
+
19
+ # Adds a condition to decide when an exception must be ignored or not.
20
+ # The ignore_if method can be invoked multiple times to add extra conditions.
21
+ # config.ignore_if do |exception, options|
22
+ # not Rails.env.production?
23
+ # end
24
+
25
+ # Notifiers =================================================================
26
+
27
+ # Email notifier sends notifications by email.
28
+ config.add_notifier :email, {
29
+ :email_prefix => "[ERROR] ",
30
+ :sender_address => %{"Notifier" <notifier@example.com>},
31
+ :exception_recipients => %w{exceptions@example.com}
32
+ }
33
+
34
+ # Campfire notifier sends notifications to your Campfire room. Requires 'tinder' gem.
35
+ # config.add_notifier :campfire, {
36
+ # :subdomain => 'my_subdomain',
37
+ # :token => 'my_token',
38
+ # :room_name => 'my_room'
39
+ # }
40
+
41
+ # HipChat notifier sends notifications to your HipChat room. Requires 'hipchat' gem.
42
+ # config.add_notifier :hipchat, {
43
+ # :api_token => 'my_token',
44
+ # :room_name => 'my_room'
45
+ # }
46
+
47
+ # Webhook notifier sends notifications over HTTP protocol. Requires 'httparty' gem.
48
+ # config.add_notifier :webhook, {
49
+ # :url => 'http://example.com:5555/hubot/path',
50
+ # :http_method => :post
51
+ # }
52
+
53
+ end
@@ -0,0 +1,4 @@
1
+ .bundle
2
+ db/*.sqlite3
3
+ log/*.log
4
+ tmp/
@@ -0,0 +1,34 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '4.2.0'
4
+
5
+ # Bundle edge Rails instead:
6
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
+
8
+ gem 'sqlite3'
9
+
10
+ gem 'tinder'
11
+ gem 'httparty'
12
+ gem 'exception_notification', :path => "../../.."
13
+ # Use unicorn as the web server
14
+ # gem 'unicorn'
15
+
16
+ # Deploy with Capistrano
17
+ # gem 'capistrano'
18
+
19
+ # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
20
+ # gem 'ruby-debug'
21
+ # gem 'ruby-debug19', :require => 'ruby-debug'
22
+
23
+ # Bundle the extra gems:
24
+ # gem 'bj'
25
+ # gem 'nokogiri'
26
+ # gem 'sqlite3-ruby', :require => 'sqlite3'
27
+ # gem 'aws-s3', :require => 'aws/s3'
28
+
29
+ # Bundle gems for the local environment. Make sure to
30
+ # put test-only gems in this group so their generators
31
+ # and rake tasks are available in development mode:
32
+ # group :development, :test do
33
+ # gem 'webrat'
34
+ # end
@@ -0,0 +1,137 @@
1
+ PATH
2
+ remote: ../../..
3
+ specs:
4
+ exception_notification (4.1.4)
5
+ actionmailer (~> 4.0)
6
+ activesupport (~> 4.0)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ actionmailer (4.2.0)
12
+ actionpack (= 4.2.0)
13
+ actionview (= 4.2.0)
14
+ activejob (= 4.2.0)
15
+ mail (~> 2.5, >= 2.5.4)
16
+ rails-dom-testing (~> 1.0, >= 1.0.5)
17
+ actionpack (4.2.0)
18
+ actionview (= 4.2.0)
19
+ activesupport (= 4.2.0)
20
+ rack (~> 1.6.0)
21
+ rack-test (~> 0.6.2)
22
+ rails-dom-testing (~> 1.0, >= 1.0.5)
23
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
24
+ actionview (4.2.0)
25
+ activesupport (= 4.2.0)
26
+ builder (~> 3.1)
27
+ erubis (~> 2.7.0)
28
+ rails-dom-testing (~> 1.0, >= 1.0.5)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
30
+ activejob (4.2.0)
31
+ activesupport (= 4.2.0)
32
+ globalid (>= 0.3.0)
33
+ activemodel (4.2.0)
34
+ activesupport (= 4.2.0)
35
+ builder (~> 3.1)
36
+ activerecord (4.2.0)
37
+ activemodel (= 4.2.0)
38
+ activesupport (= 4.2.0)
39
+ arel (~> 6.0)
40
+ activesupport (4.2.0)
41
+ i18n (~> 0.7)
42
+ json (~> 1.7, >= 1.7.7)
43
+ minitest (~> 5.1)
44
+ thread_safe (~> 0.3, >= 0.3.4)
45
+ tzinfo (~> 1.1)
46
+ arel (6.0.3)
47
+ builder (3.2.2)
48
+ erubis (2.7.0)
49
+ eventmachine (1.0.8)
50
+ faraday (0.9.1)
51
+ multipart-post (>= 1.2, < 3)
52
+ faraday_middleware (0.10.0)
53
+ faraday (>= 0.7.4, < 0.10)
54
+ globalid (0.3.6)
55
+ activesupport (>= 4.1.0)
56
+ hashie (3.4.2)
57
+ http_parser.rb (0.5.3)
58
+ httparty (0.13.5)
59
+ json (~> 1.8)
60
+ multi_xml (>= 0.5.2)
61
+ i18n (0.7.0)
62
+ json (1.8.3)
63
+ loofah (2.0.3)
64
+ nokogiri (>= 1.5.9)
65
+ mail (2.6.3)
66
+ mime-types (>= 1.16, < 3)
67
+ mime-types (2.6.1)
68
+ mini_portile (0.6.2)
69
+ minitest (5.8.0)
70
+ multi_json (1.11.2)
71
+ multi_xml (0.5.5)
72
+ multipart-post (2.0.0)
73
+ nokogiri (1.6.6.2)
74
+ mini_portile (~> 0.6.0)
75
+ rack (1.6.4)
76
+ rack-test (0.6.3)
77
+ rack (>= 1.0)
78
+ rails (4.2.0)
79
+ actionmailer (= 4.2.0)
80
+ actionpack (= 4.2.0)
81
+ actionview (= 4.2.0)
82
+ activejob (= 4.2.0)
83
+ activemodel (= 4.2.0)
84
+ activerecord (= 4.2.0)
85
+ activesupport (= 4.2.0)
86
+ bundler (>= 1.3.0, < 2.0)
87
+ railties (= 4.2.0)
88
+ sprockets-rails
89
+ rails-deprecated_sanitizer (1.0.3)
90
+ activesupport (>= 4.2.0.alpha)
91
+ rails-dom-testing (1.0.7)
92
+ activesupport (>= 4.2.0.beta, < 5.0)
93
+ nokogiri (~> 1.6.0)
94
+ rails-deprecated_sanitizer (>= 1.0.1)
95
+ rails-html-sanitizer (1.0.2)
96
+ loofah (~> 2.0)
97
+ railties (4.2.0)
98
+ actionpack (= 4.2.0)
99
+ activesupport (= 4.2.0)
100
+ rake (>= 0.8.7)
101
+ thor (>= 0.18.1, < 2.0)
102
+ rake (10.4.2)
103
+ simple_oauth (0.1.9)
104
+ sprockets (3.3.3)
105
+ rack (~> 1.0)
106
+ sprockets-rails (2.3.2)
107
+ actionpack (>= 3.0)
108
+ activesupport (>= 3.0)
109
+ sprockets (>= 2.8, < 4.0)
110
+ sqlite3 (1.3.10)
111
+ thor (0.19.1)
112
+ thread_safe (0.3.5)
113
+ tinder (1.10.1)
114
+ eventmachine (~> 1.0)
115
+ faraday (~> 0.9.0)
116
+ faraday_middleware (~> 0.9)
117
+ hashie (>= 1.0)
118
+ json (~> 1.8.0)
119
+ mime-types
120
+ multi_json (~> 1.7)
121
+ twitter-stream (~> 0.1)
122
+ twitter-stream (0.1.16)
123
+ eventmachine (>= 0.12.8)
124
+ http_parser.rb (~> 0.5.1)
125
+ simple_oauth (~> 0.1.4)
126
+ tzinfo (1.2.2)
127
+ thread_safe (~> 0.1)
128
+
129
+ PLATFORMS
130
+ ruby
131
+
132
+ DEPENDENCIES
133
+ exception_notification!
134
+ httparty
135
+ rails (= 4.2.0)
136
+ sqlite3
137
+ tinder