bugsnag 6.13.0 → 6.17.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 (650) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +11 -0
  3. data/CHANGELOG.md +88 -0
  4. data/VERSION +1 -1
  5. data/bugsnag.gemspec +1 -1
  6. data/lib/bugsnag.rb +145 -27
  7. data/lib/bugsnag/breadcrumbs/breadcrumbs.rb +0 -2
  8. data/lib/bugsnag/breadcrumbs/validator.rb +0 -6
  9. data/lib/bugsnag/cleaner.rb +129 -59
  10. data/lib/bugsnag/code_extractor.rb +137 -0
  11. data/lib/bugsnag/configuration.rb +226 -23
  12. data/lib/bugsnag/delivery/thread_queue.rb +18 -3
  13. data/lib/bugsnag/helpers.rb +2 -4
  14. data/lib/bugsnag/integrations/delayed_job.rb +13 -1
  15. data/lib/bugsnag/integrations/mailman.rb +2 -1
  16. data/lib/bugsnag/integrations/que.rb +2 -1
  17. data/lib/bugsnag/integrations/rack.rb +3 -1
  18. data/lib/bugsnag/integrations/railtie.rb +17 -5
  19. data/lib/bugsnag/integrations/rake.rb +4 -2
  20. data/lib/bugsnag/integrations/resque.rb +12 -5
  21. data/lib/bugsnag/integrations/shoryuken.rb +2 -1
  22. data/lib/bugsnag/integrations/sidekiq.rb +1 -2
  23. data/lib/bugsnag/middleware/delayed_job.rb +1 -0
  24. data/lib/bugsnag/middleware/discard_error_class.rb +30 -0
  25. data/lib/bugsnag/middleware/exception_meta_data.rb +15 -9
  26. data/lib/bugsnag/middleware/ignore_error_class.rb +2 -0
  27. data/lib/bugsnag/middleware/rack_request.rb +2 -4
  28. data/lib/bugsnag/middleware_stack.rb +38 -3
  29. data/lib/bugsnag/on_error_callbacks.rb +33 -0
  30. data/lib/bugsnag/report.rb +87 -15
  31. data/lib/bugsnag/session_tracker.rb +3 -3
  32. data/lib/bugsnag/stacktrace.rb +28 -72
  33. metadata +7 -621
  34. data/.buildkite/pipeline.yml +0 -470
  35. data/.github/PULL_REQUEST_TEMPLATE.md +0 -84
  36. data/.gitignore +0 -55
  37. data/.rdoc_options +0 -27
  38. data/.rspec +0 -3
  39. data/.rubocop.yml +0 -2
  40. data/.rubocop_todo.yml +0 -679
  41. data/CONTRIBUTING.md +0 -64
  42. data/Gemfile +0 -48
  43. data/Rakefile +0 -37
  44. data/TESTING.md +0 -81
  45. data/UPGRADING.md +0 -91
  46. data/docker-compose.yml +0 -46
  47. data/dockerfiles/Dockerfile.jruby-unit-tests +0 -13
  48. data/dockerfiles/Dockerfile.ruby-maze-runner +0 -26
  49. data/dockerfiles/Dockerfile.ruby-unit-tests +0 -12
  50. data/features/.gitignore +0 -1
  51. data/features/delayed_job.feature +0 -36
  52. data/features/fixtures/delayed_job/Dockerfile +0 -15
  53. data/features/fixtures/delayed_job/app/.gitignore +0 -21
  54. data/features/fixtures/delayed_job/app/Gemfile +0 -57
  55. data/features/fixtures/delayed_job/app/README.md +0 -24
  56. data/features/fixtures/delayed_job/app/Rakefile +0 -24
  57. data/features/fixtures/delayed_job/app/app/assets/config/manifest.js +0 -3
  58. data/features/fixtures/delayed_job/app/app/assets/images/.keep +0 -0
  59. data/features/fixtures/delayed_job/app/app/assets/javascripts/application.js +0 -16
  60. data/features/fixtures/delayed_job/app/app/assets/javascripts/cable.js +0 -13
  61. data/features/fixtures/delayed_job/app/app/assets/javascripts/channels/.keep +0 -0
  62. data/features/fixtures/delayed_job/app/app/assets/stylesheets/application.css +0 -15
  63. data/features/fixtures/delayed_job/app/app/channels/application_cable/channel.rb +0 -4
  64. data/features/fixtures/delayed_job/app/app/channels/application_cable/connection.rb +0 -4
  65. data/features/fixtures/delayed_job/app/app/controllers/application_controller.rb +0 -3
  66. data/features/fixtures/delayed_job/app/app/controllers/concerns/.keep +0 -0
  67. data/features/fixtures/delayed_job/app/app/helpers/application_helper.rb +0 -2
  68. data/features/fixtures/delayed_job/app/app/jobs/application_job.rb +0 -2
  69. data/features/fixtures/delayed_job/app/app/mailers/application_mailer.rb +0 -4
  70. data/features/fixtures/delayed_job/app/app/models/application_record.rb +0 -3
  71. data/features/fixtures/delayed_job/app/app/models/concerns/.keep +0 -0
  72. data/features/fixtures/delayed_job/app/app/models/test_model.rb +0 -10
  73. data/features/fixtures/delayed_job/app/app/views/layouts/application.html.erb +0 -14
  74. data/features/fixtures/delayed_job/app/app/views/layouts/mailer.html.erb +0 -13
  75. data/features/fixtures/delayed_job/app/app/views/layouts/mailer.text.erb +0 -1
  76. data/features/fixtures/delayed_job/app/config.ru +0 -5
  77. data/features/fixtures/delayed_job/app/config/application.rb +0 -15
  78. data/features/fixtures/delayed_job/app/config/boot.rb +0 -3
  79. data/features/fixtures/delayed_job/app/config/cable.yml +0 -9
  80. data/features/fixtures/delayed_job/app/config/database.yml +0 -25
  81. data/features/fixtures/delayed_job/app/config/environment.rb +0 -5
  82. data/features/fixtures/delayed_job/app/config/environments/development.rb +0 -54
  83. data/features/fixtures/delayed_job/app/config/environments/production.rb +0 -86
  84. data/features/fixtures/delayed_job/app/config/environments/test.rb +0 -42
  85. data/features/fixtures/delayed_job/app/config/initializers/application_controller_renderer.rb +0 -8
  86. data/features/fixtures/delayed_job/app/config/initializers/assets.rb +0 -11
  87. data/features/fixtures/delayed_job/app/config/initializers/backtrace_silencers.rb +0 -7
  88. data/features/fixtures/delayed_job/app/config/initializers/bugsnag.rb +0 -14
  89. data/features/fixtures/delayed_job/app/config/initializers/cookies_serializer.rb +0 -5
  90. data/features/fixtures/delayed_job/app/config/initializers/delayed_job.rb +0 -3
  91. data/features/fixtures/delayed_job/app/config/initializers/filter_parameter_logging.rb +0 -4
  92. data/features/fixtures/delayed_job/app/config/initializers/inflections.rb +0 -16
  93. data/features/fixtures/delayed_job/app/config/initializers/mime_types.rb +0 -4
  94. data/features/fixtures/delayed_job/app/config/initializers/new_framework_defaults.rb +0 -26
  95. data/features/fixtures/delayed_job/app/config/initializers/session_store.rb +0 -3
  96. data/features/fixtures/delayed_job/app/config/initializers/wrap_parameters.rb +0 -14
  97. data/features/fixtures/delayed_job/app/config/locales/en.yml +0 -23
  98. data/features/fixtures/delayed_job/app/config/puma.rb +0 -47
  99. data/features/fixtures/delayed_job/app/config/routes.rb +0 -3
  100. data/features/fixtures/delayed_job/app/config/secrets.yml +0 -22
  101. data/features/fixtures/delayed_job/app/config/spring.rb +0 -6
  102. data/features/fixtures/delayed_job/app/db/migrate/20181024232549_create_delayed_jobs.rb +0 -22
  103. data/features/fixtures/delayed_job/app/db/migrate/20181024232817_create_test_models.rb +0 -8
  104. data/features/fixtures/delayed_job/app/db/schema.rb +0 -30
  105. data/features/fixtures/delayed_job/app/db/seeds.rb +0 -7
  106. data/features/fixtures/delayed_job/app/lib/assets/.keep +0 -0
  107. data/features/fixtures/delayed_job/app/lib/tasks/.keep +0 -0
  108. data/features/fixtures/delayed_job/app/log/.keep +0 -0
  109. data/features/fixtures/delayed_job/app/public/404.html +0 -67
  110. data/features/fixtures/delayed_job/app/public/422.html +0 -67
  111. data/features/fixtures/delayed_job/app/public/500.html +0 -66
  112. data/features/fixtures/delayed_job/app/public/apple-touch-icon-precomposed.png +0 -0
  113. data/features/fixtures/delayed_job/app/public/apple-touch-icon.png +0 -0
  114. data/features/fixtures/delayed_job/app/public/favicon.ico +0 -0
  115. data/features/fixtures/delayed_job/app/public/robots.txt +0 -5
  116. data/features/fixtures/delayed_job/app/test/controllers/.keep +0 -0
  117. data/features/fixtures/delayed_job/app/test/fixtures/.keep +0 -0
  118. data/features/fixtures/delayed_job/app/test/fixtures/files/.keep +0 -0
  119. data/features/fixtures/delayed_job/app/test/fixtures/test_models.yml +0 -11
  120. data/features/fixtures/delayed_job/app/test/helpers/.keep +0 -0
  121. data/features/fixtures/delayed_job/app/test/integration/.keep +0 -0
  122. data/features/fixtures/delayed_job/app/test/mailers/.keep +0 -0
  123. data/features/fixtures/delayed_job/app/test/models/.keep +0 -0
  124. data/features/fixtures/delayed_job/app/test/models/test_model_test.rb +0 -7
  125. data/features/fixtures/delayed_job/app/test/test_helper.rb +0 -10
  126. data/features/fixtures/delayed_job/app/tmp/.keep +0 -0
  127. data/features/fixtures/docker-compose.yml +0 -299
  128. data/features/fixtures/expected_breadcrumbs/active_job.json +0 -9
  129. data/features/fixtures/expected_breadcrumbs/mongo_failed.json +0 -15
  130. data/features/fixtures/expected_breadcrumbs/mongo_filtered_request.json +0 -15
  131. data/features/fixtures/expected_breadcrumbs/mongo_filtered_result.json +0 -15
  132. data/features/fixtures/expected_breadcrumbs/mongo_success.json +0 -14
  133. data/features/fixtures/expected_breadcrumbs/request.json +0 -13
  134. data/features/fixtures/expected_breadcrumbs/sql_with_bindings.json +0 -12
  135. data/features/fixtures/expected_breadcrumbs/sql_without_bindings.json +0 -11
  136. data/features/fixtures/plain/.dockerignore +0 -2
  137. data/features/fixtures/plain/Dockerfile +0 -11
  138. data/features/fixtures/plain/app/Gemfile +0 -3
  139. data/features/fixtures/plain/app/app.rb +0 -38
  140. data/features/fixtures/plain/app/configuration/api_key.rb +0 -9
  141. data/features/fixtures/plain/app/configuration/proxy.rb +0 -14
  142. data/features/fixtures/plain/app/configuration/send_handled.rb +0 -7
  143. data/features/fixtures/plain/app/configuration/send_unhandled.rb +0 -9
  144. data/features/fixtures/plain/app/delivery/fork_threadpool.rb +0 -27
  145. data/features/fixtures/plain/app/delivery/synchronous.rb +0 -14
  146. data/features/fixtures/plain/app/delivery/threadpool.rb +0 -14
  147. data/features/fixtures/plain/app/exception_data/crash.rb +0 -34
  148. data/features/fixtures/plain/app/exception_data/handled_context.rb +0 -10
  149. data/features/fixtures/plain/app/exception_data/handled_hash.rb +0 -10
  150. data/features/fixtures/plain/app/exception_data/handled_meta_data.rb +0 -10
  151. data/features/fixtures/plain/app/exception_data/handled_user_id.rb +0 -10
  152. data/features/fixtures/plain/app/exception_data/unhandled_context.rb +0 -7
  153. data/features/fixtures/plain/app/exception_data/unhandled_hash.rb +0 -7
  154. data/features/fixtures/plain/app/exception_data/unhandled_meta_data.rb +0 -7
  155. data/features/fixtures/plain/app/exception_data/unhandled_user_id.rb +0 -7
  156. data/features/fixtures/plain/app/filters/additional_filters.rb +0 -11
  157. data/features/fixtures/plain/app/filters/default_filters.rb +0 -15
  158. data/features/fixtures/plain/app/handled/block_metadata.rb +0 -15
  159. data/features/fixtures/plain/app/handled/ignore_exception.rb +0 -12
  160. data/features/fixtures/plain/app/handled/notify_exception.rb +0 -9
  161. data/features/fixtures/plain/app/handled/notify_string.rb +0 -9
  162. data/features/fixtures/plain/app/ignore_classes/handled.rb +0 -8
  163. data/features/fixtures/plain/app/ignore_classes/ignore_error.rb +0 -8
  164. data/features/fixtures/plain/app/ignore_classes/unhandled.rb +0 -4
  165. data/features/fixtures/plain/app/report_modification/add_tab.rb +0 -16
  166. data/features/fixtures/plain/app/report_modification/add_tab_existing.rb +0 -22
  167. data/features/fixtures/plain/app/report_modification/add_tab_override.rb +0 -19
  168. data/features/fixtures/plain/app/report_modification/ignore_report.rb +0 -9
  169. data/features/fixtures/plain/app/report_modification/initiators/handled_before_notify.rb +0 -10
  170. data/features/fixtures/plain/app/report_modification/initiators/handled_block.rb +0 -8
  171. data/features/fixtures/plain/app/report_modification/initiators/unhandled_before_notify.rb +0 -11
  172. data/features/fixtures/plain/app/report_modification/modify_api_key.rb +0 -9
  173. data/features/fixtures/plain/app/report_modification/modify_severity.rb +0 -9
  174. data/features/fixtures/plain/app/report_modification/remove_user_details.rb +0 -14
  175. data/features/fixtures/plain/app/report_modification/set_custom_user_details.rb +0 -16
  176. data/features/fixtures/plain/app/report_modification/set_user_details.rb +0 -13
  177. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_before_notify.rb +0 -29
  178. data/features/fixtures/plain/app/stack_frame_modification/initiators/handled_block.rb +0 -24
  179. data/features/fixtures/plain/app/stack_frame_modification/initiators/unhandled_before_notify.rb +0 -26
  180. data/features/fixtures/plain/app/stack_frame_modification/mark_frames_in_project.rb +0 -13
  181. data/features/fixtures/plain/app/stack_frame_modification/remove_stack_frame.rb +0 -9
  182. data/features/fixtures/plain/app/unhandled/bad_syntax.rb +0 -1
  183. data/features/fixtures/plain/app/unhandled/custom_error.rb +0 -9
  184. data/features/fixtures/plain/app/unhandled/interrupt.rb +0 -6
  185. data/features/fixtures/plain/app/unhandled/load_error.rb +0 -6
  186. data/features/fixtures/plain/app/unhandled/local_jump_error.rb +0 -10
  187. data/features/fixtures/plain/app/unhandled/name_error.rb +0 -6
  188. data/features/fixtures/plain/app/unhandled/no_method_error.rb +0 -6
  189. data/features/fixtures/plain/app/unhandled/runtime_error.rb +0 -6
  190. data/features/fixtures/plain/app/unhandled/syntax_error.rb +0 -6
  191. data/features/fixtures/plain/app/unhandled/system_call_error.rb +0 -6
  192. data/features/fixtures/plain/app/unhandled/system_exit.rb +0 -6
  193. data/features/fixtures/plain/json/delivery_fork.json +0 -4
  194. data/features/fixtures/plain/json/delivery_synchronous.json +0 -4
  195. data/features/fixtures/plain/json/delivery_threadpool.json +0 -4
  196. data/features/fixtures/plain/json/filters_default_metadata_filters.json +0 -9
  197. data/features/fixtures/rack1/.dockerignore +0 -1
  198. data/features/fixtures/rack1/Dockerfile +0 -13
  199. data/features/fixtures/rack1/Gemfile +0 -4
  200. data/features/fixtures/rack1/app.rb +0 -8
  201. data/features/fixtures/rack2/.dockerignore +0 -1
  202. data/features/fixtures/rack2/Dockerfile +0 -13
  203. data/features/fixtures/rack2/Gemfile +0 -4
  204. data/features/fixtures/rack2/app.rb +0 -8
  205. data/features/fixtures/rails3/.dockerignore +0 -1
  206. data/features/fixtures/rails3/Dockerfile +0 -15
  207. data/features/fixtures/rails3/app/.gitignore +0 -15
  208. data/features/fixtures/rails3/app/Gemfile +0 -17
  209. data/features/fixtures/rails3/app/Rakefile +0 -7
  210. data/features/fixtures/rails3/app/app/assets/images/rails.png +0 -0
  211. data/features/fixtures/rails3/app/app/assets/javascripts/application.js +0 -15
  212. data/features/fixtures/rails3/app/app/assets/stylesheets/application.css +0 -13
  213. data/features/fixtures/rails3/app/app/controllers/api_key_controller.rb +0 -20
  214. data/features/fixtures/rails3/app/app/controllers/app_type_controller.rb +0 -20
  215. data/features/fixtures/rails3/app/app/controllers/app_version_controller.rb +0 -25
  216. data/features/fixtures/rails3/app/app/controllers/application_controller.rb +0 -7
  217. data/features/fixtures/rails3/app/app/controllers/auto_notify_controller.rb +0 -31
  218. data/features/fixtures/rails3/app/app/controllers/before_notify_controller.rb +0 -44
  219. data/features/fixtures/rails3/app/app/controllers/breadcrumbs_controller.rb +0 -19
  220. data/features/fixtures/rails3/app/app/controllers/handled_controller.rb +0 -26
  221. data/features/fixtures/rails3/app/app/controllers/ignore_classes_controller.rb +0 -23
  222. data/features/fixtures/rails3/app/app/controllers/metadata_filters_controller.rb +0 -16
  223. data/features/fixtures/rails3/app/app/controllers/project_root_controller.rb +0 -25
  224. data/features/fixtures/rails3/app/app/controllers/release_stage_controller.rb +0 -20
  225. data/features/fixtures/rails3/app/app/controllers/send_code_controller.rb +0 -20
  226. data/features/fixtures/rails3/app/app/controllers/send_environment_controller.rb +0 -12
  227. data/features/fixtures/rails3/app/app/controllers/session_tracking_controller.rb +0 -24
  228. data/features/fixtures/rails3/app/app/controllers/unhandled_controller.rb +0 -11
  229. data/features/fixtures/rails3/app/app/controllers/warden_controller.rb +0 -30
  230. data/features/fixtures/rails3/app/app/helpers/application_helper.rb +0 -2
  231. data/features/fixtures/rails3/app/app/mailers/.gitkeep +0 -0
  232. data/features/fixtures/rails3/app/app/models/.gitkeep +0 -0
  233. data/features/fixtures/rails3/app/app/models/user.rb +0 -6
  234. data/features/fixtures/rails3/app/app/views/layouts/application.html.erb +0 -14
  235. data/features/fixtures/rails3/app/config.ru +0 -4
  236. data/features/fixtures/rails3/app/config/application.rb +0 -67
  237. data/features/fixtures/rails3/app/config/boot.rb +0 -6
  238. data/features/fixtures/rails3/app/config/database.yml +0 -31
  239. data/features/fixtures/rails3/app/config/environment.rb +0 -5
  240. data/features/fixtures/rails3/app/config/environments/development.rb +0 -37
  241. data/features/fixtures/rails3/app/config/environments/production.rb +0 -67
  242. data/features/fixtures/rails3/app/config/environments/rails_env.rb +0 -37
  243. data/features/fixtures/rails3/app/config/initializers/bugsnag.rb +0 -20
  244. data/features/fixtures/rails3/app/config/initializers/secret_token.rb +0 -7
  245. data/features/fixtures/rails3/app/config/initializers/session_store.rb +0 -8
  246. data/features/fixtures/rails3/app/config/initializers/warden.rb +0 -3
  247. data/features/fixtures/rails3/app/config/initializers/wrap_parameters.rb +0 -14
  248. data/features/fixtures/rails3/app/config/locales/en.yml +0 -5
  249. data/features/fixtures/rails3/app/config/routes.rb +0 -19
  250. data/features/fixtures/rails3/app/db/migrate/20180423142727_create_users.rb +0 -45
  251. data/features/fixtures/rails3/app/db/schema.rb +0 -37
  252. data/features/fixtures/rails3/app/db/seeds.rb +0 -7
  253. data/features/fixtures/rails3/app/lib/assets/.gitkeep +0 -0
  254. data/features/fixtures/rails3/app/lib/strategies/token_strategy.rb +0 -12
  255. data/features/fixtures/rails3/app/lib/tasks/.gitkeep +0 -0
  256. data/features/fixtures/rails3/app/log/.gitkeep +0 -0
  257. data/features/fixtures/rails3/app/public/404.html +0 -26
  258. data/features/fixtures/rails3/app/public/422.html +0 -26
  259. data/features/fixtures/rails3/app/public/500.html +0 -25
  260. data/features/fixtures/rails3/app/public/favicon.ico +0 -0
  261. data/features/fixtures/rails3/app/public/index.html +0 -241
  262. data/features/fixtures/rails3/app/public/robots.txt +0 -5
  263. data/features/fixtures/rails3/app/script/rails +0 -6
  264. data/features/fixtures/rails4/.dockerignore +0 -1
  265. data/features/fixtures/rails4/Dockerfile +0 -17
  266. data/features/fixtures/rails4/app/.gitignore +0 -16
  267. data/features/fixtures/rails4/app/Gemfile +0 -46
  268. data/features/fixtures/rails4/app/README.rdoc +0 -28
  269. data/features/fixtures/rails4/app/Rakefile +0 -6
  270. data/features/fixtures/rails4/app/app/assets/images/.keep +0 -0
  271. data/features/fixtures/rails4/app/app/assets/javascripts/application.js +0 -16
  272. data/features/fixtures/rails4/app/app/assets/stylesheets/application.css +0 -13
  273. data/features/fixtures/rails4/app/app/controllers/api_key_controller.rb +0 -20
  274. data/features/fixtures/rails4/app/app/controllers/app_type_controller.rb +0 -20
  275. data/features/fixtures/rails4/app/app/controllers/app_version_controller.rb +0 -25
  276. data/features/fixtures/rails4/app/app/controllers/application_controller.rb +0 -7
  277. data/features/fixtures/rails4/app/app/controllers/auto_notify_controller.rb +0 -31
  278. data/features/fixtures/rails4/app/app/controllers/before_notify_controller.rb +0 -44
  279. data/features/fixtures/rails4/app/app/controllers/breadcrumbs_controller.rb +0 -26
  280. data/features/fixtures/rails4/app/app/controllers/concerns/.keep +0 -0
  281. data/features/fixtures/rails4/app/app/controllers/devise_controller.rb +0 -32
  282. data/features/fixtures/rails4/app/app/controllers/handled_controller.rb +0 -26
  283. data/features/fixtures/rails4/app/app/controllers/ignore_classes_controller.rb +0 -23
  284. data/features/fixtures/rails4/app/app/controllers/metadata_filters_controller.rb +0 -16
  285. data/features/fixtures/rails4/app/app/controllers/mongo_controller.rb +0 -23
  286. data/features/fixtures/rails4/app/app/controllers/project_root_controller.rb +0 -25
  287. data/features/fixtures/rails4/app/app/controllers/release_stage_controller.rb +0 -20
  288. data/features/fixtures/rails4/app/app/controllers/send_code_controller.rb +0 -20
  289. data/features/fixtures/rails4/app/app/controllers/send_environment_controller.rb +0 -12
  290. data/features/fixtures/rails4/app/app/controllers/session_tracking_controller.rb +0 -24
  291. data/features/fixtures/rails4/app/app/controllers/unhandled_controller.rb +0 -11
  292. data/features/fixtures/rails4/app/app/helpers/application_helper.rb +0 -2
  293. data/features/fixtures/rails4/app/app/jobs/application_job.rb +0 -2
  294. data/features/fixtures/rails4/app/app/jobs/notify_job.rb +0 -5
  295. data/features/fixtures/rails4/app/app/mailers/.keep +0 -0
  296. data/features/fixtures/rails4/app/app/models/.keep +0 -0
  297. data/features/fixtures/rails4/app/app/models/concerns/.keep +0 -0
  298. data/features/fixtures/rails4/app/app/models/mongo_model.rb +0 -6
  299. data/features/fixtures/rails4/app/app/models/user.rb +0 -6
  300. data/features/fixtures/rails4/app/app/views/layouts/application.html.erb +0 -14
  301. data/features/fixtures/rails4/app/config.ru +0 -4
  302. data/features/fixtures/rails4/app/config/application.rb +0 -23
  303. data/features/fixtures/rails4/app/config/boot.rb +0 -4
  304. data/features/fixtures/rails4/app/config/database.yml +0 -31
  305. data/features/fixtures/rails4/app/config/environment.rb +0 -5
  306. data/features/fixtures/rails4/app/config/environments/development.rb +0 -31
  307. data/features/fixtures/rails4/app/config/environments/production.rb +0 -81
  308. data/features/fixtures/rails4/app/config/environments/rails_env.rb +0 -30
  309. data/features/fixtures/rails4/app/config/environments/test.rb +0 -31
  310. data/features/fixtures/rails4/app/config/initializers/backtrace_silencers.rb +0 -7
  311. data/features/fixtures/rails4/app/config/initializers/bugsnag.rb +0 -20
  312. data/features/fixtures/rails4/app/config/initializers/devise.rb +0 -283
  313. data/features/fixtures/rails4/app/config/initializers/filter_parameter_logging.rb +0 -5
  314. data/features/fixtures/rails4/app/config/initializers/inflections.rb +0 -16
  315. data/features/fixtures/rails4/app/config/initializers/mime_types.rb +0 -5
  316. data/features/fixtures/rails4/app/config/initializers/secret_token.rb +0 -12
  317. data/features/fixtures/rails4/app/config/initializers/session_store.rb +0 -3
  318. data/features/fixtures/rails4/app/config/initializers/wrap_parameters.rb +0 -14
  319. data/features/fixtures/rails4/app/config/locales/devise.en.yml +0 -64
  320. data/features/fixtures/rails4/app/config/locales/en.yml +0 -23
  321. data/features/fixtures/rails4/app/config/mongoid.yml +0 -22
  322. data/features/fixtures/rails4/app/config/routes.rb +0 -21
  323. data/features/fixtures/rails4/app/db/migrate/20180420160315_devise_create_users.rb +0 -47
  324. data/features/fixtures/rails4/app/db/seeds.rb +0 -7
  325. data/features/fixtures/rails4/app/lib/assets/.keep +0 -0
  326. data/features/fixtures/rails4/app/lib/tasks/.keep +0 -0
  327. data/features/fixtures/rails4/app/log/.keep +0 -0
  328. data/features/fixtures/rails4/app/public/404.html +0 -58
  329. data/features/fixtures/rails4/app/public/422.html +0 -58
  330. data/features/fixtures/rails4/app/public/500.html +0 -57
  331. data/features/fixtures/rails4/app/public/favicon.ico +0 -0
  332. data/features/fixtures/rails4/app/public/robots.txt +0 -5
  333. data/features/fixtures/rails4/app/test/controllers/.keep +0 -0
  334. data/features/fixtures/rails4/app/test/fixtures/.keep +0 -0
  335. data/features/fixtures/rails4/app/test/helpers/.keep +0 -0
  336. data/features/fixtures/rails4/app/test/integration/.keep +0 -0
  337. data/features/fixtures/rails4/app/test/mailers/.keep +0 -0
  338. data/features/fixtures/rails4/app/test/models/.keep +0 -0
  339. data/features/fixtures/rails4/app/test/test_helper.rb +0 -15
  340. data/features/fixtures/rails5/.dockerignore +0 -1
  341. data/features/fixtures/rails5/Dockerfile +0 -17
  342. data/features/fixtures/rails5/app/.gitignore +0 -21
  343. data/features/fixtures/rails5/app/Gemfile +0 -52
  344. data/features/fixtures/rails5/app/README.md +0 -24
  345. data/features/fixtures/rails5/app/Rakefile +0 -6
  346. data/features/fixtures/rails5/app/app/assets/config/manifest.js +0 -3
  347. data/features/fixtures/rails5/app/app/assets/images/.keep +0 -0
  348. data/features/fixtures/rails5/app/app/assets/javascripts/application.js +0 -16
  349. data/features/fixtures/rails5/app/app/assets/javascripts/cable.js +0 -13
  350. data/features/fixtures/rails5/app/app/assets/javascripts/channels/.keep +0 -0
  351. data/features/fixtures/rails5/app/app/assets/stylesheets/application.css +0 -15
  352. data/features/fixtures/rails5/app/app/channels/application_cable/channel.rb +0 -4
  353. data/features/fixtures/rails5/app/app/channels/application_cable/connection.rb +0 -4
  354. data/features/fixtures/rails5/app/app/controllers/api_key_controller.rb +0 -16
  355. data/features/fixtures/rails5/app/app/controllers/app_type_controller.rb +0 -16
  356. data/features/fixtures/rails5/app/app/controllers/app_version_controller.rb +0 -21
  357. data/features/fixtures/rails5/app/app/controllers/application_controller.rb +0 -7
  358. data/features/fixtures/rails5/app/app/controllers/auto_notify_controller.rb +0 -27
  359. data/features/fixtures/rails5/app/app/controllers/before_notify_controller.rb +0 -40
  360. data/features/fixtures/rails5/app/app/controllers/breadcrumbs_controller.rb +0 -24
  361. data/features/fixtures/rails5/app/app/controllers/clearance_controller.rb +0 -33
  362. data/features/fixtures/rails5/app/app/controllers/concerns/.keep +0 -0
  363. data/features/fixtures/rails5/app/app/controllers/handled_controller.rb +0 -22
  364. data/features/fixtures/rails5/app/app/controllers/ignore_classes_controller.rb +0 -19
  365. data/features/fixtures/rails5/app/app/controllers/metadata_filters_controller.rb +0 -12
  366. data/features/fixtures/rails5/app/app/controllers/mongo_controller.rb +0 -22
  367. data/features/fixtures/rails5/app/app/controllers/project_root_controller.rb +0 -21
  368. data/features/fixtures/rails5/app/app/controllers/release_stage_controller.rb +0 -16
  369. data/features/fixtures/rails5/app/app/controllers/send_code_controller.rb +0 -16
  370. data/features/fixtures/rails5/app/app/controllers/send_environment_controller.rb +0 -8
  371. data/features/fixtures/rails5/app/app/controllers/session_tracking_controller.rb +0 -20
  372. data/features/fixtures/rails5/app/app/controllers/unhandled_controller.rb +0 -7
  373. data/features/fixtures/rails5/app/app/helpers/application_helper.rb +0 -2
  374. data/features/fixtures/rails5/app/app/jobs/application_job.rb +0 -2
  375. data/features/fixtures/rails5/app/app/jobs/notify_job.rb +0 -5
  376. data/features/fixtures/rails5/app/app/mailers/application_mailer.rb +0 -4
  377. data/features/fixtures/rails5/app/app/models/application_record.rb +0 -3
  378. data/features/fixtures/rails5/app/app/models/concerns/.keep +0 -0
  379. data/features/fixtures/rails5/app/app/models/mongo_model.rb +0 -6
  380. data/features/fixtures/rails5/app/app/models/user.rb +0 -3
  381. data/features/fixtures/rails5/app/app/views/layouts/application.html.erb +0 -14
  382. data/features/fixtures/rails5/app/app/views/layouts/mailer.html.erb +0 -13
  383. data/features/fixtures/rails5/app/app/views/layouts/mailer.text.erb +0 -1
  384. data/features/fixtures/rails5/app/config.ru +0 -5
  385. data/features/fixtures/rails5/app/config/application.rb +0 -15
  386. data/features/fixtures/rails5/app/config/boot.rb +0 -3
  387. data/features/fixtures/rails5/app/config/cable.yml +0 -9
  388. data/features/fixtures/rails5/app/config/database.yml +0 -29
  389. data/features/fixtures/rails5/app/config/environment.rb +0 -5
  390. data/features/fixtures/rails5/app/config/environments/development.rb +0 -55
  391. data/features/fixtures/rails5/app/config/environments/production.rb +0 -87
  392. data/features/fixtures/rails5/app/config/environments/rails_env.rb +0 -55
  393. data/features/fixtures/rails5/app/config/environments/test.rb +0 -55
  394. data/features/fixtures/rails5/app/config/initializers/assets.rb +0 -11
  395. data/features/fixtures/rails5/app/config/initializers/backtrace_silencers.rb +0 -7
  396. data/features/fixtures/rails5/app/config/initializers/bugsnag.rb +0 -20
  397. data/features/fixtures/rails5/app/config/initializers/clearance.rb +0 -5
  398. data/features/fixtures/rails5/app/config/initializers/cookies_serializer.rb +0 -5
  399. data/features/fixtures/rails5/app/config/initializers/filter_parameter_logging.rb +0 -5
  400. data/features/fixtures/rails5/app/config/initializers/inflections.rb +0 -16
  401. data/features/fixtures/rails5/app/config/initializers/mime_types.rb +0 -4
  402. data/features/fixtures/rails5/app/config/initializers/new_framework_defaults.rb +0 -24
  403. data/features/fixtures/rails5/app/config/initializers/session_store.rb +0 -3
  404. data/features/fixtures/rails5/app/config/initializers/wrap_parameters.rb +0 -14
  405. data/features/fixtures/rails5/app/config/locales/devise.en.yml +0 -64
  406. data/features/fixtures/rails5/app/config/locales/en.yml +0 -23
  407. data/features/fixtures/rails5/app/config/mongoid.yml +0 -23
  408. data/features/fixtures/rails5/app/config/puma.rb +0 -47
  409. data/features/fixtures/rails5/app/config/routes.rb +0 -62
  410. data/features/fixtures/rails5/app/config/secrets.yml +0 -25
  411. data/features/fixtures/rails5/app/config/spring.rb +0 -6
  412. data/features/fixtures/rails5/app/db/migrate/20180426095545_create_users.rb +0 -17
  413. data/features/fixtures/rails5/app/db/schema.rb +0 -29
  414. data/features/fixtures/rails5/app/db/seeds.rb +0 -7
  415. data/features/fixtures/rails5/app/lib/assets/.keep +0 -0
  416. data/features/fixtures/rails5/app/lib/tasks/.keep +0 -0
  417. data/features/fixtures/rails5/app/log/.keep +0 -0
  418. data/features/fixtures/rails5/app/public/404.html +0 -67
  419. data/features/fixtures/rails5/app/public/422.html +0 -67
  420. data/features/fixtures/rails5/app/public/500.html +0 -66
  421. data/features/fixtures/rails5/app/public/apple-touch-icon-precomposed.png +0 -0
  422. data/features/fixtures/rails5/app/public/apple-touch-icon.png +0 -0
  423. data/features/fixtures/rails5/app/public/favicon.ico +0 -0
  424. data/features/fixtures/rails5/app/public/robots.txt +0 -5
  425. data/features/fixtures/rails5/app/test/controllers/.keep +0 -0
  426. data/features/fixtures/rails5/app/test/fixtures/.keep +0 -0
  427. data/features/fixtures/rails5/app/test/fixtures/files/.keep +0 -0
  428. data/features/fixtures/rails5/app/test/helpers/.keep +0 -0
  429. data/features/fixtures/rails5/app/test/integration/.keep +0 -0
  430. data/features/fixtures/rails5/app/test/mailers/.keep +0 -0
  431. data/features/fixtures/rails5/app/test/models/.keep +0 -0
  432. data/features/fixtures/rails5/app/test/test_helper.rb +0 -10
  433. data/features/fixtures/rails5/app/tmp/.keep +0 -0
  434. data/features/fixtures/rails6/.dockerignore +0 -1
  435. data/features/fixtures/rails6/Dockerfile +0 -26
  436. data/features/fixtures/rails6/app/.browserslistrc +0 -1
  437. data/features/fixtures/rails6/app/.gitignore +0 -35
  438. data/features/fixtures/rails6/app/.ruby-version +0 -1
  439. data/features/fixtures/rails6/app/Gemfile +0 -58
  440. data/features/fixtures/rails6/app/README.md +0 -24
  441. data/features/fixtures/rails6/app/Rakefile +0 -6
  442. data/features/fixtures/rails6/app/app/assets/config/manifest.js +0 -2
  443. data/features/fixtures/rails6/app/app/assets/images/.keep +0 -0
  444. data/features/fixtures/rails6/app/app/assets/stylesheets/application.css +0 -15
  445. data/features/fixtures/rails6/app/app/channels/application_cable/channel.rb +0 -4
  446. data/features/fixtures/rails6/app/app/channels/application_cable/connection.rb +0 -4
  447. data/features/fixtures/rails6/app/app/controllers/api_key_controller.rb +0 -16
  448. data/features/fixtures/rails6/app/app/controllers/app_type_controller.rb +0 -16
  449. data/features/fixtures/rails6/app/app/controllers/app_version_controller.rb +0 -21
  450. data/features/fixtures/rails6/app/app/controllers/application_controller.rb +0 -7
  451. data/features/fixtures/rails6/app/app/controllers/auto_notify_controller.rb +0 -27
  452. data/features/fixtures/rails6/app/app/controllers/before_notify_controller.rb +0 -40
  453. data/features/fixtures/rails6/app/app/controllers/breadcrumbs_controller.rb +0 -24
  454. data/features/fixtures/rails6/app/app/controllers/clearance_controller.rb +0 -33
  455. data/features/fixtures/rails6/app/app/controllers/concerns/.keep +0 -0
  456. data/features/fixtures/rails6/app/app/controllers/handled_controller.rb +0 -22
  457. data/features/fixtures/rails6/app/app/controllers/ignore_classes_controller.rb +0 -19
  458. data/features/fixtures/rails6/app/app/controllers/metadata_filters_controller.rb +0 -12
  459. data/features/fixtures/rails6/app/app/controllers/mongo_controller.rb +0 -22
  460. data/features/fixtures/rails6/app/app/controllers/project_root_controller.rb +0 -21
  461. data/features/fixtures/rails6/app/app/controllers/release_stage_controller.rb +0 -16
  462. data/features/fixtures/rails6/app/app/controllers/send_code_controller.rb +0 -16
  463. data/features/fixtures/rails6/app/app/controllers/send_environment_controller.rb +0 -8
  464. data/features/fixtures/rails6/app/app/controllers/session_tracking_controller.rb +0 -20
  465. data/features/fixtures/rails6/app/app/controllers/unhandled_controller.rb +0 -7
  466. data/features/fixtures/rails6/app/app/helpers/application_helper.rb +0 -2
  467. data/features/fixtures/rails6/app/app/javascript/channels/consumer.js +0 -6
  468. data/features/fixtures/rails6/app/app/javascript/channels/index.js +0 -5
  469. data/features/fixtures/rails6/app/app/javascript/packs/application.js +0 -9
  470. data/features/fixtures/rails6/app/app/jobs/application_job.rb +0 -7
  471. data/features/fixtures/rails6/app/app/jobs/notify_job.rb +0 -5
  472. data/features/fixtures/rails6/app/app/mailers/application_mailer.rb +0 -4
  473. data/features/fixtures/rails6/app/app/models/application_record.rb +0 -3
  474. data/features/fixtures/rails6/app/app/models/concerns/.keep +0 -0
  475. data/features/fixtures/rails6/app/app/models/mongo_model.rb +0 -6
  476. data/features/fixtures/rails6/app/app/models/user.rb +0 -3
  477. data/features/fixtures/rails6/app/app/views/layouts/application.html.erb +0 -15
  478. data/features/fixtures/rails6/app/app/views/layouts/mailer.html.erb +0 -13
  479. data/features/fixtures/rails6/app/app/views/layouts/mailer.text.erb +0 -1
  480. data/features/fixtures/rails6/app/babel.config.js +0 -70
  481. data/features/fixtures/rails6/app/config.ru +0 -5
  482. data/features/fixtures/rails6/app/config/application.rb +0 -19
  483. data/features/fixtures/rails6/app/config/boot.rb +0 -4
  484. data/features/fixtures/rails6/app/config/cable.yml +0 -13
  485. data/features/fixtures/rails6/app/config/credentials.yml.enc +0 -1
  486. data/features/fixtures/rails6/app/config/database.yml +0 -29
  487. data/features/fixtures/rails6/app/config/environment.rb +0 -5
  488. data/features/fixtures/rails6/app/config/environments/development.rb +0 -64
  489. data/features/fixtures/rails6/app/config/environments/production.rb +0 -113
  490. data/features/fixtures/rails6/app/config/environments/rails_env.rb +0 -56
  491. data/features/fixtures/rails6/app/config/environments/test.rb +0 -48
  492. data/features/fixtures/rails6/app/config/initializers/application_controller_renderer.rb +0 -8
  493. data/features/fixtures/rails6/app/config/initializers/assets.rb +0 -14
  494. data/features/fixtures/rails6/app/config/initializers/backtrace_silencers.rb +0 -7
  495. data/features/fixtures/rails6/app/config/initializers/bugsnag.rb +0 -20
  496. data/features/fixtures/rails6/app/config/initializers/content_security_policy.rb +0 -27
  497. data/features/fixtures/rails6/app/config/initializers/cookies_serializer.rb +0 -5
  498. data/features/fixtures/rails6/app/config/initializers/filter_parameter_logging.rb +0 -5
  499. data/features/fixtures/rails6/app/config/initializers/inflections.rb +0 -16
  500. data/features/fixtures/rails6/app/config/initializers/mime_types.rb +0 -4
  501. data/features/fixtures/rails6/app/config/initializers/wrap_parameters.rb +0 -14
  502. data/features/fixtures/rails6/app/config/locales/en.yml +0 -33
  503. data/features/fixtures/rails6/app/config/mongoid.yml +0 -23
  504. data/features/fixtures/rails6/app/config/puma.rb +0 -35
  505. data/features/fixtures/rails6/app/config/routes.rb +0 -62
  506. data/features/fixtures/rails6/app/config/secrets.yml +0 -25
  507. data/features/fixtures/rails6/app/config/spring.rb +0 -6
  508. data/features/fixtures/rails6/app/config/storage.yml +0 -34
  509. data/features/fixtures/rails6/app/config/webpack/development.js +0 -5
  510. data/features/fixtures/rails6/app/config/webpack/environment.js +0 -3
  511. data/features/fixtures/rails6/app/config/webpack/production.js +0 -5
  512. data/features/fixtures/rails6/app/config/webpack/rails_env.js +0 -5
  513. data/features/fixtures/rails6/app/config/webpack/test.js +0 -5
  514. data/features/fixtures/rails6/app/config/webpacker.yml +0 -121
  515. data/features/fixtures/rails6/app/db/migrate/20180426095545_create_users.rb +0 -17
  516. data/features/fixtures/rails6/app/db/schema.rb +0 -29
  517. data/features/fixtures/rails6/app/db/seeds.rb +0 -7
  518. data/features/fixtures/rails6/app/lib/assets/.keep +0 -0
  519. data/features/fixtures/rails6/app/lib/tasks/.keep +0 -0
  520. data/features/fixtures/rails6/app/log/.keep +0 -0
  521. data/features/fixtures/rails6/app/package.json +0 -15
  522. data/features/fixtures/rails6/app/postcss.config.js +0 -12
  523. data/features/fixtures/rails6/app/public/404.html +0 -67
  524. data/features/fixtures/rails6/app/public/422.html +0 -67
  525. data/features/fixtures/rails6/app/public/500.html +0 -66
  526. data/features/fixtures/rails6/app/public/apple-touch-icon-precomposed.png +0 -0
  527. data/features/fixtures/rails6/app/public/apple-touch-icon.png +0 -0
  528. data/features/fixtures/rails6/app/public/favicon.ico +0 -0
  529. data/features/fixtures/rails6/app/public/robots.txt +0 -1
  530. data/features/fixtures/rails6/app/storage/.keep +0 -0
  531. data/features/fixtures/rails6/app/test/application_system_test_case.rb +0 -5
  532. data/features/fixtures/rails6/app/test/channels/application_cable/connection_test.rb +0 -11
  533. data/features/fixtures/rails6/app/test/controllers/.keep +0 -0
  534. data/features/fixtures/rails6/app/test/fixtures/.keep +0 -0
  535. data/features/fixtures/rails6/app/test/fixtures/files/.keep +0 -0
  536. data/features/fixtures/rails6/app/test/helpers/.keep +0 -0
  537. data/features/fixtures/rails6/app/test/integration/.keep +0 -0
  538. data/features/fixtures/rails6/app/test/mailers/.keep +0 -0
  539. data/features/fixtures/rails6/app/test/models/.keep +0 -0
  540. data/features/fixtures/rails6/app/test/system/.keep +0 -0
  541. data/features/fixtures/rails6/app/test/test_helper.rb +0 -13
  542. data/features/fixtures/rails6/app/tmp/.keep +0 -0
  543. data/features/fixtures/rails6/app/yarn.lock +0 -6082
  544. data/features/fixtures/resque/.dockerignore +0 -1
  545. data/features/fixtures/resque/Dockerfile +0 -14
  546. data/features/fixtures/resque/Gemfile +0 -6
  547. data/features/fixtures/resque/Rakefile +0 -4
  548. data/features/fixtures/resque/app.rb +0 -12
  549. data/features/fixtures/sidekiq/.dockerignore +0 -2
  550. data/features/fixtures/sidekiq/Dockerfile +0 -17
  551. data/features/fixtures/sidekiq/app/Gemfile +0 -7
  552. data/features/fixtures/sidekiq/app/Rakefile.rb +0 -14
  553. data/features/fixtures/sidekiq/app/app.rb +0 -35
  554. data/features/fixtures/sidekiq/app/initializers/HandledError.rb +0 -3
  555. data/features/fixtures/sidekiq/app/initializers/UnhandledError.rb +0 -3
  556. data/features/fixtures/sidekiq/payloads/handled_metadata_ca_false.json +0 -11
  557. data/features/fixtures/sidekiq/payloads/handled_metadata_ca_true.json +0 -12
  558. data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_false.json +0 -11
  559. data/features/fixtures/sidekiq/payloads/unhandled_metadata_ca_true.json +0 -12
  560. data/features/fixtures/sinatra1/.dockerignore +0 -1
  561. data/features/fixtures/sinatra1/Dockerfile +0 -13
  562. data/features/fixtures/sinatra1/Gemfile +0 -4
  563. data/features/fixtures/sinatra1/app.rb +0 -9
  564. data/features/fixtures/sinatra2/.dockerignore +0 -1
  565. data/features/fixtures/sinatra2/Dockerfile +0 -13
  566. data/features/fixtures/sinatra2/Gemfile +0 -4
  567. data/features/fixtures/sinatra2/app.rb +0 -9
  568. data/features/plain_features/add_tab.feature +0 -49
  569. data/features/plain_features/app_type.feature +0 -8
  570. data/features/plain_features/app_version.feature +0 -8
  571. data/features/plain_features/auto_notify.feature +0 -7
  572. data/features/plain_features/delivery.feature +0 -20
  573. data/features/plain_features/exception_data.feature +0 -50
  574. data/features/plain_features/filters.feature +0 -14
  575. data/features/plain_features/handled_errors.feature +0 -42
  576. data/features/plain_features/ignore_classes.feature +0 -11
  577. data/features/plain_features/ignore_report.feature +0 -12
  578. data/features/plain_features/proxies.feature +0 -25
  579. data/features/plain_features/release_stages.feature +0 -20
  580. data/features/plain_features/report_api_key.feature +0 -14
  581. data/features/plain_features/report_severity.feature +0 -15
  582. data/features/plain_features/report_stack_frames.feature +0 -49
  583. data/features/plain_features/report_user.feature +0 -45
  584. data/features/plain_features/unhandled_errors.feature +0 -33
  585. data/features/rails_features/api_key.feature +0 -15
  586. data/features/rails_features/app_type.feature +0 -24
  587. data/features/rails_features/app_version.feature +0 -26
  588. data/features/rails_features/auto_capture_sessions.feature +0 -34
  589. data/features/rails_features/auto_notify.feature +0 -41
  590. data/features/rails_features/before_notify.feature +0 -44
  591. data/features/rails_features/breadcrumbs.feature +0 -43
  592. data/features/rails_features/handled.feature +0 -42
  593. data/features/rails_features/ignore_classes.feature +0 -14
  594. data/features/rails_features/meta_data_filters.feature +0 -14
  595. data/features/rails_features/mongo_breadcrumbs.feature +0 -26
  596. data/features/rails_features/project_root.feature +0 -35
  597. data/features/rails_features/release_stage.feature +0 -27
  598. data/features/rails_features/send_code.feature +0 -18
  599. data/features/rails_features/send_environment.feature +0 -13
  600. data/features/rails_features/unhandled.feature +0 -16
  601. data/features/rails_features/user_info.feature +0 -52
  602. data/features/sidekiq.feature +0 -30
  603. data/features/steps/ruby_notifier_steps.rb +0 -75
  604. data/features/support/env.rb +0 -23
  605. data/issue_template.md +0 -48
  606. data/spec/breadcrumbs/breadcrumb_spec.rb +0 -93
  607. data/spec/breadcrumbs/validator_spec.rb +0 -201
  608. data/spec/bugsnag_spec.rb +0 -366
  609. data/spec/cleaner_spec.rb +0 -158
  610. data/spec/configuration_spec.rb +0 -441
  611. data/spec/fixtures/apps/rails-initializer-config/Gemfile +0 -9
  612. data/spec/fixtures/apps/rails-initializer-config/config.ru +0 -16
  613. data/spec/fixtures/apps/rails-initializer-config/config/initializers/bugsnag.rb +0 -3
  614. data/spec/fixtures/apps/rails-invalid-initializer-config/Gemfile +0 -9
  615. data/spec/fixtures/apps/rails-invalid-initializer-config/config.ru +0 -16
  616. data/spec/fixtures/apps/rails-invalid-initializer-config/config/initializers/bugsnag.rb +0 -3
  617. data/spec/fixtures/apps/rails-no-config/Gemfile +0 -9
  618. data/spec/fixtures/apps/rails-no-config/config.ru +0 -16
  619. data/spec/fixtures/apps/scripts/Gemfile +0 -3
  620. data/spec/fixtures/apps/scripts/configure_invalid_key.rb +0 -5
  621. data/spec/fixtures/apps/scripts/configure_key.rb +0 -5
  622. data/spec/fixtures/apps/scripts/no_config.rb +0 -3
  623. data/spec/fixtures/crashes/end_of_file.rb +0 -9
  624. data/spec/fixtures/crashes/short_file.rb +0 -1
  625. data/spec/fixtures/crashes/start_of_file.rb +0 -9
  626. data/spec/fixtures/middleware/internal_info_setter.rb +0 -11
  627. data/spec/fixtures/middleware/public_info_setter.rb +0 -11
  628. data/spec/fixtures/tasks/Rakefile +0 -26
  629. data/spec/helper_spec.rb +0 -162
  630. data/spec/integration_spec.rb +0 -107
  631. data/spec/integrations/clearance_user_spec.rb +0 -38
  632. data/spec/integrations/logger_spec.rb +0 -134
  633. data/spec/integrations/mailman_spec.rb +0 -83
  634. data/spec/integrations/mongo_spec.rb +0 -262
  635. data/spec/integrations/que_spec.rb +0 -94
  636. data/spec/integrations/rack_spec.rb +0 -230
  637. data/spec/integrations/rails3_request_spec.rb +0 -67
  638. data/spec/integrations/rake_spec.rb +0 -71
  639. data/spec/integrations/resque_spec.rb +0 -99
  640. data/spec/integrations/shoryuken_spec.rb +0 -70
  641. data/spec/integrations/sidekiq_spec.rb +0 -137
  642. data/spec/integrations/warden_user_spec.rb +0 -41
  643. data/spec/middleware/exception_meta_data_spec.rb +0 -104
  644. data/spec/middleware_spec.rb +0 -254
  645. data/spec/middleware_stack_spec.rb +0 -151
  646. data/spec/report_spec.rb +0 -1282
  647. data/spec/session_tracker_spec.rb +0 -156
  648. data/spec/spec_helper.rb +0 -86
  649. data/spec/stacktrace_spec.rb +0 -129
  650. data/spec/utility/circular_buffer_spec.rb +0 -98
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2298a07774ef42fb825c7ae6aa9722c9da1234617789236a442cd0d888a4e486
4
- data.tar.gz: f4882c3be40fe0e4d6582ec24e00751257ab5f5926866c0317a7d6d0ae3aa129
3
+ metadata.gz: 7bc3da7c0b78fcf5ccdccee2cc11c2da66b0ed121efd6ee4959c3defa4faf78b
4
+ data.tar.gz: 9ee38d85d5156b4820782f54076f4209c5adf333505f701e9498ed0eafd99a1a
5
5
  SHA512:
6
- metadata.gz: 129a9b9cf9411234935f4d49be119596e55475d31ff68e943e978f14ca95d17f2418c37fffa6190f25b03301fd408d5c0d4719c11807934982d3cd6f4d1c52ff
7
- data.tar.gz: 6dae71c25d20bb071104e07608e51b33e4ab2deaaa0a7bf2bab06694f850d20823d2afde37c1edebd105b8e190b0d22baf61da8d16925b84f3fb5ec757cf6cbf
6
+ metadata.gz: 6962b73237abdfed471b6fdb835a0fb57f6360dc86efa4c8bd2049c0c354332a214626a48c700e9e0edf29c6848678883d3cddd9bcc040b42057a6e7d03f2fe5
7
+ data.tar.gz: 5e1a14700a57fc44f3d9ad9cf6f6208fe26a1bc590b92e56a56b5a5352891c7e75dd29c28a01a0edf7e297a23bb0728f5484205119a4476e768306e415db6fde
@@ -0,0 +1,11 @@
1
+ --charset UTF-8
2
+ --fail-on-warning
3
+ --hide-api private
4
+ --no-private
5
+ --protected
6
+ --title "bugsnag-ruby API Documentation"
7
+ lib/**/*.rb
8
+ -
9
+ README.md
10
+ CONTRIBUTING.md
11
+ CHANGELOG.md
@@ -1,6 +1,94 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## 6.17.0 (27 August 2020)
5
+
6
+ ### Enhancements
7
+
8
+ * Sidekiq now uses `thread_queue` delivery by default
9
+ | [#626](https://github.com/bugsnag/bugsnag-ruby/pull/626)
10
+
11
+ * Rescue now uses `thread_queue` delivery when `at_exit` hooks are enabled
12
+ | [#629](https://github.com/bugsnag/bugsnag-ruby/pull/629)
13
+
14
+ ## 6.16.0 (12 August 2020)
15
+
16
+ ### Enhancements
17
+
18
+ * Set default Delayed Job error context to job class
19
+ | [#499](https://github.com/bugsnag/bugsnag-ruby/pull/499)
20
+ | [Mike Stewart](https://github.com/mike-stewart)
21
+
22
+ * The `BUGSNAG_RELEASE_STAGE` environment variable can now be used to set the release stage. Previously this was only used in Rails applications
23
+ | [#613](https://github.com/bugsnag/bugsnag-ruby/pull/613)
24
+
25
+ * Add support for runtime versions to Delayed Job, Mailman and Shoryuken integrations
26
+ | [#620](https://github.com/bugsnag/bugsnag-ruby/pull/620)
27
+
28
+ * Reduce the size of the bundled gem
29
+ | [#571](https://github.com/bugsnag/bugsnag-ruby/pull/571)
30
+ | [t-richards](https://github.com/t-richards)
31
+
32
+ * Move serialization of Reports onto the background thread when using the thread_queue delivery method
33
+ | [#623](https://github.com/bugsnag/bugsnag-ruby/pull/623)
34
+
35
+ ## Fixes
36
+
37
+ * The `app_type` configuration option should no longer be overwritten by Bugsnag and integrations should set this more consistently
38
+ | [#619](https://github.com/bugsnag/bugsnag-ruby/pull/619)
39
+
40
+ ## 6.15.0 (27 July 2020)
41
+
42
+ ### Enhancements
43
+
44
+ * Add `on_error` callbacks to replace `before_notify_callbacks`
45
+ | [#608](https://github.com/bugsnag/bugsnag-ruby/pull/608)
46
+
47
+ * Improve performance when extracting code from files in stacktraces
48
+ | [#604](https://github.com/bugsnag/bugsnag-ruby/pull/604)
49
+
50
+ * Reduce memory use when session tracking is disabled
51
+ | [#606](https://github.com/bugsnag/bugsnag-ruby/pull/606)
52
+
53
+ ### Deprecated
54
+
55
+ * `before_notify_callbacks` have been deprecated in favour of `on_error` and will be removed in the next major release
56
+
57
+ ## 6.14.0 (20 July 2020)
58
+
59
+ ### Enhancements
60
+
61
+ * Add configurable `discard_classes` option to allow filtering errors using either a `String` or `Regexp` matched against the error's class name
62
+ | [#597](https://github.com/bugsnag/bugsnag-ruby/pull/597)
63
+
64
+ * The Breadcrumb name limit of 30 characters has been removed
65
+ | [#600](https://github.com/bugsnag/bugsnag-ruby/pull/600)
66
+
67
+ * Improve performance of payload cleaning
68
+ | [#601](https://github.com/bugsnag/bugsnag-ruby/pull/601)
69
+
70
+ * Improve performance when processing stacktraces
71
+ | [#602](https://github.com/bugsnag/bugsnag-ruby/pull/602)
72
+ | [#603](https://github.com/bugsnag/bugsnag-ruby/pull/603)
73
+
74
+ * If a custom object responds to `id` method, show the id and class in error reports
75
+ | [#531](https://github.com/bugsnag/bugsnag-ruby/pull/531)
76
+ | [manojmj92](https://github.com/manojmj92)
77
+
78
+ ### Deprecated
79
+
80
+ * The `ignore_classes` configuration option has been deprecated in favour of `discard_classes`. `ignore_classes` will be removed in the next major release
81
+
82
+ ## 6.13.1 (11 May 2020)
83
+
84
+ ### Fixes
85
+
86
+ * Only call custom diagnostic data methods once
87
+ | [#586](https://github.com/bugsnag/bugsnag-ruby/pull/586)
88
+ | [stoivo](https://github.com/stoivo)
89
+ * Guard against exceptions in to_s when cleaning objects
90
+ | [#591](https://github.com/bugsnag/bugsnag-ruby/pull/591)
91
+
4
92
  ## 6.13.0 (30 Jan 2020)
5
93
 
6
94
  ### Enhancements
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.13.0
1
+ 6.17.0
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.homepage = "https://github.com/bugsnag/bugsnag-ruby"
11
11
  s.licenses = ["MIT"]
12
12
 
13
- s.files = `git ls-files`.split("\n").reject {|file| file.start_with? "example/"}
13
+ s.files = `git ls-files -z lib bugsnag.gemspec VERSION .yardopts`.split("\x0")
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
16
16
  "README.md",
@@ -33,6 +33,7 @@ require "bugsnag/breadcrumbs/validator"
33
33
  require "bugsnag/breadcrumbs/breadcrumb"
34
34
  require "bugsnag/breadcrumbs/breadcrumbs"
35
35
 
36
+ # rubocop:todo Metrics/ModuleLength
36
37
  module Bugsnag
37
38
  LOCK = Mutex.new
38
39
  INTEGRATIONS = [:resque, :sidekiq, :mailman, :delayed_job, :shoryuken, :que, :mongo]
@@ -43,10 +44,19 @@ module Bugsnag
43
44
  ##
44
45
  # Configure the Bugsnag notifier application-wide settings.
45
46
  #
46
- # Yields a configuration object to use to set application settings.
47
+ # Yields a {Configuration} object to use to set application settings.
48
+ #
49
+ # @yieldparam configuration [Configuration]
50
+ # @return [void]
47
51
  def configure(validate_api_key=true)
48
52
  yield(configuration) if block_given?
49
53
 
54
+ # Create the session tracker if sessions are enabled to avoid the overhead
55
+ # of creating it on the first request. We skip this if we're not validating
56
+ # the API key as we use this internally before the user's configure block
57
+ # has run, so we don't know if sessions are enabled yet.
58
+ session_tracker if validate_api_key && configuration.auto_capture_sessions
59
+
50
60
  check_key_valid if validate_api_key
51
61
  check_endpoint_setup
52
62
 
@@ -63,7 +73,7 @@ module Bugsnag
63
73
  auto_notify = false
64
74
  end
65
75
 
66
- return unless deliver_notification?(exception, auto_notify)
76
+ return unless should_deliver_notification?(exception, auto_notify)
67
77
 
68
78
  exception = NIL_EXCEPTION_DESCRIPTION if exception.nil?
69
79
 
@@ -71,6 +81,7 @@ module Bugsnag
71
81
 
72
82
  # If this is an auto_notify we yield the block before the any middleware is run
73
83
  yield(report) if block_given? && auto_notify
84
+
74
85
  if report.ignore?
75
86
  configuration.debug("Not notifying #{report.exceptions.last[:errorClass]} due to ignore being signified in auto_notify block")
76
87
  return
@@ -97,6 +108,7 @@ module Bugsnag
97
108
  # If this is not an auto_notify then the block was provided by the user. This should be the last
98
109
  # block that is run as it is the users "most specific" block.
99
110
  yield(report) if block_given? && !auto_notify
111
+
100
112
  if report.ignore?
101
113
  configuration.debug("Not notifying #{report.exceptions.last[:errorClass]} due to ignore being signified in user provided block")
102
114
  return
@@ -111,18 +123,14 @@ module Bugsnag
111
123
  report.severity_reason = initial_reason
112
124
  end
113
125
 
114
- # Deliver
115
- configuration.info("Notifying #{configuration.notify_endpoint} of #{report.exceptions.last[:errorClass]}")
116
- options = {:headers => report.headers}
117
- payload = ::JSON.dump(Bugsnag::Helpers.trim_if_needed(report.as_json))
118
- Bugsnag::Delivery[configuration.delivery_method].deliver(configuration.notify_endpoint, payload, configuration, options)
119
- report_summary = report.summary
120
- leave_breadcrumb(report_summary[:error_class], report_summary, Bugsnag::Breadcrumbs::ERROR_BREADCRUMB_TYPE, :auto)
126
+ deliver_notification(report)
121
127
  end
122
128
  end
123
129
 
124
130
  ##
125
- # Registers an at_exit function to automatically catch errors on exit
131
+ # Registers an at_exit function to automatically catch errors on exit.
132
+ #
133
+ # @return [void]
126
134
  def register_at_exit
127
135
  return if at_exit_handler_installed?
128
136
  @exit_handler_added = true
@@ -139,14 +147,20 @@ module Bugsnag
139
147
  end
140
148
 
141
149
  ##
142
- # Checks if an at_exit handler has been added
150
+ # Checks if an at_exit handler has been added.
151
+ #
152
+ # The {Bugsnag#configure} method will add this automatically, but it can be
153
+ # added manually using {Bugsnag#register_at_exit}.
154
+ #
155
+ # @return [Boolean]
143
156
  def at_exit_handler_installed?
144
157
  @exit_handler_added ||= false
145
158
  end
146
159
 
147
- # Configuration getters
148
160
  ##
149
161
  # Returns the client's Configuration object, or creates one if not yet created.
162
+ #
163
+ # @return [Configuration]
150
164
  def configuration
151
165
  @configuration = nil unless defined?(@configuration)
152
166
  @configuration || LOCK.synchronize { @configuration ||= Bugsnag::Configuration.new }
@@ -154,6 +168,8 @@ module Bugsnag
154
168
 
155
169
  ##
156
170
  # Returns the client's SessionTracker object, or creates one if not yet created.
171
+ #
172
+ # @return [SessionTracker]
157
173
  def session_tracker
158
174
  @session_tracker = nil unless defined?(@session_tracker)
159
175
  @session_tracker || LOCK.synchronize { @session_tracker ||= Bugsnag::SessionTracker.new}
@@ -171,11 +187,16 @@ module Bugsnag
171
187
  # Allow access to "before notify" callbacks as an array.
172
188
  #
173
189
  # These callbacks will be called whenever an error notification is being made.
190
+ #
191
+ # @deprecated Use {Bugsnag#add_on_error} instead
174
192
  def before_notify_callbacks
175
193
  Bugsnag.configuration.request_data[:before_callbacks] ||= []
176
194
  end
177
195
 
178
- # Attempts to load all integrations through auto-discovery
196
+ ##
197
+ # Attempts to load all integrations through auto-discovery.
198
+ #
199
+ # @return [void]
179
200
  def load_integrations
180
201
  require "bugsnag/integrations/railtie" if defined?(Rails::Railtie)
181
202
  INTEGRATIONS.each do |integration|
@@ -186,7 +207,11 @@ module Bugsnag
186
207
  end
187
208
  end
188
209
 
189
- # Load a specific integration
210
+ ##
211
+ # Load a specific integration.
212
+ #
213
+ # @param integration [Symbol] One of the integrations in {INTEGRATIONS}
214
+ # @return [void]
190
215
  def load_integration(integration)
191
216
  integration = :railtie if integration == :rails
192
217
  if INTEGRATIONS.include?(integration) || integration == :railtie
@@ -203,6 +228,7 @@ module Bugsnag
203
228
  # @param meta_data [Hash] String, Numeric, or Boolean meta data to attach
204
229
  # @param type [String] the breadcrumb type, from Bugsnag::Breadcrumbs::VALID_BREADCRUMB_TYPES
205
230
  # @param auto [Symbol] set to :auto if the breadcrumb is automatically created
231
+ # @return [void]
206
232
  def leave_breadcrumb(name, meta_data={}, type=Bugsnag::Breadcrumbs::MANUAL_BREADCRUMB_TYPE, auto=:manual)
207
233
  breadcrumb = Bugsnag::Breadcrumbs::Breadcrumb.new(name, type, meta_data, auto)
208
234
  validator = Bugsnag::Breadcrumbs::Validator.new(configuration)
@@ -211,27 +237,67 @@ module Bugsnag
211
237
  validator.validate(breadcrumb)
212
238
 
213
239
  # Skip if it's already invalid
214
- unless breadcrumb.ignore?
215
- # Run callbacks
216
- configuration.before_breadcrumb_callbacks.each do |c|
217
- c.arity > 0 ? c.call(breadcrumb) : c.call
218
- break if breadcrumb.ignore?
219
- end
240
+ return if breadcrumb.ignore?
241
+
242
+ # Run callbacks
243
+ configuration.before_breadcrumb_callbacks.each do |c|
244
+ c.arity > 0 ? c.call(breadcrumb) : c.call
245
+ break if breadcrumb.ignore?
246
+ end
247
+
248
+ # Return early if ignored
249
+ return if breadcrumb.ignore?
220
250
 
221
- # Return early if ignored
222
- return if breadcrumb.ignore?
251
+ # Validate again in case of callback alteration
252
+ validator.validate(breadcrumb)
223
253
 
224
- # Validate again in case of callback alteration
225
- validator.validate(breadcrumb)
254
+ # Add to breadcrumbs buffer if still valid
255
+ configuration.breadcrumbs << breadcrumb unless breadcrumb.ignore?
256
+ end
226
257
 
227
- # Add to breadcrumbs buffer if still valid
228
- configuration.breadcrumbs << breadcrumb unless breadcrumb.ignore?
258
+ ##
259
+ # Add the given callback to the list of on_error callbacks
260
+ #
261
+ # The on_error callbacks will be called when an error is captured or reported
262
+ # and are passed a {Bugsnag::Report} object
263
+ #
264
+ # Returning false from an on_error callback will cause the error to be ignored
265
+ # and will prevent any remaining callbacks from being called
266
+ #
267
+ # @param callback [Proc]
268
+ # @return [void]
269
+ def add_on_error(callback)
270
+ configuration.add_on_error(callback)
271
+ end
272
+
273
+ ##
274
+ # Remove the given callback from the list of on_error callbacks
275
+ #
276
+ # Note that this must be the same Proc instance that was passed to
277
+ # {Bugsnag#add_on_error}, otherwise it will not be removed
278
+ #
279
+ # @param callback [Proc]
280
+ # @return [void]
281
+ def remove_on_error(callback)
282
+ configuration.remove_on_error(callback)
283
+ end
284
+
285
+ ##
286
+ # Returns the client's Cleaner object, or creates one if not yet created.
287
+ #
288
+ # @api private
289
+ #
290
+ # @return [Cleaner]
291
+ def cleaner
292
+ @cleaner = nil unless defined?(@cleaner)
293
+ @cleaner || LOCK.synchronize do
294
+ @cleaner ||= Bugsnag::Cleaner.new(configuration)
229
295
  end
230
296
  end
231
297
 
232
298
  private
233
299
 
234
- def deliver_notification?(exception, auto_notify)
300
+ def should_deliver_notification?(exception, auto_notify)
235
301
  reason = abort_reason(exception, auto_notify)
236
302
  configuration.debug(reason) unless reason.nil?
237
303
  reason.nil?
@@ -249,6 +315,42 @@ module Bugsnag
249
315
  end
250
316
  end
251
317
 
318
+ ##
319
+ # Deliver the notification to Bugsnag
320
+ #
321
+ # @param report [Report]
322
+ # @return void
323
+ def deliver_notification(report)
324
+ configuration.info("Notifying #{configuration.notify_endpoint} of #{report.exceptions.last[:errorClass]}")
325
+
326
+ options = { headers: report.headers }
327
+
328
+ delivery_method = Bugsnag::Delivery[configuration.delivery_method]
329
+
330
+ if delivery_method.respond_to?(:serialize_and_deliver)
331
+ delivery_method.serialize_and_deliver(
332
+ configuration.notify_endpoint,
333
+ proc { report_to_json(report) },
334
+ configuration,
335
+ options
336
+ )
337
+ else
338
+ delivery_method.deliver(
339
+ configuration.notify_endpoint,
340
+ report_to_json(report),
341
+ configuration,
342
+ options
343
+ )
344
+ end
345
+
346
+ leave_breadcrumb(
347
+ report.summary[:error_class],
348
+ report.summary,
349
+ Bugsnag::Breadcrumbs::ERROR_BREADCRUMB_TYPE,
350
+ :auto
351
+ )
352
+ end
353
+
252
354
  # Check if the API key is valid and warn (once) if it is not
253
355
  def check_key_valid
254
356
  @key_warning = false unless defined?(@key_warning)
@@ -273,7 +375,23 @@ module Bugsnag
273
375
  raise ArgumentError, "The session endpoint cannot be modified without the notify endpoint"
274
376
  end
275
377
  end
378
+
379
+ ##
380
+ # Convert the Report object to JSON
381
+ #
382
+ # We ensure the report is safe to send by removing recursion, fixing
383
+ # encoding errors and redacting metadata according to "meta_data_filters"
384
+ #
385
+ # @param report [Report]
386
+ # @return [String]
387
+ def report_to_json(report)
388
+ cleaned = cleaner.clean_object(report.as_json)
389
+ trimmed = Bugsnag::Helpers.trim_if_needed(cleaned)
390
+
391
+ ::JSON.dump(trimmed)
392
+ end
276
393
  end
277
394
  end
395
+ # rubocop:enable Metrics/ModuleLength
278
396
 
279
397
  Bugsnag.load_integrations unless ENV["BUGSNAG_DISABLE_AUTOCONFIGURE"]
@@ -1,6 +1,4 @@
1
1
  module Bugsnag::Breadcrumbs
2
- MAX_NAME_LENGTH = 30
3
-
4
2
  VALID_BREADCRUMB_TYPES = [
5
3
  ERROR_BREADCRUMB_TYPE = "error",
6
4
  MANUAL_BREADCRUMB_TYPE = "manual",
@@ -15,12 +15,6 @@ module Bugsnag::Breadcrumbs
15
15
  #
16
16
  # @param breadcrumb [Bugsnag::Breadcrumbs::Breadcrumb] the breadcrumb to be validated
17
17
  def validate(breadcrumb)
18
- # Check name length
19
- if breadcrumb.name.size > Bugsnag::Breadcrumbs::MAX_NAME_LENGTH
20
- @configuration.debug("Breadcrumb name trimmed to length #{Bugsnag::Breadcrumbs::MAX_NAME_LENGTH}. Original name: #{breadcrumb.name}")
21
- breadcrumb.name = breadcrumb.name.slice(0...Bugsnag::Breadcrumbs::MAX_NAME_LENGTH)
22
- end
23
-
24
18
  # Check meta_data hash doesn't contain complex values
25
19
  breadcrumb.meta_data = breadcrumb.meta_data.select do |k, v|
26
20
  if valid_meta_data_type?(v)
@@ -1,19 +1,76 @@
1
1
  require 'uri'
2
2
 
3
3
  module Bugsnag
4
+ # @api private
4
5
  class Cleaner
5
6
  FILTERED = '[FILTERED]'.freeze
6
7
  RECURSION = '[RECURSION]'.freeze
7
8
  OBJECT = '[OBJECT]'.freeze
8
9
  RAISED = '[RAISED]'.freeze
10
+ OBJECT_WITH_ID_AND_CLASS = '[OBJECT]: [Class]: %<class_name>s [ID]: %<id>d'.freeze
9
11
 
10
- def initialize(filters)
11
- @filters = Array(filters)
12
- @deep_filters = @filters.any? {|f| f.kind_of?(Regexp) && f.to_s.include?("\\.".freeze) }
12
+ ##
13
+ # @param configuration [Configuration]
14
+ def initialize(configuration)
15
+ @configuration = configuration
13
16
  end
14
17
 
15
- def clean_object(obj)
16
- traverse_object(obj, {}, nil)
18
+ def clean_object(object)
19
+ @deep_filters = deep_filters?
20
+
21
+ traverse_object(object, {}, nil)
22
+ end
23
+
24
+ ##
25
+ # @param url [String]
26
+ # @return [String]
27
+ def clean_url(url)
28
+ return url if @configuration.meta_data_filters.empty?
29
+
30
+ uri = URI(url)
31
+ return url unless uri.query
32
+
33
+ query_params = uri.query.split('&').map { |pair| pair.split('=') }
34
+ query_params.map! do |key, val|
35
+ if filters_match?(key)
36
+ "#{key}=#{FILTERED}"
37
+ else
38
+ "#{key}=#{val}"
39
+ end
40
+ end
41
+
42
+ uri.query = query_params.join('&')
43
+ uri.to_s
44
+ end
45
+
46
+ private
47
+
48
+ ##
49
+ # This method calculates whether we need to filter deeply or not; i.e. whether
50
+ # we should match both with and without 'request.params'
51
+ #
52
+ # This is cached on the instance variable '@deep_filters' for performance
53
+ # reasons
54
+ #
55
+ # @return [Boolean]
56
+ def deep_filters?
57
+ @configuration.meta_data_filters.any? do |filter|
58
+ filter.is_a?(Regexp) && filter.to_s.include?("\\.".freeze)
59
+ end
60
+ end
61
+
62
+ def clean_string(str)
63
+ if defined?(str.encoding) && defined?(Encoding::UTF_8)
64
+ if str.encoding == Encoding::UTF_8
65
+ str.valid_encoding? ? str : str.encode('utf-16', invalid: :replace, undef: :replace).encode('utf-8')
66
+ else
67
+ str.encode('utf-8', invalid: :replace, undef: :replace)
68
+ end
69
+ elsif defined?(Iconv)
70
+ Iconv.conv('UTF-8//IGNORE', 'UTF-8', str) || str
71
+ else
72
+ str
73
+ end
17
74
  end
18
75
 
19
76
  def traverse_object(obj, seen, scope)
@@ -28,11 +85,22 @@ module Bugsnag
28
85
  value = case obj
29
86
  when Hash
30
87
  clean_hash = {}
31
- obj.each do |k,v|
32
- if filters_match_deeply?(k, scope)
33
- clean_hash[k] = FILTERED
34
- else
35
- clean_hash[k] = traverse_object(v, seen, [scope, k].compact.join('.'))
88
+ obj.each do |k, v|
89
+ begin
90
+ current_scope = [scope, k].compact.join('.')
91
+
92
+ if filters_match_deeply?(k, current_scope)
93
+ clean_hash[k] = FILTERED
94
+ else
95
+ clean_hash[k] = traverse_object(v, seen, current_scope)
96
+ end
97
+ # If we get an error here, we assume the key needs to be filtered
98
+ # to avoid leaking things we shouldn't. We also remove the key itself
99
+ # because it may cause issues later e.g. when being converted to JSON
100
+ rescue StandardError
101
+ clean_hash[RAISED] = FILTERED
102
+ rescue SystemStackError
103
+ clean_hash[RECURSION] = FILTERED
36
104
  end
37
105
  end
38
106
  clean_hash
@@ -43,10 +111,23 @@ module Bugsnag
43
111
  when String
44
112
  clean_string(obj)
45
113
  else
46
- str = obj.to_s rescue RAISED
114
+ # guard against objects that raise or blow the stack when stringified
115
+ begin
116
+ str = obj.to_s
117
+ rescue StandardError
118
+ str = RAISED
119
+ rescue SystemStackError
120
+ str = RECURSION
121
+ end
122
+
47
123
  # avoid leaking potentially sensitive data from objects' #inspect output
48
124
  if str =~ /#<.*>/
49
- OBJECT
125
+ # Use id of the object if available
126
+ if obj.respond_to?(:id)
127
+ format(OBJECT_WITH_ID_AND_CLASS, class_name: obj.class, id: obj.id)
128
+ else
129
+ OBJECT
130
+ end
50
131
  else
51
132
  clean_string(str)
52
133
  end
@@ -56,67 +137,56 @@ module Bugsnag
56
137
  value
57
138
  end
58
139
 
59
- def clean_string(str)
60
- if defined?(str.encoding) && defined?(Encoding::UTF_8)
61
- if str.encoding == Encoding::UTF_8
62
- str.valid_encoding? ? str : str.encode('utf-16', invalid: :replace, undef: :replace).encode('utf-8')
140
+ ##
141
+ # @param key [String, #to_s]
142
+ # @return [Boolean]
143
+ def filters_match?(key)
144
+ str = key.to_s
145
+
146
+ @configuration.meta_data_filters.any? do |filter|
147
+ case filter
148
+ when Regexp
149
+ str.match(filter)
63
150
  else
64
- str.encode('utf-8', invalid: :replace, undef: :replace)
151
+ str.include?(filter.to_s)
65
152
  end
66
- elsif defined?(Iconv)
67
- Iconv.conv('UTF-8//IGNORE', 'UTF-8', str) || str
68
- else
69
- str
70
153
  end
71
154
  end
72
155
 
73
- def self.clean_object_encoding(obj)
74
- new(nil).clean_object(obj)
75
- end
156
+ ##
157
+ # If someone has a Rails filter like /^stuff\.secret/, it won't match
158
+ # "request.params.stuff.secret", so we try it both with and without the
159
+ # "request.params." bit.
160
+ #
161
+ # @param key [String, #to_s]
162
+ # @param scope [String]
163
+ # @return [Boolean]
164
+ def filters_match_deeply?(key, scope)
165
+ return false unless scope_should_be_filtered?(scope)
76
166
 
77
- def clean_url(url)
78
- return url if @filters.empty?
167
+ return true if filters_match?(key)
168
+ return false unless @deep_filters
79
169
 
80
- uri = URI(url)
81
- return url unless uri.query
170
+ return true if filters_match?(scope)
82
171
 
83
- query_params = uri.query.split('&').map { |pair| pair.split('=') }
84
- query_params.map! do |key, val|
85
- if filters_match?(key)
86
- "#{key}=#{FILTERED}"
172
+ @configuration.scopes_to_filter.any? do |scope_to_filter|
173
+ if scope.start_with?("#{scope_to_filter}.request.params.")
174
+ filters_match?(scope.sub("#{scope_to_filter}.request.params.", ''))
87
175
  else
88
- "#{key}=#{val}"
176
+ filters_match?(scope.sub("#{scope_to_filter}.", ''))
89
177
  end
90
178
  end
91
-
92
- uri.query = query_params.join('&')
93
- uri.to_s
94
179
  end
95
180
 
96
- private
97
-
98
- def filters_match?(key)
99
- str = key.to_s
100
-
101
- @filters.any? do |f|
102
- case f
103
- when Regexp
104
- str.match(f)
105
- else
106
- str.include?(f.to_s)
107
- end
181
+ ##
182
+ # Should the given scope be filtered?
183
+ #
184
+ # @param scope [String]
185
+ # @return [Boolean]
186
+ def scope_should_be_filtered?(scope)
187
+ @configuration.scopes_to_filter.any? do |scope_to_filter|
188
+ scope.start_with?("#{scope_to_filter}.")
108
189
  end
109
190
  end
110
-
111
- # If someone has a Rails filter like /^stuff\.secret/, it won't match "request.params.stuff.secret",
112
- # so we try it both with and without the "request.params." bit.
113
- def filters_match_deeply?(key, scope)
114
- return true if filters_match?(key)
115
- return false unless @deep_filters
116
-
117
- long = [scope, key].compact.join('.')
118
- short = long.sub(/^request\.params\./, '')
119
- filters_match?(long) || filters_match?(short)
120
- end
121
191
  end
122
192
  end