bugsnag 6.15.0 → 6.27.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (683) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +12 -0
  3. data/CHANGELOG.md +289 -0
  4. data/README.md +1 -2
  5. data/VERSION +1 -1
  6. data/bugsnag.gemspec +19 -2
  7. data/lib/bugsnag/breadcrumb_type.rb +14 -0
  8. data/lib/bugsnag/breadcrumbs/breadcrumb.rb +35 -2
  9. data/lib/bugsnag/breadcrumbs/breadcrumbs.rb +1 -0
  10. data/lib/bugsnag/breadcrumbs/on_breadcrumb_callback_list.rb +48 -0
  11. data/lib/bugsnag/breadcrumbs/validator.rb +0 -24
  12. data/lib/bugsnag/cleaner.rb +70 -29
  13. data/lib/bugsnag/configuration.rb +445 -47
  14. data/lib/bugsnag/delivery/synchronous.rb +3 -4
  15. data/lib/bugsnag/delivery/thread_queue.rb +18 -5
  16. data/lib/bugsnag/endpoint_configuration.rb +11 -0
  17. data/lib/bugsnag/endpoint_validator.rb +80 -0
  18. data/lib/bugsnag/error.rb +25 -0
  19. data/lib/bugsnag/event.rb +5 -0
  20. data/lib/bugsnag/feature_flag.rb +74 -0
  21. data/lib/bugsnag/helpers.rb +17 -9
  22. data/lib/bugsnag/integrations/delayed_job.rb +13 -1
  23. data/lib/bugsnag/integrations/mailman.rb +2 -1
  24. data/lib/bugsnag/integrations/mongo.rb +5 -4
  25. data/lib/bugsnag/integrations/que.rb +2 -1
  26. data/lib/bugsnag/integrations/rack.rb +6 -4
  27. data/lib/bugsnag/integrations/rails/active_job.rb +100 -0
  28. data/lib/bugsnag/integrations/rails/rails_breadcrumbs.rb +2 -2
  29. data/lib/bugsnag/integrations/railtie.rb +93 -35
  30. data/lib/bugsnag/integrations/rake.rb +8 -3
  31. data/lib/bugsnag/integrations/resque.rb +30 -9
  32. data/lib/bugsnag/integrations/shoryuken.rb +2 -1
  33. data/lib/bugsnag/integrations/sidekiq.rb +3 -3
  34. data/lib/bugsnag/middleware/active_job.rb +18 -0
  35. data/lib/bugsnag/middleware/classify_error.rb +1 -0
  36. data/lib/bugsnag/middleware/delayed_job.rb +21 -1
  37. data/lib/bugsnag/middleware/exception_meta_data.rb +2 -0
  38. data/lib/bugsnag/middleware/rack_request.rb +103 -20
  39. data/lib/bugsnag/middleware/rails3_request.rb +2 -2
  40. data/lib/bugsnag/middleware/rake.rb +1 -1
  41. data/lib/bugsnag/middleware/session_data.rb +3 -1
  42. data/lib/bugsnag/middleware/sidekiq.rb +1 -1
  43. data/lib/bugsnag/middleware/suggestion_data.rb +9 -7
  44. data/lib/bugsnag/middleware/warden_user.rb +3 -0
  45. data/lib/bugsnag/middleware_stack.rb +6 -6
  46. data/lib/bugsnag/report.rb +292 -8
  47. data/lib/bugsnag/session_tracker.rb +52 -12
  48. data/lib/bugsnag/stacktrace.rb +14 -3
  49. data/lib/bugsnag/tasks/bugsnag.rake +1 -1
  50. data/lib/bugsnag/utility/duplicator.rb +124 -0
  51. data/lib/bugsnag/utility/feature_data_store.rb +41 -0
  52. data/lib/bugsnag/utility/feature_flag_delegate.rb +89 -0
  53. data/lib/bugsnag/utility/metadata_delegate.rb +102 -0
  54. data/lib/bugsnag.rb +256 -37
  55. metadata +25 -635
  56. data/.buildkite/pipeline.yml +0 -470
  57. data/.github/PULL_REQUEST_TEMPLATE.md +0 -84
  58. data/.gitignore +0 -55
  59. data/.rdoc_options +0 -27
  60. data/.rspec +0 -3
  61. data/.rubocop.yml +0 -57
  62. data/.rubocop_todo.yml +0 -1049
  63. data/CONTRIBUTING.md +0 -64
  64. data/Gemfile +0 -50
  65. data/Rakefile +0 -37
  66. data/TESTING.md +0 -81
  67. data/UPGRADING.md +0 -91
  68. data/docker-compose.yml +0 -46
  69. data/dockerfiles/Dockerfile.jruby-unit-tests +0 -13
  70. data/dockerfiles/Dockerfile.ruby-maze-runner +0 -26
  71. data/dockerfiles/Dockerfile.ruby-unit-tests +0 -12
  72. data/features/.gitignore +0 -1
  73. data/features/delayed_job.feature +0 -36
  74. data/features/fixtures/delayed_job/Dockerfile +0 -15
  75. data/features/fixtures/delayed_job/app/.gitignore +0 -21
  76. data/features/fixtures/delayed_job/app/Gemfile +0 -57
  77. data/features/fixtures/delayed_job/app/README.md +0 -24
  78. data/features/fixtures/delayed_job/app/Rakefile +0 -24
  79. data/features/fixtures/delayed_job/app/app/assets/config/manifest.js +0 -3
  80. data/features/fixtures/delayed_job/app/app/assets/images/.keep +0 -0
  81. data/features/fixtures/delayed_job/app/app/assets/javascripts/application.js +0 -16
  82. data/features/fixtures/delayed_job/app/app/assets/javascripts/cable.js +0 -13
  83. data/features/fixtures/delayed_job/app/app/assets/javascripts/channels/.keep +0 -0
  84. data/features/fixtures/delayed_job/app/app/assets/stylesheets/application.css +0 -15
  85. data/features/fixtures/delayed_job/app/app/channels/application_cable/channel.rb +0 -4
  86. data/features/fixtures/delayed_job/app/app/channels/application_cable/connection.rb +0 -4
  87. data/features/fixtures/delayed_job/app/app/controllers/application_controller.rb +0 -3
  88. data/features/fixtures/delayed_job/app/app/controllers/concerns/.keep +0 -0
  89. data/features/fixtures/delayed_job/app/app/helpers/application_helper.rb +0 -2
  90. data/features/fixtures/delayed_job/app/app/jobs/application_job.rb +0 -2
  91. data/features/fixtures/delayed_job/app/app/mailers/application_mailer.rb +0 -4
  92. data/features/fixtures/delayed_job/app/app/models/application_record.rb +0 -3
  93. data/features/fixtures/delayed_job/app/app/models/concerns/.keep +0 -0
  94. data/features/fixtures/delayed_job/app/app/models/test_model.rb +0 -10
  95. data/features/fixtures/delayed_job/app/app/views/layouts/application.html.erb +0 -14
  96. data/features/fixtures/delayed_job/app/app/views/layouts/mailer.html.erb +0 -13
  97. data/features/fixtures/delayed_job/app/app/views/layouts/mailer.text.erb +0 -1
  98. data/features/fixtures/delayed_job/app/config/application.rb +0 -15
  99. data/features/fixtures/delayed_job/app/config/boot.rb +0 -3
  100. data/features/fixtures/delayed_job/app/config/cable.yml +0 -9
  101. data/features/fixtures/delayed_job/app/config/database.yml +0 -25
  102. data/features/fixtures/delayed_job/app/config/environment.rb +0 -5
  103. data/features/fixtures/delayed_job/app/config/environments/development.rb +0 -54
  104. data/features/fixtures/delayed_job/app/config/environments/production.rb +0 -86
  105. data/features/fixtures/delayed_job/app/config/environments/test.rb +0 -42
  106. data/features/fixtures/delayed_job/app/config/initializers/application_controller_renderer.rb +0 -8
  107. data/features/fixtures/delayed_job/app/config/initializers/assets.rb +0 -11
  108. data/features/fixtures/delayed_job/app/config/initializers/backtrace_silencers.rb +0 -7
  109. data/features/fixtures/delayed_job/app/config/initializers/bugsnag.rb +0 -14
  110. data/features/fixtures/delayed_job/app/config/initializers/cookies_serializer.rb +0 -5
  111. data/features/fixtures/delayed_job/app/config/initializers/delayed_job.rb +0 -3
  112. data/features/fixtures/delayed_job/app/config/initializers/filter_parameter_logging.rb +0 -4
  113. data/features/fixtures/delayed_job/app/config/initializers/inflections.rb +0 -16
  114. data/features/fixtures/delayed_job/app/config/initializers/mime_types.rb +0 -4
  115. data/features/fixtures/delayed_job/app/config/initializers/new_framework_defaults.rb +0 -26
  116. data/features/fixtures/delayed_job/app/config/initializers/session_store.rb +0 -3
  117. data/features/fixtures/delayed_job/app/config/initializers/wrap_parameters.rb +0 -14
  118. data/features/fixtures/delayed_job/app/config/locales/en.yml +0 -23
  119. data/features/fixtures/delayed_job/app/config/puma.rb +0 -47
  120. data/features/fixtures/delayed_job/app/config/routes.rb +0 -3
  121. data/features/fixtures/delayed_job/app/config/secrets.yml +0 -22
  122. data/features/fixtures/delayed_job/app/config/spring.rb +0 -6
  123. data/features/fixtures/delayed_job/app/config.ru +0 -5
  124. data/features/fixtures/delayed_job/app/db/migrate/20181024232549_create_delayed_jobs.rb +0 -22
  125. data/features/fixtures/delayed_job/app/db/migrate/20181024232817_create_test_models.rb +0 -8
  126. data/features/fixtures/delayed_job/app/db/schema.rb +0 -30
  127. data/features/fixtures/delayed_job/app/db/seeds.rb +0 -7
  128. data/features/fixtures/delayed_job/app/lib/assets/.keep +0 -0
  129. data/features/fixtures/delayed_job/app/lib/tasks/.keep +0 -0
  130. data/features/fixtures/delayed_job/app/log/.keep +0 -0
  131. data/features/fixtures/delayed_job/app/public/404.html +0 -67
  132. data/features/fixtures/delayed_job/app/public/422.html +0 -67
  133. data/features/fixtures/delayed_job/app/public/500.html +0 -66
  134. data/features/fixtures/delayed_job/app/public/apple-touch-icon-precomposed.png +0 -0
  135. data/features/fixtures/delayed_job/app/public/apple-touch-icon.png +0 -0
  136. data/features/fixtures/delayed_job/app/public/favicon.ico +0 -0
  137. data/features/fixtures/delayed_job/app/public/robots.txt +0 -5
  138. data/features/fixtures/delayed_job/app/test/controllers/.keep +0 -0
  139. data/features/fixtures/delayed_job/app/test/fixtures/.keep +0 -0
  140. data/features/fixtures/delayed_job/app/test/fixtures/files/.keep +0 -0
  141. data/features/fixtures/delayed_job/app/test/fixtures/test_models.yml +0 -11
  142. data/features/fixtures/delayed_job/app/test/helpers/.keep +0 -0
  143. data/features/fixtures/delayed_job/app/test/integration/.keep +0 -0
  144. data/features/fixtures/delayed_job/app/test/mailers/.keep +0 -0
  145. data/features/fixtures/delayed_job/app/test/models/.keep +0 -0
  146. data/features/fixtures/delayed_job/app/test/models/test_model_test.rb +0 -7
  147. data/features/fixtures/delayed_job/app/test/test_helper.rb +0 -10
  148. data/features/fixtures/delayed_job/app/tmp/.keep +0 -0
  149. data/features/fixtures/docker-compose.yml +0 -303
  150. data/features/fixtures/expected_breadcrumbs/active_job.json +0 -9
  151. data/features/fixtures/expected_breadcrumbs/mongo_failed.json +0 -15
  152. data/features/fixtures/expected_breadcrumbs/mongo_filtered_request.json +0 -15
  153. data/features/fixtures/expected_breadcrumbs/mongo_filtered_result.json +0 -15
  154. data/features/fixtures/expected_breadcrumbs/mongo_success.json +0 -14
  155. data/features/fixtures/expected_breadcrumbs/request.json +0 -13
  156. data/features/fixtures/expected_breadcrumbs/sql_with_bindings.json +0 -12
  157. data/features/fixtures/expected_breadcrumbs/sql_without_bindings.json +0 -11
  158. data/features/fixtures/plain/.dockerignore +0 -2
  159. data/features/fixtures/plain/Dockerfile +0 -11
  160. data/features/fixtures/plain/app/Gemfile +0 -3
  161. data/features/fixtures/plain/app/app.rb +0 -38
  162. data/features/fixtures/plain/app/configuration/api_key.rb +0 -9
  163. data/features/fixtures/plain/app/configuration/proxy.rb +0 -14
  164. data/features/fixtures/plain/app/configuration/send_handled.rb +0 -7
  165. data/features/fixtures/plain/app/configuration/send_unhandled.rb +0 -9
  166. data/features/fixtures/plain/app/delivery/fork_threadpool.rb +0 -27
  167. data/features/fixtures/plain/app/delivery/synchronous.rb +0 -14
  168. data/features/fixtures/plain/app/delivery/threadpool.rb +0 -14
  169. data/features/fixtures/plain/app/exception_data/crash.rb +0 -34
  170. data/features/fixtures/plain/app/exception_data/handled_context.rb +0 -10
  171. data/features/fixtures/plain/app/exception_data/handled_hash.rb +0 -10
  172. data/features/fixtures/plain/app/exception_data/handled_meta_data.rb +0 -10
  173. data/features/fixtures/plain/app/exception_data/handled_user_id.rb +0 -10
  174. data/features/fixtures/plain/app/exception_data/unhandled_context.rb +0 -7
  175. data/features/fixtures/plain/app/exception_data/unhandled_hash.rb +0 -7
  176. data/features/fixtures/plain/app/exception_data/unhandled_meta_data.rb +0 -7
  177. data/features/fixtures/plain/app/exception_data/unhandled_user_id.rb +0 -7
  178. data/features/fixtures/plain/app/filters/additional_filters.rb +0 -11
  179. data/features/fixtures/plain/app/filters/default_filters.rb +0 -15
  180. data/features/fixtures/plain/app/handled/block_metadata.rb +0 -15
  181. data/features/fixtures/plain/app/handled/ignore_exception.rb +0 -12
  182. data/features/fixtures/plain/app/handled/notify_exception.rb +0 -9
  183. data/features/fixtures/plain/app/handled/notify_string.rb +0 -9
  184. data/features/fixtures/plain/app/ignore_classes/handled.rb +0 -8
  185. data/features/fixtures/plain/app/ignore_classes/ignore_error.rb +0 -8
  186. data/features/fixtures/plain/app/ignore_classes/unhandled.rb +0 -4
  187. data/features/fixtures/plain/app/report_modification/add_tab.rb +0 -16
  188. data/features/fixtures/plain/app/report_modification/add_tab_existing.rb +0 -22
  189. data/features/fixtures/plain/app/report_modification/add_tab_override.rb +0 -19
  190. data/features/fixtures/plain/app/report_modification/ignore_report.rb +0 -9
  191. data/features/fixtures/plain/app/report_modification/initiators/handled_before_notify.rb +0 -10
  192. data/features/fixtures/plain/app/report_modification/initiators/handled_block.rb +0 -8
  193. data/features/fixtures/plain/app/report_modification/initiators/handled_on_error.rb +0 -10
  194. data/features/fixtures/plain/app/report_modification/initiators/unhandled_before_notify.rb +0 -11
  195. data/features/fixtures/plain/app/report_modification/initiators/unhandled_on_error.rb +0 -11
  196. data/features/fixtures/plain/app/report_modification/modify_api_key.rb +0 -9
  197. data/features/fixtures/plain/app/report_modification/modify_severity.rb +0 -9
  198. data/features/fixtures/plain/app/report_modification/remove_user_details.rb +0 -14
  199. data/features/fixtures/plain/app/report_modification/set_custom_user_details.rb +0 -16
  200. data/features/fixtures/plain/app/report_modification/set_user_details.rb +0 -13
  201. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_before_notify.rb +0 -29
  202. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_block.rb +0 -24
  203. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_on_error.rb +0 -29
  204. data/features/fixtures/plain/app/stack_frame_modification/initiators/unhandled_before_notify.rb +0 -26
  205. data/features/fixtures/plain/app/stack_frame_modification/initiators/unhandled_on_error.rb +0 -26
  206. data/features/fixtures/plain/app/stack_frame_modification/mark_frames_in_project.rb +0 -13
  207. data/features/fixtures/plain/app/stack_frame_modification/remove_stack_frame.rb +0 -9
  208. data/features/fixtures/plain/app/unhandled/bad_syntax.rb +0 -1
  209. data/features/fixtures/plain/app/unhandled/custom_error.rb +0 -9
  210. data/features/fixtures/plain/app/unhandled/interrupt.rb +0 -6
  211. data/features/fixtures/plain/app/unhandled/load_error.rb +0 -6
  212. data/features/fixtures/plain/app/unhandled/local_jump_error.rb +0 -10
  213. data/features/fixtures/plain/app/unhandled/name_error.rb +0 -6
  214. data/features/fixtures/plain/app/unhandled/no_method_error.rb +0 -6
  215. data/features/fixtures/plain/app/unhandled/runtime_error.rb +0 -6
  216. data/features/fixtures/plain/app/unhandled/syntax_error.rb +0 -6
  217. data/features/fixtures/plain/app/unhandled/system_call_error.rb +0 -6
  218. data/features/fixtures/plain/app/unhandled/system_exit.rb +0 -6
  219. data/features/fixtures/plain/json/delivery_fork.json +0 -4
  220. data/features/fixtures/plain/json/delivery_synchronous.json +0 -4
  221. data/features/fixtures/plain/json/delivery_threadpool.json +0 -4
  222. data/features/fixtures/plain/json/filters_default_metadata_filters.json +0 -9
  223. data/features/fixtures/rack1/.dockerignore +0 -1
  224. data/features/fixtures/rack1/Dockerfile +0 -13
  225. data/features/fixtures/rack1/Gemfile +0 -4
  226. data/features/fixtures/rack1/app.rb +0 -8
  227. data/features/fixtures/rack2/.dockerignore +0 -1
  228. data/features/fixtures/rack2/Dockerfile +0 -13
  229. data/features/fixtures/rack2/Gemfile +0 -4
  230. data/features/fixtures/rack2/app.rb +0 -8
  231. data/features/fixtures/rails3/.dockerignore +0 -1
  232. data/features/fixtures/rails3/Dockerfile +0 -15
  233. data/features/fixtures/rails3/app/.gitignore +0 -15
  234. data/features/fixtures/rails3/app/Gemfile +0 -17
  235. data/features/fixtures/rails3/app/Rakefile +0 -7
  236. data/features/fixtures/rails3/app/app/assets/images/rails.png +0 -0
  237. data/features/fixtures/rails3/app/app/assets/javascripts/application.js +0 -15
  238. data/features/fixtures/rails3/app/app/assets/stylesheets/application.css +0 -13
  239. data/features/fixtures/rails3/app/app/controllers/api_key_controller.rb +0 -20
  240. data/features/fixtures/rails3/app/app/controllers/app_type_controller.rb +0 -20
  241. data/features/fixtures/rails3/app/app/controllers/app_version_controller.rb +0 -25
  242. data/features/fixtures/rails3/app/app/controllers/application_controller.rb +0 -7
  243. data/features/fixtures/rails3/app/app/controllers/auto_notify_controller.rb +0 -31
  244. data/features/fixtures/rails3/app/app/controllers/before_notify_controller.rb +0 -44
  245. data/features/fixtures/rails3/app/app/controllers/breadcrumbs_controller.rb +0 -19
  246. data/features/fixtures/rails3/app/app/controllers/handled_controller.rb +0 -26
  247. data/features/fixtures/rails3/app/app/controllers/ignore_classes_controller.rb +0 -23
  248. data/features/fixtures/rails3/app/app/controllers/metadata_filters_controller.rb +0 -16
  249. data/features/fixtures/rails3/app/app/controllers/project_root_controller.rb +0 -25
  250. data/features/fixtures/rails3/app/app/controllers/release_stage_controller.rb +0 -20
  251. data/features/fixtures/rails3/app/app/controllers/send_code_controller.rb +0 -20
  252. data/features/fixtures/rails3/app/app/controllers/send_environment_controller.rb +0 -12
  253. data/features/fixtures/rails3/app/app/controllers/session_tracking_controller.rb +0 -24
  254. data/features/fixtures/rails3/app/app/controllers/unhandled_controller.rb +0 -11
  255. data/features/fixtures/rails3/app/app/controllers/warden_controller.rb +0 -30
  256. data/features/fixtures/rails3/app/app/helpers/application_helper.rb +0 -2
  257. data/features/fixtures/rails3/app/app/mailers/.gitkeep +0 -0
  258. data/features/fixtures/rails3/app/app/models/.gitkeep +0 -0
  259. data/features/fixtures/rails3/app/app/models/user.rb +0 -6
  260. data/features/fixtures/rails3/app/app/views/layouts/application.html.erb +0 -14
  261. data/features/fixtures/rails3/app/config/application.rb +0 -67
  262. data/features/fixtures/rails3/app/config/boot.rb +0 -6
  263. data/features/fixtures/rails3/app/config/database.yml +0 -31
  264. data/features/fixtures/rails3/app/config/environment.rb +0 -5
  265. data/features/fixtures/rails3/app/config/environments/development.rb +0 -37
  266. data/features/fixtures/rails3/app/config/environments/production.rb +0 -67
  267. data/features/fixtures/rails3/app/config/environments/rails_env.rb +0 -37
  268. data/features/fixtures/rails3/app/config/initializers/bugsnag.rb +0 -29
  269. data/features/fixtures/rails3/app/config/initializers/secret_token.rb +0 -7
  270. data/features/fixtures/rails3/app/config/initializers/session_store.rb +0 -8
  271. data/features/fixtures/rails3/app/config/initializers/warden.rb +0 -3
  272. data/features/fixtures/rails3/app/config/initializers/wrap_parameters.rb +0 -14
  273. data/features/fixtures/rails3/app/config/locales/en.yml +0 -5
  274. data/features/fixtures/rails3/app/config/routes.rb +0 -19
  275. data/features/fixtures/rails3/app/config.ru +0 -4
  276. data/features/fixtures/rails3/app/db/migrate/20180423142727_create_users.rb +0 -45
  277. data/features/fixtures/rails3/app/db/schema.rb +0 -37
  278. data/features/fixtures/rails3/app/db/seeds.rb +0 -7
  279. data/features/fixtures/rails3/app/lib/assets/.gitkeep +0 -0
  280. data/features/fixtures/rails3/app/lib/strategies/token_strategy.rb +0 -12
  281. data/features/fixtures/rails3/app/lib/tasks/.gitkeep +0 -0
  282. data/features/fixtures/rails3/app/log/.gitkeep +0 -0
  283. data/features/fixtures/rails3/app/public/404.html +0 -26
  284. data/features/fixtures/rails3/app/public/422.html +0 -26
  285. data/features/fixtures/rails3/app/public/500.html +0 -25
  286. data/features/fixtures/rails3/app/public/favicon.ico +0 -0
  287. data/features/fixtures/rails3/app/public/index.html +0 -241
  288. data/features/fixtures/rails3/app/public/robots.txt +0 -5
  289. data/features/fixtures/rails3/app/script/rails +0 -6
  290. data/features/fixtures/rails4/.dockerignore +0 -1
  291. data/features/fixtures/rails4/Dockerfile +0 -17
  292. data/features/fixtures/rails4/app/.gitignore +0 -16
  293. data/features/fixtures/rails4/app/Gemfile +0 -46
  294. data/features/fixtures/rails4/app/README.rdoc +0 -28
  295. data/features/fixtures/rails4/app/Rakefile +0 -6
  296. data/features/fixtures/rails4/app/app/assets/images/.keep +0 -0
  297. data/features/fixtures/rails4/app/app/assets/javascripts/application.js +0 -16
  298. data/features/fixtures/rails4/app/app/assets/stylesheets/application.css +0 -13
  299. data/features/fixtures/rails4/app/app/controllers/api_key_controller.rb +0 -20
  300. data/features/fixtures/rails4/app/app/controllers/app_type_controller.rb +0 -20
  301. data/features/fixtures/rails4/app/app/controllers/app_version_controller.rb +0 -25
  302. data/features/fixtures/rails4/app/app/controllers/application_controller.rb +0 -7
  303. data/features/fixtures/rails4/app/app/controllers/auto_notify_controller.rb +0 -31
  304. data/features/fixtures/rails4/app/app/controllers/before_notify_controller.rb +0 -44
  305. data/features/fixtures/rails4/app/app/controllers/breadcrumbs_controller.rb +0 -26
  306. data/features/fixtures/rails4/app/app/controllers/concerns/.keep +0 -0
  307. data/features/fixtures/rails4/app/app/controllers/devise_controller.rb +0 -32
  308. data/features/fixtures/rails4/app/app/controllers/handled_controller.rb +0 -26
  309. data/features/fixtures/rails4/app/app/controllers/ignore_classes_controller.rb +0 -23
  310. data/features/fixtures/rails4/app/app/controllers/metadata_filters_controller.rb +0 -16
  311. data/features/fixtures/rails4/app/app/controllers/mongo_controller.rb +0 -23
  312. data/features/fixtures/rails4/app/app/controllers/project_root_controller.rb +0 -25
  313. data/features/fixtures/rails4/app/app/controllers/release_stage_controller.rb +0 -20
  314. data/features/fixtures/rails4/app/app/controllers/send_code_controller.rb +0 -20
  315. data/features/fixtures/rails4/app/app/controllers/send_environment_controller.rb +0 -12
  316. data/features/fixtures/rails4/app/app/controllers/session_tracking_controller.rb +0 -24
  317. data/features/fixtures/rails4/app/app/controllers/unhandled_controller.rb +0 -11
  318. data/features/fixtures/rails4/app/app/helpers/application_helper.rb +0 -2
  319. data/features/fixtures/rails4/app/app/jobs/application_job.rb +0 -2
  320. data/features/fixtures/rails4/app/app/jobs/notify_job.rb +0 -5
  321. data/features/fixtures/rails4/app/app/mailers/.keep +0 -0
  322. data/features/fixtures/rails4/app/app/models/.keep +0 -0
  323. data/features/fixtures/rails4/app/app/models/concerns/.keep +0 -0
  324. data/features/fixtures/rails4/app/app/models/mongo_model.rb +0 -6
  325. data/features/fixtures/rails4/app/app/models/user.rb +0 -6
  326. data/features/fixtures/rails4/app/app/views/layouts/application.html.erb +0 -14
  327. data/features/fixtures/rails4/app/config/application.rb +0 -23
  328. data/features/fixtures/rails4/app/config/boot.rb +0 -4
  329. data/features/fixtures/rails4/app/config/database.yml +0 -31
  330. data/features/fixtures/rails4/app/config/environment.rb +0 -5
  331. data/features/fixtures/rails4/app/config/environments/development.rb +0 -31
  332. data/features/fixtures/rails4/app/config/environments/production.rb +0 -81
  333. data/features/fixtures/rails4/app/config/environments/rails_env.rb +0 -30
  334. data/features/fixtures/rails4/app/config/environments/test.rb +0 -31
  335. data/features/fixtures/rails4/app/config/initializers/backtrace_silencers.rb +0 -7
  336. data/features/fixtures/rails4/app/config/initializers/bugsnag.rb +0 -29
  337. data/features/fixtures/rails4/app/config/initializers/devise.rb +0 -283
  338. data/features/fixtures/rails4/app/config/initializers/filter_parameter_logging.rb +0 -5
  339. data/features/fixtures/rails4/app/config/initializers/inflections.rb +0 -16
  340. data/features/fixtures/rails4/app/config/initializers/mime_types.rb +0 -5
  341. data/features/fixtures/rails4/app/config/initializers/secret_token.rb +0 -12
  342. data/features/fixtures/rails4/app/config/initializers/session_store.rb +0 -3
  343. data/features/fixtures/rails4/app/config/initializers/wrap_parameters.rb +0 -14
  344. data/features/fixtures/rails4/app/config/locales/devise.en.yml +0 -64
  345. data/features/fixtures/rails4/app/config/locales/en.yml +0 -23
  346. data/features/fixtures/rails4/app/config/mongoid.yml +0 -22
  347. data/features/fixtures/rails4/app/config/routes.rb +0 -21
  348. data/features/fixtures/rails4/app/config.ru +0 -4
  349. data/features/fixtures/rails4/app/db/migrate/20180420160315_devise_create_users.rb +0 -47
  350. data/features/fixtures/rails4/app/db/seeds.rb +0 -7
  351. data/features/fixtures/rails4/app/lib/assets/.keep +0 -0
  352. data/features/fixtures/rails4/app/lib/tasks/.keep +0 -0
  353. data/features/fixtures/rails4/app/log/.keep +0 -0
  354. data/features/fixtures/rails4/app/public/404.html +0 -58
  355. data/features/fixtures/rails4/app/public/422.html +0 -58
  356. data/features/fixtures/rails4/app/public/500.html +0 -57
  357. data/features/fixtures/rails4/app/public/favicon.ico +0 -0
  358. data/features/fixtures/rails4/app/public/robots.txt +0 -5
  359. data/features/fixtures/rails4/app/test/controllers/.keep +0 -0
  360. data/features/fixtures/rails4/app/test/fixtures/.keep +0 -0
  361. data/features/fixtures/rails4/app/test/helpers/.keep +0 -0
  362. data/features/fixtures/rails4/app/test/integration/.keep +0 -0
  363. data/features/fixtures/rails4/app/test/mailers/.keep +0 -0
  364. data/features/fixtures/rails4/app/test/models/.keep +0 -0
  365. data/features/fixtures/rails4/app/test/test_helper.rb +0 -15
  366. data/features/fixtures/rails5/.dockerignore +0 -1
  367. data/features/fixtures/rails5/Dockerfile +0 -17
  368. data/features/fixtures/rails5/app/.gitignore +0 -21
  369. data/features/fixtures/rails5/app/Gemfile +0 -52
  370. data/features/fixtures/rails5/app/README.md +0 -24
  371. data/features/fixtures/rails5/app/Rakefile +0 -6
  372. data/features/fixtures/rails5/app/app/assets/config/manifest.js +0 -3
  373. data/features/fixtures/rails5/app/app/assets/images/.keep +0 -0
  374. data/features/fixtures/rails5/app/app/assets/javascripts/application.js +0 -16
  375. data/features/fixtures/rails5/app/app/assets/javascripts/cable.js +0 -13
  376. data/features/fixtures/rails5/app/app/assets/javascripts/channels/.keep +0 -0
  377. data/features/fixtures/rails5/app/app/assets/stylesheets/application.css +0 -15
  378. data/features/fixtures/rails5/app/app/channels/application_cable/channel.rb +0 -4
  379. data/features/fixtures/rails5/app/app/channels/application_cable/connection.rb +0 -4
  380. data/features/fixtures/rails5/app/app/controllers/api_key_controller.rb +0 -16
  381. data/features/fixtures/rails5/app/app/controllers/app_type_controller.rb +0 -16
  382. data/features/fixtures/rails5/app/app/controllers/app_version_controller.rb +0 -21
  383. data/features/fixtures/rails5/app/app/controllers/application_controller.rb +0 -7
  384. data/features/fixtures/rails5/app/app/controllers/auto_notify_controller.rb +0 -27
  385. data/features/fixtures/rails5/app/app/controllers/before_notify_controller.rb +0 -40
  386. data/features/fixtures/rails5/app/app/controllers/breadcrumbs_controller.rb +0 -24
  387. data/features/fixtures/rails5/app/app/controllers/clearance_controller.rb +0 -33
  388. data/features/fixtures/rails5/app/app/controllers/concerns/.keep +0 -0
  389. data/features/fixtures/rails5/app/app/controllers/handled_controller.rb +0 -22
  390. data/features/fixtures/rails5/app/app/controllers/ignore_classes_controller.rb +0 -19
  391. data/features/fixtures/rails5/app/app/controllers/metadata_filters_controller.rb +0 -12
  392. data/features/fixtures/rails5/app/app/controllers/mongo_controller.rb +0 -22
  393. data/features/fixtures/rails5/app/app/controllers/project_root_controller.rb +0 -21
  394. data/features/fixtures/rails5/app/app/controllers/release_stage_controller.rb +0 -16
  395. data/features/fixtures/rails5/app/app/controllers/send_code_controller.rb +0 -16
  396. data/features/fixtures/rails5/app/app/controllers/send_environment_controller.rb +0 -8
  397. data/features/fixtures/rails5/app/app/controllers/session_tracking_controller.rb +0 -20
  398. data/features/fixtures/rails5/app/app/controllers/unhandled_controller.rb +0 -7
  399. data/features/fixtures/rails5/app/app/helpers/application_helper.rb +0 -2
  400. data/features/fixtures/rails5/app/app/jobs/application_job.rb +0 -2
  401. data/features/fixtures/rails5/app/app/jobs/notify_job.rb +0 -5
  402. data/features/fixtures/rails5/app/app/mailers/application_mailer.rb +0 -4
  403. data/features/fixtures/rails5/app/app/models/application_record.rb +0 -3
  404. data/features/fixtures/rails5/app/app/models/concerns/.keep +0 -0
  405. data/features/fixtures/rails5/app/app/models/mongo_model.rb +0 -6
  406. data/features/fixtures/rails5/app/app/models/user.rb +0 -3
  407. data/features/fixtures/rails5/app/app/views/layouts/application.html.erb +0 -14
  408. data/features/fixtures/rails5/app/app/views/layouts/mailer.html.erb +0 -13
  409. data/features/fixtures/rails5/app/app/views/layouts/mailer.text.erb +0 -1
  410. data/features/fixtures/rails5/app/config/application.rb +0 -15
  411. data/features/fixtures/rails5/app/config/boot.rb +0 -3
  412. data/features/fixtures/rails5/app/config/cable.yml +0 -9
  413. data/features/fixtures/rails5/app/config/database.yml +0 -29
  414. data/features/fixtures/rails5/app/config/environment.rb +0 -5
  415. data/features/fixtures/rails5/app/config/environments/development.rb +0 -55
  416. data/features/fixtures/rails5/app/config/environments/production.rb +0 -87
  417. data/features/fixtures/rails5/app/config/environments/rails_env.rb +0 -55
  418. data/features/fixtures/rails5/app/config/environments/test.rb +0 -55
  419. data/features/fixtures/rails5/app/config/initializers/assets.rb +0 -11
  420. data/features/fixtures/rails5/app/config/initializers/backtrace_silencers.rb +0 -7
  421. data/features/fixtures/rails5/app/config/initializers/bugsnag.rb +0 -29
  422. data/features/fixtures/rails5/app/config/initializers/clearance.rb +0 -5
  423. data/features/fixtures/rails5/app/config/initializers/cookies_serializer.rb +0 -5
  424. data/features/fixtures/rails5/app/config/initializers/filter_parameter_logging.rb +0 -5
  425. data/features/fixtures/rails5/app/config/initializers/inflections.rb +0 -16
  426. data/features/fixtures/rails5/app/config/initializers/mime_types.rb +0 -4
  427. data/features/fixtures/rails5/app/config/initializers/new_framework_defaults.rb +0 -24
  428. data/features/fixtures/rails5/app/config/initializers/session_store.rb +0 -3
  429. data/features/fixtures/rails5/app/config/initializers/wrap_parameters.rb +0 -14
  430. data/features/fixtures/rails5/app/config/locales/devise.en.yml +0 -64
  431. data/features/fixtures/rails5/app/config/locales/en.yml +0 -23
  432. data/features/fixtures/rails5/app/config/mongoid.yml +0 -23
  433. data/features/fixtures/rails5/app/config/puma.rb +0 -47
  434. data/features/fixtures/rails5/app/config/routes.rb +0 -62
  435. data/features/fixtures/rails5/app/config/secrets.yml +0 -25
  436. data/features/fixtures/rails5/app/config/spring.rb +0 -6
  437. data/features/fixtures/rails5/app/config.ru +0 -5
  438. data/features/fixtures/rails5/app/db/migrate/20180426095545_create_users.rb +0 -17
  439. data/features/fixtures/rails5/app/db/schema.rb +0 -29
  440. data/features/fixtures/rails5/app/db/seeds.rb +0 -7
  441. data/features/fixtures/rails5/app/lib/assets/.keep +0 -0
  442. data/features/fixtures/rails5/app/lib/tasks/.keep +0 -0
  443. data/features/fixtures/rails5/app/log/.keep +0 -0
  444. data/features/fixtures/rails5/app/public/404.html +0 -67
  445. data/features/fixtures/rails5/app/public/422.html +0 -67
  446. data/features/fixtures/rails5/app/public/500.html +0 -66
  447. data/features/fixtures/rails5/app/public/apple-touch-icon-precomposed.png +0 -0
  448. data/features/fixtures/rails5/app/public/apple-touch-icon.png +0 -0
  449. data/features/fixtures/rails5/app/public/favicon.ico +0 -0
  450. data/features/fixtures/rails5/app/public/robots.txt +0 -5
  451. data/features/fixtures/rails5/app/test/controllers/.keep +0 -0
  452. data/features/fixtures/rails5/app/test/fixtures/.keep +0 -0
  453. data/features/fixtures/rails5/app/test/fixtures/files/.keep +0 -0
  454. data/features/fixtures/rails5/app/test/helpers/.keep +0 -0
  455. data/features/fixtures/rails5/app/test/integration/.keep +0 -0
  456. data/features/fixtures/rails5/app/test/mailers/.keep +0 -0
  457. data/features/fixtures/rails5/app/test/models/.keep +0 -0
  458. data/features/fixtures/rails5/app/test/test_helper.rb +0 -10
  459. data/features/fixtures/rails5/app/tmp/.keep +0 -0
  460. data/features/fixtures/rails6/.dockerignore +0 -1
  461. data/features/fixtures/rails6/Dockerfile +0 -26
  462. data/features/fixtures/rails6/app/.browserslistrc +0 -1
  463. data/features/fixtures/rails6/app/.gitignore +0 -35
  464. data/features/fixtures/rails6/app/.ruby-version +0 -1
  465. data/features/fixtures/rails6/app/Gemfile +0 -58
  466. data/features/fixtures/rails6/app/README.md +0 -24
  467. data/features/fixtures/rails6/app/Rakefile +0 -6
  468. data/features/fixtures/rails6/app/app/assets/config/manifest.js +0 -2
  469. data/features/fixtures/rails6/app/app/assets/images/.keep +0 -0
  470. data/features/fixtures/rails6/app/app/assets/stylesheets/application.css +0 -15
  471. data/features/fixtures/rails6/app/app/channels/application_cable/channel.rb +0 -4
  472. data/features/fixtures/rails6/app/app/channels/application_cable/connection.rb +0 -4
  473. data/features/fixtures/rails6/app/app/controllers/api_key_controller.rb +0 -16
  474. data/features/fixtures/rails6/app/app/controllers/app_type_controller.rb +0 -16
  475. data/features/fixtures/rails6/app/app/controllers/app_version_controller.rb +0 -21
  476. data/features/fixtures/rails6/app/app/controllers/application_controller.rb +0 -7
  477. data/features/fixtures/rails6/app/app/controllers/auto_notify_controller.rb +0 -27
  478. data/features/fixtures/rails6/app/app/controllers/before_notify_controller.rb +0 -40
  479. data/features/fixtures/rails6/app/app/controllers/breadcrumbs_controller.rb +0 -24
  480. data/features/fixtures/rails6/app/app/controllers/clearance_controller.rb +0 -33
  481. data/features/fixtures/rails6/app/app/controllers/concerns/.keep +0 -0
  482. data/features/fixtures/rails6/app/app/controllers/handled_controller.rb +0 -22
  483. data/features/fixtures/rails6/app/app/controllers/ignore_classes_controller.rb +0 -19
  484. data/features/fixtures/rails6/app/app/controllers/metadata_filters_controller.rb +0 -12
  485. data/features/fixtures/rails6/app/app/controllers/mongo_controller.rb +0 -22
  486. data/features/fixtures/rails6/app/app/controllers/project_root_controller.rb +0 -21
  487. data/features/fixtures/rails6/app/app/controllers/release_stage_controller.rb +0 -16
  488. data/features/fixtures/rails6/app/app/controllers/send_code_controller.rb +0 -16
  489. data/features/fixtures/rails6/app/app/controllers/send_environment_controller.rb +0 -8
  490. data/features/fixtures/rails6/app/app/controllers/session_tracking_controller.rb +0 -20
  491. data/features/fixtures/rails6/app/app/controllers/unhandled_controller.rb +0 -7
  492. data/features/fixtures/rails6/app/app/helpers/application_helper.rb +0 -2
  493. data/features/fixtures/rails6/app/app/javascript/channels/consumer.js +0 -6
  494. data/features/fixtures/rails6/app/app/javascript/channels/index.js +0 -5
  495. data/features/fixtures/rails6/app/app/javascript/packs/application.js +0 -9
  496. data/features/fixtures/rails6/app/app/jobs/application_job.rb +0 -7
  497. data/features/fixtures/rails6/app/app/jobs/notify_job.rb +0 -5
  498. data/features/fixtures/rails6/app/app/mailers/application_mailer.rb +0 -4
  499. data/features/fixtures/rails6/app/app/models/application_record.rb +0 -3
  500. data/features/fixtures/rails6/app/app/models/concerns/.keep +0 -0
  501. data/features/fixtures/rails6/app/app/models/mongo_model.rb +0 -6
  502. data/features/fixtures/rails6/app/app/models/user.rb +0 -3
  503. data/features/fixtures/rails6/app/app/views/layouts/application.html.erb +0 -15
  504. data/features/fixtures/rails6/app/app/views/layouts/mailer.html.erb +0 -13
  505. data/features/fixtures/rails6/app/app/views/layouts/mailer.text.erb +0 -1
  506. data/features/fixtures/rails6/app/babel.config.js +0 -70
  507. data/features/fixtures/rails6/app/config/application.rb +0 -19
  508. data/features/fixtures/rails6/app/config/boot.rb +0 -4
  509. data/features/fixtures/rails6/app/config/cable.yml +0 -13
  510. data/features/fixtures/rails6/app/config/credentials.yml.enc +0 -1
  511. data/features/fixtures/rails6/app/config/database.yml +0 -29
  512. data/features/fixtures/rails6/app/config/environment.rb +0 -5
  513. data/features/fixtures/rails6/app/config/environments/development.rb +0 -64
  514. data/features/fixtures/rails6/app/config/environments/production.rb +0 -113
  515. data/features/fixtures/rails6/app/config/environments/rails_env.rb +0 -56
  516. data/features/fixtures/rails6/app/config/environments/test.rb +0 -48
  517. data/features/fixtures/rails6/app/config/initializers/application_controller_renderer.rb +0 -8
  518. data/features/fixtures/rails6/app/config/initializers/assets.rb +0 -14
  519. data/features/fixtures/rails6/app/config/initializers/backtrace_silencers.rb +0 -7
  520. data/features/fixtures/rails6/app/config/initializers/bugsnag.rb +0 -29
  521. data/features/fixtures/rails6/app/config/initializers/content_security_policy.rb +0 -27
  522. data/features/fixtures/rails6/app/config/initializers/cookies_serializer.rb +0 -5
  523. data/features/fixtures/rails6/app/config/initializers/filter_parameter_logging.rb +0 -5
  524. data/features/fixtures/rails6/app/config/initializers/inflections.rb +0 -16
  525. data/features/fixtures/rails6/app/config/initializers/mime_types.rb +0 -4
  526. data/features/fixtures/rails6/app/config/initializers/wrap_parameters.rb +0 -14
  527. data/features/fixtures/rails6/app/config/locales/en.yml +0 -33
  528. data/features/fixtures/rails6/app/config/mongoid.yml +0 -23
  529. data/features/fixtures/rails6/app/config/puma.rb +0 -35
  530. data/features/fixtures/rails6/app/config/routes.rb +0 -62
  531. data/features/fixtures/rails6/app/config/secrets.yml +0 -25
  532. data/features/fixtures/rails6/app/config/spring.rb +0 -6
  533. data/features/fixtures/rails6/app/config/storage.yml +0 -34
  534. data/features/fixtures/rails6/app/config/webpack/development.js +0 -5
  535. data/features/fixtures/rails6/app/config/webpack/environment.js +0 -3
  536. data/features/fixtures/rails6/app/config/webpack/production.js +0 -5
  537. data/features/fixtures/rails6/app/config/webpack/rails_env.js +0 -5
  538. data/features/fixtures/rails6/app/config/webpack/test.js +0 -5
  539. data/features/fixtures/rails6/app/config/webpacker.yml +0 -121
  540. data/features/fixtures/rails6/app/config.ru +0 -5
  541. data/features/fixtures/rails6/app/db/migrate/20180426095545_create_users.rb +0 -17
  542. data/features/fixtures/rails6/app/db/schema.rb +0 -29
  543. data/features/fixtures/rails6/app/db/seeds.rb +0 -7
  544. data/features/fixtures/rails6/app/lib/assets/.keep +0 -0
  545. data/features/fixtures/rails6/app/lib/tasks/.keep +0 -0
  546. data/features/fixtures/rails6/app/log/.keep +0 -0
  547. data/features/fixtures/rails6/app/package.json +0 -15
  548. data/features/fixtures/rails6/app/postcss.config.js +0 -12
  549. data/features/fixtures/rails6/app/public/404.html +0 -67
  550. data/features/fixtures/rails6/app/public/422.html +0 -67
  551. data/features/fixtures/rails6/app/public/500.html +0 -66
  552. data/features/fixtures/rails6/app/public/apple-touch-icon-precomposed.png +0 -0
  553. data/features/fixtures/rails6/app/public/apple-touch-icon.png +0 -0
  554. data/features/fixtures/rails6/app/public/favicon.ico +0 -0
  555. data/features/fixtures/rails6/app/public/robots.txt +0 -1
  556. data/features/fixtures/rails6/app/storage/.keep +0 -0
  557. data/features/fixtures/rails6/app/test/application_system_test_case.rb +0 -5
  558. data/features/fixtures/rails6/app/test/channels/application_cable/connection_test.rb +0 -11
  559. data/features/fixtures/rails6/app/test/controllers/.keep +0 -0
  560. data/features/fixtures/rails6/app/test/fixtures/.keep +0 -0
  561. data/features/fixtures/rails6/app/test/fixtures/files/.keep +0 -0
  562. data/features/fixtures/rails6/app/test/helpers/.keep +0 -0
  563. data/features/fixtures/rails6/app/test/integration/.keep +0 -0
  564. data/features/fixtures/rails6/app/test/mailers/.keep +0 -0
  565. data/features/fixtures/rails6/app/test/models/.keep +0 -0
  566. data/features/fixtures/rails6/app/test/system/.keep +0 -0
  567. data/features/fixtures/rails6/app/test/test_helper.rb +0 -13
  568. data/features/fixtures/rails6/app/tmp/.keep +0 -0
  569. data/features/fixtures/rails6/app/yarn.lock +0 -6082
  570. data/features/fixtures/resque/.dockerignore +0 -1
  571. data/features/fixtures/resque/Dockerfile +0 -14
  572. data/features/fixtures/resque/Gemfile +0 -6
  573. data/features/fixtures/resque/Rakefile +0 -4
  574. data/features/fixtures/resque/app.rb +0 -12
  575. data/features/fixtures/sidekiq/.dockerignore +0 -2
  576. data/features/fixtures/sidekiq/Dockerfile +0 -17
  577. data/features/fixtures/sidekiq/app/Gemfile +0 -7
  578. data/features/fixtures/sidekiq/app/Rakefile.rb +0 -14
  579. data/features/fixtures/sidekiq/app/app.rb +0 -35
  580. data/features/fixtures/sidekiq/app/initializers/HandledError.rb +0 -3
  581. data/features/fixtures/sidekiq/app/initializers/UnhandledError.rb +0 -3
  582. data/features/fixtures/sidekiq/payloads/handled_metadata_ca_false.json +0 -11
  583. data/features/fixtures/sidekiq/payloads/handled_metadata_ca_true.json +0 -12
  584. data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_false.json +0 -11
  585. data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_true.json +0 -12
  586. data/features/fixtures/sinatra1/.dockerignore +0 -1
  587. data/features/fixtures/sinatra1/Dockerfile +0 -13
  588. data/features/fixtures/sinatra1/Gemfile +0 -4
  589. data/features/fixtures/sinatra1/app.rb +0 -9
  590. data/features/fixtures/sinatra2/.dockerignore +0 -1
  591. data/features/fixtures/sinatra2/Dockerfile +0 -13
  592. data/features/fixtures/sinatra2/Gemfile +0 -4
  593. data/features/fixtures/sinatra2/app.rb +0 -9
  594. data/features/plain_features/add_tab.feature +0 -55
  595. data/features/plain_features/app_type.feature +0 -8
  596. data/features/plain_features/app_version.feature +0 -8
  597. data/features/plain_features/auto_notify.feature +0 -7
  598. data/features/plain_features/delivery.feature +0 -20
  599. data/features/plain_features/exception_data.feature +0 -50
  600. data/features/plain_features/filters.feature +0 -14
  601. data/features/plain_features/handled_errors.feature +0 -42
  602. data/features/plain_features/ignore_classes.feature +0 -11
  603. data/features/plain_features/ignore_report.feature +0 -14
  604. data/features/plain_features/proxies.feature +0 -25
  605. data/features/plain_features/release_stages.feature +0 -20
  606. data/features/plain_features/report_api_key.feature +0 -16
  607. data/features/plain_features/report_severity.feature +0 -17
  608. data/features/plain_features/report_stack_frames.feature +0 -53
  609. data/features/plain_features/report_user.feature +0 -51
  610. data/features/plain_features/unhandled_errors.feature +0 -33
  611. data/features/rails_features/api_key.feature +0 -15
  612. data/features/rails_features/app_type.feature +0 -24
  613. data/features/rails_features/app_version.feature +0 -26
  614. data/features/rails_features/auto_capture_sessions.feature +0 -34
  615. data/features/rails_features/auto_notify.feature +0 -41
  616. data/features/rails_features/before_notify.feature +0 -44
  617. data/features/rails_features/breadcrumbs.feature +0 -43
  618. data/features/rails_features/handled.feature +0 -42
  619. data/features/rails_features/ignore_classes.feature +0 -14
  620. data/features/rails_features/meta_data_filters.feature +0 -16
  621. data/features/rails_features/mongo_breadcrumbs.feature +0 -26
  622. data/features/rails_features/on_error.feature +0 -29
  623. data/features/rails_features/project_root.feature +0 -35
  624. data/features/rails_features/release_stage.feature +0 -27
  625. data/features/rails_features/send_code.feature +0 -18
  626. data/features/rails_features/send_environment.feature +0 -13
  627. data/features/rails_features/unhandled.feature +0 -16
  628. data/features/rails_features/user_info.feature +0 -52
  629. data/features/sidekiq.feature +0 -30
  630. data/features/steps/ruby_notifier_steps.rb +0 -75
  631. data/features/support/env.rb +0 -23
  632. data/issue_template.md +0 -48
  633. data/spec/breadcrumbs/breadcrumb_spec.rb +0 -93
  634. data/spec/breadcrumbs/validator_spec.rb +0 -176
  635. data/spec/bugsnag_spec.rb +0 -366
  636. data/spec/cleaner_spec.rb +0 -350
  637. data/spec/code_extractor_spec.rb +0 -129
  638. data/spec/configuration_spec.rb +0 -445
  639. data/spec/fixtures/apps/rails-initializer-config/Gemfile +0 -9
  640. data/spec/fixtures/apps/rails-initializer-config/config/initializers/bugsnag.rb +0 -3
  641. data/spec/fixtures/apps/rails-initializer-config/config.ru +0 -16
  642. data/spec/fixtures/apps/rails-invalid-initializer-config/Gemfile +0 -9
  643. data/spec/fixtures/apps/rails-invalid-initializer-config/config/initializers/bugsnag.rb +0 -3
  644. data/spec/fixtures/apps/rails-invalid-initializer-config/config.ru +0 -16
  645. data/spec/fixtures/apps/rails-no-config/Gemfile +0 -9
  646. data/spec/fixtures/apps/rails-no-config/config.ru +0 -16
  647. data/spec/fixtures/apps/scripts/Gemfile +0 -3
  648. data/spec/fixtures/apps/scripts/configure_invalid_key.rb +0 -5
  649. data/spec/fixtures/apps/scripts/configure_key.rb +0 -5
  650. data/spec/fixtures/apps/scripts/no_config.rb +0 -3
  651. data/spec/fixtures/crashes/end_of_file.rb +0 -9
  652. data/spec/fixtures/crashes/file1.rb +0 -29
  653. data/spec/fixtures/crashes/file2.rb +0 -25
  654. data/spec/fixtures/crashes/file_with_long_lines.rb +0 -7
  655. data/spec/fixtures/crashes/functions.rb +0 -29
  656. data/spec/fixtures/crashes/short_file.rb +0 -3
  657. data/spec/fixtures/crashes/start_of_file.rb +0 -9
  658. data/spec/fixtures/middleware/internal_info_setter.rb +0 -11
  659. data/spec/fixtures/middleware/public_info_setter.rb +0 -11
  660. data/spec/fixtures/tasks/Rakefile +0 -26
  661. data/spec/helper_spec.rb +0 -131
  662. data/spec/integration_spec.rb +0 -107
  663. data/spec/integrations/clearance_user_spec.rb +0 -38
  664. data/spec/integrations/logger_spec.rb +0 -134
  665. data/spec/integrations/mailman_spec.rb +0 -83
  666. data/spec/integrations/mongo_spec.rb +0 -262
  667. data/spec/integrations/que_spec.rb +0 -94
  668. data/spec/integrations/rack_spec.rb +0 -232
  669. data/spec/integrations/rails3_request_spec.rb +0 -67
  670. data/spec/integrations/rake_spec.rb +0 -71
  671. data/spec/integrations/resque_spec.rb +0 -99
  672. data/spec/integrations/shoryuken_spec.rb +0 -70
  673. data/spec/integrations/sidekiq_spec.rb +0 -137
  674. data/spec/integrations/warden_user_spec.rb +0 -41
  675. data/spec/middleware/exception_meta_data_spec.rb +0 -104
  676. data/spec/middleware_spec.rb +0 -254
  677. data/spec/middleware_stack_spec.rb +0 -151
  678. data/spec/on_error_spec.rb +0 -332
  679. data/spec/report_spec.rb +0 -1583
  680. data/spec/session_tracker_spec.rb +0 -156
  681. data/spec/spec_helper.rb +0 -99
  682. data/spec/stacktrace_spec.rb +0 -443
  683. data/spec/utility/circular_buffer_spec.rb +0 -98
@@ -1,19 +1,78 @@
1
1
  # Rails 3.x hooks
2
2
 
3
- require "json"
4
3
  require "rails"
5
- require "bugsnag"
6
- require "bugsnag/middleware/rails3_request"
7
- require "bugsnag/middleware/rack_request"
8
4
  require "bugsnag/integrations/rails/rails_breadcrumbs"
9
5
 
10
6
  module Bugsnag
11
7
  class Railtie < ::Rails::Railtie
12
-
13
8
  FRAMEWORK_ATTRIBUTES = {
14
9
  :framework => "Rails"
15
10
  }
16
11
 
12
+ ##
13
+ # Subscribes to an ActiveSupport event, leaving a breadcrumb when it triggers
14
+ #
15
+ # @api private
16
+ # @param event [Hash] details of the event to subscribe to
17
+ def event_subscription(event)
18
+ ActiveSupport::Notifications.subscribe(event[:id]) do |*, event_id, data|
19
+ filtered_data = data.slice(*event[:allowed_data])
20
+ filtered_data[:event_name] = event[:id]
21
+ filtered_data[:event_id] = event_id
22
+
23
+ case event[:id]
24
+ when "sql.active_record"
25
+ if data.key?(:binds)
26
+ binds = data[:binds].each_with_object({}) { |bind, output| output[bind.name] = '?' if defined?(bind.name) }
27
+ filtered_data[:binds] = JSON.dump(binds) unless binds.empty?
28
+ end
29
+
30
+ # Rails < 6.1 included connection_id in the event data, but now
31
+ # includes the connection object instead
32
+ if data.key?(:connection) && !data.key?(:connection_id)
33
+ # the connection ID is the object_id of the connection object
34
+ filtered_data[:connection_id] = data[:connection].object_id
35
+ end
36
+
37
+ when "start_processing.action_controller"
38
+ filtered_data[:path] = Bugsnag.cleaner.clean_url(data[:path]) if data.key?(:path)
39
+
40
+ when "redirect_to.action_controller"
41
+ filtered_data[:location] = Bugsnag.cleaner.clean_url(data[:location]) if data.key?(:location)
42
+ end
43
+
44
+ Bugsnag.leave_breadcrumb(
45
+ event[:message],
46
+ filtered_data,
47
+ event[:type],
48
+ :auto
49
+ )
50
+ end
51
+ end
52
+
53
+ ##
54
+ # Do we need to rescue (& notify) in Active Record callbacks?
55
+ #
56
+ # On Rails versions < 4.2, Rails did not raise errors in AR callbacks
57
+ # On Rails version 4.2, a config option was added to control this
58
+ # On Rails version 5.0, the config option was removed and errors in callbacks
59
+ # always bubble up
60
+ #
61
+ # @api private
62
+ def self.rescue_in_active_record_callbacks?
63
+ # Rails 5+ will re-raise errors in callbacks, so we don't need to rescue them
64
+ return false if ::Rails::VERSION::MAJOR > 4
65
+
66
+ # before 4.2, errors were always swallowed, so we need to rescue them
67
+ return true if ::Rails::VERSION::MAJOR < 4
68
+
69
+ # a config option was added in 4.2 to control this, but won't exist in 4.0 & 4.1
70
+ return true unless ActiveRecord::Base.respond_to?(:raise_in_transactional_callbacks)
71
+
72
+ # if the config option is false, we need to rescue and notify
73
+ ActiveRecord::Base.raise_in_transactional_callbacks == false
74
+ end
75
+
17
76
  rake_tasks do
18
77
  require "bugsnag/integrations/rake"
19
78
  load "bugsnag/tasks/bugsnag.rake"
@@ -25,9 +84,9 @@ module Bugsnag
25
84
  # initializer. If not, the key will be validated in after_initialize.
26
85
  Bugsnag.configure(false) do |config|
27
86
  config.logger = ::Rails.logger
28
- config.release_stage = ENV["BUGSNAG_RELEASE_STAGE"] || ::Rails.env.to_s
87
+ config.release_stage ||= ::Rails.env.to_s
29
88
  config.project_root = ::Rails.root.to_s
30
- config.middleware.insert_before Bugsnag::Middleware::Callbacks, Bugsnag::Middleware::Rails3Request
89
+ config.internal_middleware.use(Bugsnag::Middleware::Rails3Request)
31
90
  config.runtime_versions["rails"] = ::Rails::VERSION::STRING
32
91
  end
33
92
 
@@ -37,13 +96,25 @@ module Bugsnag
37
96
  end
38
97
 
39
98
  ActiveSupport.on_load(:active_record) do
40
- require "bugsnag/integrations/rails/active_record_rescue"
41
- include Bugsnag::Rails::ActiveRecordRescue
99
+ if Bugsnag::Railtie.rescue_in_active_record_callbacks?
100
+ require "bugsnag/integrations/rails/active_record_rescue"
101
+ include Bugsnag::Rails::ActiveRecordRescue
102
+ end
103
+ end
104
+
105
+ ActiveSupport.on_load(:active_job) do
106
+ require "bugsnag/middleware/active_job"
107
+ Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::ActiveJob)
108
+
109
+ require "bugsnag/integrations/rails/active_job"
110
+ include Bugsnag::Rails::ActiveJob
42
111
  end
43
112
 
44
113
  Bugsnag::Rails::DEFAULT_RAILS_BREADCRUMBS.each { |event| event_subscription(event) }
45
114
 
46
- Bugsnag.configuration.app_type = "rails"
115
+ # Make sure we don't overwrite the value set by another integration because
116
+ # Rails is a less specific app_type (e.g. Que sets this earlier than us)
117
+ Bugsnag.configuration.detected_app_type ||= "rails"
47
118
  end
48
119
 
49
120
  # Configure meta_data_filters after initialization, so that rails initializers
@@ -63,32 +134,19 @@ module Bugsnag
63
134
 
64
135
  initializer "bugsnag.use_rack_middleware" do |app|
65
136
  begin
66
- app.config.middleware.insert_after ActionDispatch::DebugExceptions, Bugsnag::Rack
67
- rescue
68
- app.config.middleware.use Bugsnag::Rack
69
- end
70
- end
71
-
72
- ##
73
- # Subscribes to an ActiveSupport event, leaving a breadcrumb when it triggers
74
- #
75
- # @api private
76
- # @param event [Hash] details of the event to subscribe to
77
- def event_subscription(event)
78
- ActiveSupport::Notifications.subscribe(event[:id]) do |*, event_id, data|
79
- filtered_data = data.slice(*event[:allowed_data])
80
- filtered_data[:event_name] = event[:id]
81
- filtered_data[:event_id] = event_id
82
- if event[:id] == "sql.active_record" && data.key?(:binds)
83
- binds = data[:binds].each_with_object({}) { |bind, output| output[bind.name] = '?' if defined?(bind.name) }
84
- filtered_data[:binds] = JSON.dump(binds) unless binds.empty?
137
+ begin
138
+ app.config.middleware.insert_after ActionDispatch::DebugExceptions, Bugsnag::Rack
139
+ rescue
140
+ app.config.middleware.use Bugsnag::Rack
85
141
  end
86
- Bugsnag.leave_breadcrumb(
87
- event[:message],
88
- filtered_data,
89
- event[:type],
90
- :auto
91
- )
142
+ rescue FrozenError
143
+ # This can happen when running RSpec if there is a crash after Rails has
144
+ # started booting but before we've added our middleware. If we don't ignore
145
+ # this error then the stacktrace blames Bugsnag, which isn't accurate as
146
+ # the middleware will only be frozen if an earlier error occurs
147
+ # See this comment for more info:
148
+ # https://github.com/thoughtbot/factory_bot_rails/issues/303#issuecomment-434560625
149
+ Bugsnag.configuration.warn("Unable to add Bugsnag::Rack middleware as the middleware stack is frozen")
92
150
  end
93
151
  end
94
152
  end
@@ -1,4 +1,7 @@
1
- require 'bugsnag'
1
+ # this file can either be required manually by a user, in which case 'bugsnag'
2
+ # needs to be required, or it can be required automatically in the railtie,
3
+ # in which case 'bugsnag' has already been required
4
+ require 'bugsnag' unless defined?(Bugsnag)
2
5
 
3
6
  Rake::TaskManager.record_task_metadata = true
4
7
 
@@ -11,7 +14,8 @@ if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.0')
11
14
 
12
15
  # Executes the rake task with Bugsnag setup with contextual data.
13
16
  def execute(args = nil)
14
- Bugsnag.configuration.app_type ||= "rake"
17
+ Bugsnag.configuration.detected_app_type = "rake"
18
+
15
19
  old_task = Bugsnag.configuration.request_data[:bugsnag_running_task]
16
20
  Bugsnag.configuration.set_request_data :bugsnag_running_task, self
17
21
  Bugsnag.configuration.runtime_versions["rake"] = ::Rake::VERSION
@@ -42,7 +46,8 @@ else
42
46
  ##
43
47
  # Executes the rake task with Bugsnag setup with contextual data.
44
48
  def execute_with_bugsnag(args=nil)
45
- Bugsnag.configuration.app_type ||= "rake"
49
+ Bugsnag.configuration.detected_app_type = "rake"
50
+
46
51
  old_task = Bugsnag.configuration.request_data[:bugsnag_running_task]
47
52
  Bugsnag.configuration.set_request_data :bugsnag_running_task, self
48
53
  Bugsnag.configuration.runtime_versions["rake"] = ::Rake::VERSION
@@ -21,7 +21,7 @@ module Bugsnag
21
21
  return if ::Resque::Failure.backend == self
22
22
 
23
23
  # Ensure resque is using a "Multiple" failure backend
24
- unless ::Resque::Failure.backend < ::Resque::Failure::Multiple
24
+ unless ::Resque::Failure.backend <= ::Resque::Failure::Multiple
25
25
  original_backend = ::Resque::Failure.backend
26
26
  ::Resque::Failure.backend = ::Resque::Failure::Multiple
27
27
  ::Resque::Failure.backend.classes ||= []
@@ -44,9 +44,23 @@ module Bugsnag
44
44
  :attributes => FRAMEWORK_ATTRIBUTES
45
45
  }
46
46
 
47
- context = "#{payload['class']}@#{queue}"
48
- report.meta_data.merge!({:context => context, :payload => payload})
49
- report.context = context
47
+ metadata = payload
48
+ class_name = metadata['class']
49
+
50
+ # when using Active Job the payload "class" will always be the Resque
51
+ # "JobWrapper", so we need to unwrap the actual class name
52
+ if class_name == "ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper"
53
+ unwrapped_class_name = metadata['args'][0]['job_class'] rescue nil
54
+
55
+ if unwrapped_class_name
56
+ class_name = unwrapped_class_name
57
+ metadata['wrapped'] ||= unwrapped_class_name
58
+ end
59
+ end
60
+
61
+ context = "#{class_name}@#{queue}"
62
+ report.meta_data.merge!({ context: context, payload: metadata })
63
+ report.automatic_context = context
50
64
  end
51
65
  end
52
66
  end
@@ -58,16 +72,23 @@ Resque::Failure::Bugsnag = Bugsnag::Resque
58
72
  # Auto-load the failure backend
59
73
  Bugsnag::Resque.add_failure_backend
60
74
 
61
- if Resque::Worker.new(:bugsnag_fork_check).fork_per_job?
75
+ worker = Resque::Worker.new(:bugsnag_fork_check)
76
+
77
+ # If at_exit hooks are not enabled then we can't use the thread queue delivery
78
+ # method because it relies on an at_exit hook to ensure the queue is flushed
79
+ can_use_thread_queue = worker.respond_to?(:run_at_exit_hooks) && worker.run_at_exit_hooks
80
+ default_delivery_method = can_use_thread_queue ? :thread_queue : :synchronous
81
+
82
+ if worker.fork_per_job?
62
83
  Resque.after_fork do
63
- Bugsnag.configuration.app_type = "resque"
64
- Bugsnag.configuration.default_delivery_method = :synchronous
84
+ Bugsnag.configuration.detected_app_type = "resque"
85
+ Bugsnag.configuration.default_delivery_method = default_delivery_method
65
86
  Bugsnag.configuration.runtime_versions["resque"] = ::Resque::VERSION
66
87
  end
67
88
  else
68
89
  Resque.before_first_fork do
69
- Bugsnag.configuration.app_type = "resque"
70
- Bugsnag.configuration.default_delivery_method = :synchronous
90
+ Bugsnag.configuration.detected_app_type = "resque"
91
+ Bugsnag.configuration.default_delivery_method = default_delivery_method
71
92
  Bugsnag.configuration.runtime_versions["resque"] = ::Resque::VERSION
72
93
  end
73
94
  end
@@ -11,8 +11,9 @@ module Bugsnag
11
11
 
12
12
  def initialize
13
13
  Bugsnag.configure do |config|
14
- config.app_type ||= "shoryuken"
14
+ config.detected_app_type = "shoryuken"
15
15
  config.default_delivery_method = :synchronous
16
+ config.runtime_versions["shoryuken"] = ::Shoryuken::VERSION
16
17
  end
17
18
  end
18
19
 
@@ -4,6 +4,7 @@ module Bugsnag
4
4
  ##
5
5
  # Extracts and attaches Sidekiq job and queue information to an error report
6
6
  class Sidekiq
7
+ include ::Sidekiq::ServerMiddleware if defined?(::Sidekiq::ServerMiddleware)
7
8
 
8
9
  unless const_defined?(:FRAMEWORK_ATTRIBUTES)
9
10
  FRAMEWORK_ATTRIBUTES = {
@@ -13,8 +14,7 @@ module Bugsnag
13
14
 
14
15
  def initialize
15
16
  Bugsnag.configuration.internal_middleware.use(Bugsnag::Middleware::Sidekiq)
16
- Bugsnag.configuration.app_type = "sidekiq"
17
- Bugsnag.configuration.default_delivery_method = :synchronous
17
+ Bugsnag.configuration.detected_app_type = "sidekiq"
18
18
  Bugsnag.configuration.runtime_versions["sidekiq"] = ::Sidekiq::VERSION
19
19
  end
20
20
 
@@ -50,7 +50,7 @@ module Bugsnag
50
50
 
51
51
  def self.configure_server(server)
52
52
  if Bugsnag::Sidekiq.sidekiq_supports_error_handlers
53
- server.error_handlers << proc do |ex, _context|
53
+ server.error_handlers << proc do |ex, _context, _config = nil|
54
54
  Bugsnag::Sidekiq.notify(ex)
55
55
  Bugsnag.configuration.clear_request_data
56
56
  end
@@ -0,0 +1,18 @@
1
+ module Bugsnag::Middleware
2
+ class ActiveJob
3
+ def initialize(bugsnag)
4
+ @bugsnag = bugsnag
5
+ end
6
+
7
+ def call(report)
8
+ data = report.request_data[:active_job]
9
+
10
+ if data
11
+ report.add_tab(:active_job, data)
12
+ report.automatic_context = "#{data[:job_name]}@#{data[:queue]}"
13
+ end
14
+
15
+ @bugsnag.call(report)
16
+ end
17
+ end
18
+ end
@@ -9,6 +9,7 @@ module Bugsnag::Middleware
9
9
  "ActionController::UnknownAction",
10
10
  "ActionController::UnknownFormat",
11
11
  "ActionController::UnknownHttpMethod",
12
+ "ActionDispatch::Http::MimeNegotiation::InvalidType",
12
13
  "ActiveRecord::RecordNotFound",
13
14
  "CGI::Session::CookieStore::TamperedWithCookie",
14
15
  "Mongoid::Errors::DocumentNotFound",
@@ -2,6 +2,11 @@ module Bugsnag::Middleware
2
2
  ##
3
3
  # Attaches delayed_job information to an error report
4
4
  class DelayedJob
5
+ # Active Job's queue adapter sets the "display_name" to this format. This
6
+ # breaks the event context as the ID and arguments are included, which will
7
+ # differ between executions of the same job
8
+ ACTIVE_JOB_DISPLAY_NAME = /^.* \[[0-9a-f-]+\] from DelayedJob\(.*\) with arguments: \[.*\]$/
9
+
5
10
  def initialize(bugsnag)
6
11
  @bugsnag = bugsnag
7
12
  end
@@ -23,7 +28,10 @@ module Bugsnag::Middleware
23
28
  if job.respond_to?(:payload_object)
24
29
  job_data[:active_job] = job.payload_object.job_data if job.payload_object.respond_to?(:job_data)
25
30
  payload_data = construct_job_payload(job.payload_object)
26
- report.context = payload_data[:display_name] if payload_data.include?(:display_name)
31
+
32
+ context = get_context(payload_data, job_data[:active_job])
33
+ report.automatic_context = context unless context.nil?
34
+
27
35
  job_data[:payload] = payload_data
28
36
  end
29
37
 
@@ -69,5 +77,17 @@ module Bugsnag::Middleware
69
77
  end
70
78
  data
71
79
  end
80
+
81
+ private
82
+
83
+ def get_context(payload_data, active_job_data)
84
+ if payload_data.include?(:display_name) && !ACTIVE_JOB_DISPLAY_NAME.match?(payload_data[:display_name])
85
+ payload_data[:display_name]
86
+ elsif active_job_data && active_job_data['job_class'] && active_job_data['queue_name']
87
+ "#{active_job_data['job_class']}@#{active_job_data['queue_name']}"
88
+ elsif payload_data.include?(:class)
89
+ payload_data[:class]
90
+ end
91
+ end
72
92
  end
73
93
  end
@@ -16,6 +16,8 @@ module Bugsnag::Middleware
16
16
 
17
17
  if exception.respond_to?(:bugsnag_context)
18
18
  context = exception.bugsnag_context
19
+ # note: this should set 'context' not 'automatic_context' as it's a
20
+ # user-supplied value
19
21
  report.context = context if context.is_a?(String)
20
22
  end
21
23
 
@@ -3,6 +3,7 @@ module Bugsnag::Middleware
3
3
  # Extracts and attaches rack data to an error report
4
4
  class RackRequest
5
5
  SPOOF = "[SPOOF]".freeze
6
+ COOKIE_HEADER = "Cookie".freeze
6
7
 
7
8
  def initialize(bugsnag)
8
9
  @bugsnag = bugsnag
@@ -14,12 +15,20 @@ module Bugsnag::Middleware
14
15
 
15
16
  request = ::Rack::Request.new(env)
16
17
 
17
- params = request.params rescue {}
18
+ params =
19
+ # if the request body isn't rewindable then we can't read request.POST
20
+ # which is used internally by request.params
21
+ if request.body.respond_to?(:rewind)
22
+ request.params rescue {}
23
+ else
24
+ request.GET rescue {}
25
+ end
26
+
18
27
  client_ip = request.ip.to_s rescue SPOOF
19
28
  session = env["rack.session"]
20
29
 
21
- # Set the context
22
- report.context = "#{request.request_method} #{request.path}"
30
+ # Set the automatic context
31
+ report.automatic_context = "#{request.request_method} #{request.path}"
23
32
 
24
33
  # Set a sensible default for user_id
25
34
  report.user["id"] = request.ip
@@ -42,22 +51,6 @@ module Bugsnag::Middleware
42
51
  Bugsnag.configuration.warn "RackRequest - Rescued error while cleaning request.referer: #{stde}"
43
52
  end
44
53
 
45
- headers = {}
46
-
47
- env.each_pair do |key, value|
48
- if key.to_s.start_with?("HTTP_")
49
- header_key = key[5..-1]
50
- elsif ["CONTENT_TYPE", "CONTENT_LENGTH"].include?(key)
51
- header_key = key
52
- else
53
- next
54
- end
55
-
56
- headers[header_key.split("_").map {|s| s.capitalize}.join("-")] = value
57
- end
58
-
59
- headers["Referer"] = referer if headers["Referer"]
60
-
61
54
  # Add a request tab
62
55
  report.add_tab(:request, {
63
56
  :url => url,
@@ -65,9 +58,17 @@ module Bugsnag::Middleware
65
58
  :params => params.to_hash,
66
59
  :referer => referer,
67
60
  :clientIp => client_ip,
68
- :headers => headers
61
+ :headers => format_headers(env, referer)
69
62
  })
70
63
 
64
+ # add the HTTP version if present
65
+ if env["SERVER_PROTOCOL"]
66
+ report.add_metadata(:request, :httpVersion, env["SERVER_PROTOCOL"])
67
+ end
68
+
69
+ add_request_body(report, request, env)
70
+ add_cookies(report, request)
71
+
71
72
  # Add an environment tab
72
73
  if report.configuration.send_environment
73
74
  report.add_tab(:environment, env)
@@ -87,5 +88,87 @@ module Bugsnag::Middleware
87
88
 
88
89
  @bugsnag.call(report)
89
90
  end
91
+
92
+ private
93
+
94
+ def format_headers(env, referer)
95
+ headers = {}
96
+
97
+ env.each_pair do |key, value|
98
+ if key.to_s.start_with?("HTTP_")
99
+ header_key = key[5..-1]
100
+ elsif ["CONTENT_TYPE", "CONTENT_LENGTH"].include?(key)
101
+ header_key = key
102
+ else
103
+ next
104
+ end
105
+
106
+ headers[header_key.split("_").map {|s| s.capitalize}.join("-")] = value
107
+ end
108
+
109
+ headers["Referer"] = referer if headers["Referer"]
110
+
111
+ headers
112
+ end
113
+
114
+ def add_request_body(report, request, env)
115
+ begin
116
+ body = parsed_request_body(request, env)
117
+ rescue StandardError
118
+ return nil
119
+ end
120
+
121
+ # this request may not have a body
122
+ return unless body.is_a?(Hash) && !body.empty?
123
+
124
+ report.add_metadata(:request, :body, body)
125
+ end
126
+
127
+ def parsed_request_body(request, env)
128
+ # if the request is not rewindable then either:
129
+ # - it's been read already and so is impossible to read
130
+ # - it hasn't been read yet and us reading it will prevent the user from
131
+ # reading it themselves
132
+ # in either case we should avoid attempting to
133
+ return nil unless request.body.respond_to?(:rewind)
134
+
135
+ if request.form_data?
136
+ begin
137
+ return request.POST
138
+ ensure
139
+ request.body.rewind
140
+ end
141
+ end
142
+
143
+ content_type = env["CONTENT_TYPE"]
144
+
145
+ return nil if content_type.nil?
146
+ return nil unless content_type.include?('/json') || content_type.include?('+json')
147
+
148
+ begin
149
+ body = request.body
150
+
151
+ JSON.parse(body.read)
152
+ ensure
153
+ # the body must be rewound so other things can read it after we do
154
+ body.rewind
155
+ end
156
+ end
157
+
158
+ def add_cookies(report, request)
159
+ return unless record_cookies?
160
+
161
+ cookies = request.cookies rescue nil
162
+
163
+ return unless cookies.is_a?(Hash) && !cookies.empty?
164
+
165
+ report.add_metadata(:request, :cookies, cookies)
166
+ end
167
+
168
+ def record_cookies?
169
+ # only record cookies in the request if none of the filters match "Cookie"
170
+ # the "Cookie" header will be filtered as normal
171
+ !Bugsnag.cleaner.filters_match?(COOKIE_HEADER)
172
+ end
90
173
  end
91
174
  end
@@ -15,8 +15,8 @@ module Bugsnag::Middleware
15
15
  client_ip = env["action_dispatch.remote_ip"].to_s rescue SPOOF
16
16
 
17
17
  if params
18
- # Set the context
19
- report.context = "#{params[:controller]}##{params[:action]}"
18
+ # Set the automatic context
19
+ report.automatic_context = "#{params[:controller]}##{params[:action]}"
20
20
 
21
21
  # Augment the request tab
22
22
  report.add_tab(:request, {
@@ -16,7 +16,7 @@ module Bugsnag::Middleware
16
16
  :arguments => task.arg_description
17
17
  })
18
18
 
19
- report.context ||= task.name
19
+ report.automatic_context ||= task.name
20
20
  end
21
21
 
22
22
  @bugsnag.call(report)
@@ -8,12 +8,14 @@ module Bugsnag::Middleware
8
8
 
9
9
  def call(report)
10
10
  session = Bugsnag::SessionTracker.get_current_session
11
- unless session.nil?
11
+
12
+ if session && !session[:paused?]
12
13
  if report.unhandled
13
14
  session[:events][:unhandled] += 1
14
15
  else
15
16
  session[:events][:handled] += 1
16
17
  end
18
+
17
19
  report.session = session
18
20
  end
19
21
 
@@ -10,7 +10,7 @@ module Bugsnag::Middleware
10
10
  sidekiq = report.request_data[:sidekiq]
11
11
  if sidekiq
12
12
  report.add_tab(:sidekiq, sidekiq)
13
- report.context ||= "#{sidekiq[:msg]['wrapped'] || sidekiq[:msg]['class']}@#{sidekiq[:msg]['queue']}"
13
+ report.automatic_context ||= "#{sidekiq[:msg]['wrapped'] || sidekiq[:msg]['class']}@#{sidekiq[:msg]['queue']}"
14
14
  end
15
15
  @bugsnag.call(report)
16
16
  end
@@ -10,23 +10,25 @@ module Bugsnag::Middleware
10
10
  @bugsnag = bugsnag
11
11
  end
12
12
 
13
- def call(report)
13
+ def call(event)
14
14
  matches = []
15
- report.raw_exceptions.each do |exception|
16
- match = CAPTURE_REGEX.match(exception.message)
15
+
16
+ event.errors.each do |error|
17
+ match = CAPTURE_REGEX.match(error.error_message)
18
+
17
19
  next unless match
18
20
 
19
21
  suggestions = match.captures[0].split(DELIMITER)
20
- matches.concat suggestions.map{ |suggestion| suggestion.strip }
22
+ matches.concat(suggestions.map(&:strip))
21
23
  end
22
24
 
23
25
  if matches.size == 1
24
- report.add_tab(:error, {:suggestion => matches.first})
26
+ event.add_metadata(:error, { suggestion: matches.first })
25
27
  elsif matches.size > 1
26
- report.add_tab(:error, {:suggestions => matches})
28
+ event.add_metadata(:error, { suggestions: matches })
27
29
  end
28
30
 
29
- @bugsnag.call(report)
31
+ @bugsnag.call(event)
30
32
  end
31
33
  end
32
34
  end
@@ -23,7 +23,10 @@ module Bugsnag::Middleware
23
23
  # Extract useful user information
24
24
  user = {}
25
25
  user_object = env["warden"].user({:scope => best_scope, :run_callbacks => false}) rescue nil
26
+
26
27
  if user_object
28
+ user[:warden_scope] = best_scope
29
+
27
30
  # Build the user info for this scope
28
31
  COMMON_USER_FIELDS.each do |field|
29
32
  user[field] = user_object.send(field) if user_object.respond_to?(field)
@@ -131,8 +131,8 @@ module Bugsnag
131
131
  #
132
132
  # @return [Array<Proc>]
133
133
  def middleware_procs
134
- # Split the middleware into separate lists of Procs and Classes
135
- procs, classes = @middlewares.partition {|middleware| middleware.is_a?(Proc) }
134
+ # Split the middleware into separate lists of callables (e.g. Proc, Lambda, Method) and Classes
135
+ callables, classes = @middlewares.partition {|middleware| middleware.respond_to?(:call) }
136
136
 
137
137
  # Wrap the classes in a proc that, when called, news up the middleware and
138
138
  # passes the next middleware in the queue
@@ -140,12 +140,12 @@ module Bugsnag
140
140
  proc {|next_middleware| middleware.new(next_middleware) }
141
141
  end
142
142
 
143
- # Wrap the list of procs in a proc that, when called, wraps them in an
143
+ # Wrap the list of callables in a proc that, when called, wraps them in an
144
144
  # 'OnErrorCallbacks' instance that also has a reference to the next middleware
145
- wrapped_procs = proc {|next_middleware| OnErrorCallbacks.new(next_middleware, procs) }
145
+ wrapped_callables = proc {|next_middleware| OnErrorCallbacks.new(next_middleware, callables) }
146
146
 
147
- # Return the combined middleware and wrapped procs
148
- middleware_instances.push(wrapped_procs)
147
+ # Return the combined middleware and wrapped callables
148
+ middleware_instances.push(wrapped_callables)
149
149
  end
150
150
  end
151
151
  end