raygun4ruby 3.2.6 → 4.0.1

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 (232) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +48 -0
  3. data/.gitignore +22 -21
  4. data/.rspec +1 -1
  5. data/Appraisals +19 -0
  6. data/CHANGELOG.md +173 -133
  7. data/Gemfile +4 -4
  8. data/LICENSE.txt +22 -22
  9. data/README.md +430 -420
  10. data/Rakefile +32 -27
  11. data/examples/sinatras_raygun.rb +17 -17
  12. data/gemfiles/rails_6.gemfile +9 -0
  13. data/gemfiles/rails_7.gemfile +10 -0
  14. data/gemfiles/rails_7_sidekiq_6.gemfile +10 -0
  15. data/lib/generators/raygun/install_generator.rb +26 -26
  16. data/lib/raygun/affected_user.rb +59 -59
  17. data/lib/raygun/breadcrumbs/breadcrumb.rb +34 -34
  18. data/lib/raygun/breadcrumbs/store.rb +86 -86
  19. data/lib/raygun/breadcrumbs.rb +34 -34
  20. data/lib/raygun/client.rb +313 -308
  21. data/lib/raygun/configuration.rb +202 -194
  22. data/lib/raygun/demo_exception.rb +22 -22
  23. data/lib/raygun/error.rb +10 -10
  24. data/lib/raygun/error_subscriber.rb +25 -0
  25. data/lib/raygun/javascript_tracker.rb +42 -42
  26. data/lib/raygun/middleware/breadcrumbs_store_initializer.rb +19 -19
  27. data/lib/raygun/middleware/javascript_exception_tracking.rb +40 -32
  28. data/lib/raygun/middleware/rack_exception_interceptor.rb +18 -18
  29. data/lib/raygun/middleware/rails_insert_affected_user.rb +26 -26
  30. data/lib/raygun/railtie.rb +47 -39
  31. data/lib/raygun/services/apply_whitelist_filter_to_payload.rb +27 -27
  32. data/lib/raygun/sidekiq.rb +61 -71
  33. data/lib/raygun/version.rb +3 -3
  34. data/lib/raygun.rb +197 -179
  35. data/lib/raygun4ruby.rb +1 -1
  36. data/lib/resque/failure/raygun.rb +25 -25
  37. data/lib/tasks/raygun.tasks +7 -7
  38. data/raygun4ruby.gemspec +43 -45
  39. data/spec/features/javascript_spec.rb +48 -48
  40. data/spec/rails_applications/6.1.4/Gemfile +56 -0
  41. data/spec/{dummy/README.rdoc → rails_applications/6.1.4/README.md} +24 -28
  42. data/spec/{dummy → rails_applications/6.1.4}/Rakefile +6 -6
  43. data/spec/rails_applications/6.1.4/app/assets/config/manifest.js +2 -0
  44. data/spec/{dummy → rails_applications/6.1.4}/app/assets/images/.keep +0 -0
  45. data/spec/{dummy → rails_applications/6.1.4}/app/assets/stylesheets/application.css +15 -15
  46. data/spec/rails_applications/6.1.4/app/channels/application_cable/channel.rb +4 -0
  47. data/spec/rails_applications/6.1.4/app/channels/application_cable/connection.rb +4 -0
  48. data/spec/rails_applications/6.1.4/app/controllers/application_controller.rb +2 -0
  49. data/spec/{dummy → rails_applications/6.1.4}/app/controllers/concerns/.keep +0 -0
  50. data/spec/{dummy → rails_applications/6.1.4}/app/controllers/home_controller.rb +4 -4
  51. data/spec/{dummy → rails_applications/6.1.4}/app/helpers/application_helper.rb +2 -2
  52. data/spec/rails_applications/6.1.4/app/javascript/channels/consumer.js +6 -0
  53. data/spec/rails_applications/6.1.4/app/javascript/channels/index.js +5 -0
  54. data/spec/rails_applications/6.1.4/app/javascript/packs/application.js +13 -0
  55. data/spec/rails_applications/6.1.4/app/jobs/application_job.rb +7 -0
  56. data/spec/rails_applications/6.1.4/app/mailers/application_mailer.rb +4 -0
  57. data/spec/rails_applications/6.1.4/app/models/application_record.rb +3 -0
  58. data/spec/{dummy/app/mailers → rails_applications/6.1.4/app/models/concerns}/.keep +0 -0
  59. data/spec/{dummy → rails_applications/6.1.4}/app/views/home/index.html.erb +3 -3
  60. data/spec/{dummy → rails_applications/6.1.4}/app/views/home/index.json.erb +1 -1
  61. data/spec/rails_applications/6.1.4/app/views/layouts/application.html.erb +13 -0
  62. data/spec/rails_applications/6.1.4/app/views/layouts/mailer.html.erb +13 -0
  63. data/spec/rails_applications/6.1.4/app/views/layouts/mailer.text.erb +1 -0
  64. data/spec/rails_applications/6.1.4/bin/rails +5 -0
  65. data/spec/rails_applications/6.1.4/bin/rake +5 -0
  66. data/spec/rails_applications/6.1.4/bin/setup +36 -0
  67. data/spec/rails_applications/6.1.4/bin/spring +14 -0
  68. data/spec/rails_applications/6.1.4/bin/yarn +17 -0
  69. data/spec/rails_applications/6.1.4/config/application.rb +22 -0
  70. data/spec/rails_applications/6.1.4/config/boot.rb +3 -0
  71. data/spec/rails_applications/6.1.4/config/cable.yml +10 -0
  72. data/spec/rails_applications/6.1.4/config/credentials.yml.enc +1 -0
  73. data/spec/{dummy → rails_applications/6.1.4}/config/database.yml +25 -25
  74. data/spec/{dummy → rails_applications/6.1.4}/config/environment.rb +5 -5
  75. data/spec/rails_applications/6.1.4/config/environments/development.rb +76 -0
  76. data/spec/rails_applications/6.1.4/config/environments/production.rb +120 -0
  77. data/spec/rails_applications/6.1.4/config/environments/test.rb +60 -0
  78. data/spec/rails_applications/6.1.4/config/initializers/application_controller_renderer.rb +8 -0
  79. data/spec/rails_applications/6.1.4/config/initializers/assets.rb +14 -0
  80. data/spec/rails_applications/6.1.4/config/initializers/backtrace_silencers.rb +8 -0
  81. data/spec/rails_applications/6.1.4/config/initializers/content_security_policy.rb +30 -0
  82. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/cookies_serializer.rb +5 -3
  83. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/filter_parameter_logging.rb +6 -4
  84. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/inflections.rb +16 -16
  85. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/mime_types.rb +4 -4
  86. data/spec/rails_applications/6.1.4/config/initializers/permissions_policy.rb +11 -0
  87. data/spec/{dummy → rails_applications/6.1.4}/config/initializers/wrap_parameters.rb +14 -14
  88. data/spec/{dummy → rails_applications/6.1.4}/config/locales/en.yml +33 -23
  89. data/spec/rails_applications/6.1.4/config/master.key +1 -0
  90. data/spec/rails_applications/6.1.4/config/puma.rb +43 -0
  91. data/spec/rails_applications/6.1.4/config/routes.rb +4 -0
  92. data/spec/rails_applications/6.1.4/config/spring.rb +6 -0
  93. data/spec/rails_applications/6.1.4/config/storage.yml +34 -0
  94. data/spec/{dummy → rails_applications/6.1.4}/config.ru +6 -4
  95. data/spec/rails_applications/6.1.4/db/seeds.rb +7 -0
  96. data/spec/{dummy → rails_applications/6.1.4}/db/test.sqlite3 +0 -0
  97. data/spec/{dummy/app/models → rails_applications/6.1.4/lib/assets}/.keep +0 -0
  98. data/spec/{dummy/app/models/concerns → rails_applications/6.1.4/lib/tasks}/.keep +0 -0
  99. data/spec/rails_applications/6.1.4/package.json +11 -0
  100. data/spec/{dummy → rails_applications/6.1.4}/public/404.html +67 -67
  101. data/spec/{dummy → rails_applications/6.1.4}/public/422.html +67 -67
  102. data/spec/{dummy → rails_applications/6.1.4}/public/500.html +66 -66
  103. data/spec/{dummy/lib/assets/.keep → rails_applications/6.1.4/public/apple-touch-icon-precomposed.png} +0 -0
  104. data/spec/{dummy/lib/tasks/.keep → rails_applications/6.1.4/public/apple-touch-icon.png} +0 -0
  105. data/spec/{dummy → rails_applications/6.1.4}/public/favicon.ico +0 -0
  106. data/spec/rails_applications/6.1.4/public/robots.txt +1 -0
  107. data/spec/{dummy/log → rails_applications/6.1.4/storage}/.keep +0 -0
  108. data/spec/rails_applications/7.1.3/.dockerignore +37 -0
  109. data/spec/rails_applications/7.1.3/.gitattributes +9 -0
  110. data/spec/rails_applications/7.1.3/.gitignore +35 -0
  111. data/spec/rails_applications/7.1.3/.ruby-version +1 -0
  112. data/spec/rails_applications/7.1.3/Dockerfile +62 -0
  113. data/spec/rails_applications/7.1.3/Gemfile +67 -0
  114. data/spec/rails_applications/7.1.3/README.md +24 -0
  115. data/spec/rails_applications/7.1.3/Rakefile +6 -0
  116. data/spec/rails_applications/7.1.3/app/assets/config/manifest.js +4 -0
  117. data/spec/{dummy/test/controllers → rails_applications/7.1.3/app/assets/images}/.keep +0 -0
  118. data/spec/rails_applications/7.1.3/app/assets/stylesheets/application.css +15 -0
  119. data/spec/rails_applications/7.1.3/app/channels/application_cable/channel.rb +4 -0
  120. data/spec/rails_applications/7.1.3/app/channels/application_cable/connection.rb +4 -0
  121. data/spec/rails_applications/7.1.3/app/controllers/application_controller.rb +2 -0
  122. data/spec/{dummy/test/fixtures → rails_applications/7.1.3/app/controllers/concerns}/.keep +0 -0
  123. data/spec/rails_applications/7.1.3/app/controllers/home_controller.rb +2 -0
  124. data/spec/rails_applications/7.1.3/app/helpers/application_helper.rb +2 -0
  125. data/spec/rails_applications/7.1.3/app/helpers/home_helper.rb +2 -0
  126. data/spec/rails_applications/7.1.3/app/javascript/application.js +3 -0
  127. data/spec/rails_applications/7.1.3/app/javascript/controllers/application.js +9 -0
  128. data/spec/rails_applications/7.1.3/app/javascript/controllers/hello_controller.js +7 -0
  129. data/spec/rails_applications/7.1.3/app/javascript/controllers/index.js +11 -0
  130. data/spec/rails_applications/7.1.3/app/jobs/application_job.rb +7 -0
  131. data/spec/rails_applications/7.1.3/app/mailers/application_mailer.rb +4 -0
  132. data/spec/rails_applications/7.1.3/app/models/application_record.rb +3 -0
  133. data/spec/{dummy/test/helpers → rails_applications/7.1.3/app/models/concerns}/.keep +0 -0
  134. data/spec/rails_applications/7.1.3/app/views/home/index.html.erb +3 -0
  135. data/spec/rails_applications/7.1.3/app/views/home/index.json.erb +1 -0
  136. data/spec/rails_applications/7.1.3/app/views/layouts/application.html.erb +16 -0
  137. data/spec/rails_applications/7.1.3/app/views/layouts/mailer.html.erb +13 -0
  138. data/spec/rails_applications/7.1.3/app/views/layouts/mailer.text.erb +1 -0
  139. data/spec/rails_applications/7.1.3/bin/bundle +109 -0
  140. data/spec/rails_applications/7.1.3/bin/docker-entrypoint +8 -0
  141. data/spec/rails_applications/7.1.3/bin/importmap +4 -0
  142. data/spec/rails_applications/7.1.3/bin/rails +4 -0
  143. data/spec/rails_applications/7.1.3/bin/rake +4 -0
  144. data/spec/rails_applications/7.1.3/bin/setup +33 -0
  145. data/spec/rails_applications/7.1.3/config/application.rb +27 -0
  146. data/spec/rails_applications/7.1.3/config/boot.rb +4 -0
  147. data/spec/rails_applications/7.1.3/config/cable.yml +11 -0
  148. data/spec/rails_applications/7.1.3/config/credentials.yml.enc +1 -0
  149. data/spec/rails_applications/7.1.3/config/database.yml +25 -0
  150. data/spec/rails_applications/7.1.3/config/environment.rb +5 -0
  151. data/spec/rails_applications/7.1.3/config/environments/development.rb +76 -0
  152. data/spec/rails_applications/7.1.3/config/environments/production.rb +97 -0
  153. data/spec/rails_applications/7.1.3/config/environments/test.rb +64 -0
  154. data/spec/rails_applications/7.1.3/config/importmap.rb +7 -0
  155. data/spec/rails_applications/7.1.3/config/initializers/assets.rb +12 -0
  156. data/spec/rails_applications/7.1.3/config/initializers/content_security_policy.rb +25 -0
  157. data/spec/rails_applications/7.1.3/config/initializers/filter_parameter_logging.rb +8 -0
  158. data/spec/rails_applications/7.1.3/config/initializers/inflections.rb +16 -0
  159. data/spec/rails_applications/7.1.3/config/initializers/permissions_policy.rb +13 -0
  160. data/spec/rails_applications/7.1.3/config/locales/en.yml +31 -0
  161. data/spec/rails_applications/7.1.3/config/puma.rb +35 -0
  162. data/spec/rails_applications/7.1.3/config/routes.rb +11 -0
  163. data/spec/rails_applications/7.1.3/config/storage.yml +34 -0
  164. data/spec/rails_applications/7.1.3/config.ru +6 -0
  165. data/spec/rails_applications/7.1.3/db/seeds.rb +9 -0
  166. data/spec/{dummy/test/integration → rails_applications/7.1.3/lib/assets}/.keep +0 -0
  167. data/spec/{dummy/test/mailers → rails_applications/7.1.3/lib/tasks}/.keep +0 -0
  168. data/spec/rails_applications/7.1.3/public/404.html +67 -0
  169. data/spec/rails_applications/7.1.3/public/422.html +67 -0
  170. data/spec/rails_applications/7.1.3/public/500.html +66 -0
  171. data/spec/{dummy/test/models/.keep → rails_applications/7.1.3/public/apple-touch-icon-precomposed.png} +0 -0
  172. data/spec/{dummy/vendor/assets/javascripts/.keep → rails_applications/7.1.3/public/apple-touch-icon.png} +0 -0
  173. data/spec/{dummy/vendor/assets/stylesheets/.keep → rails_applications/7.1.3/public/favicon.ico} +0 -0
  174. data/spec/rails_applications/7.1.3/public/robots.txt +1 -0
  175. data/spec/rails_applications/7.1.3/storage/.keep +0 -0
  176. data/spec/rails_applications/7.1.3/test/application_system_test_case.rb +5 -0
  177. data/spec/rails_applications/7.1.3/test/channels/application_cable/connection_test.rb +13 -0
  178. data/spec/rails_applications/7.1.3/test/controllers/.keep +0 -0
  179. data/spec/rails_applications/7.1.3/test/controllers/home_controller_test.rb +7 -0
  180. data/spec/rails_applications/7.1.3/test/fixtures/files/.keep +0 -0
  181. data/spec/rails_applications/7.1.3/test/helpers/.keep +0 -0
  182. data/spec/rails_applications/7.1.3/test/integration/.keep +0 -0
  183. data/spec/rails_applications/7.1.3/test/mailers/.keep +0 -0
  184. data/spec/rails_applications/7.1.3/test/models/.keep +0 -0
  185. data/spec/rails_applications/7.1.3/test/system/.keep +0 -0
  186. data/spec/rails_applications/7.1.3/test/test_helper.rb +15 -0
  187. data/spec/rails_applications/7.1.3/vendor/.keep +0 -0
  188. data/spec/rails_applications/7.1.3/vendor/javascript/.keep +0 -0
  189. data/spec/rails_helper.rb +8 -4
  190. data/spec/raygun/breadcrumbs/breadcrumb_spec.rb +171 -171
  191. data/spec/raygun/breadcrumbs/store_spec.rb +170 -170
  192. data/spec/services/apply_whitelist_filter_to_payload_spec.rb +251 -251
  193. data/spec/spec_helper.rb +24 -24
  194. data/spec/support/fake_logger.rb +17 -17
  195. data/test/integration/client_test.rb +19 -19
  196. data/test/rails_helper.rb +6 -0
  197. data/test/test_helper.rb +76 -72
  198. data/test/unit/affected_user_test.rb +136 -136
  199. data/test/unit/client_test.rb +812 -812
  200. data/test/unit/configuration_test.rb +202 -206
  201. data/test/unit/error_subscriber_test.rb +43 -0
  202. data/test/unit/raygun_test.rb +106 -25
  203. data/test/unit/resque_failure_test.rb +27 -24
  204. data/test/unit/sidekiq_failure_test.rb +122 -32
  205. metadata +186 -125
  206. data/.travis.yml +0 -20
  207. data/spec/dummy/.gitignore +0 -17
  208. data/spec/dummy/Gemfile +0 -47
  209. data/spec/dummy/app/assets/config/manifest.js +0 -3
  210. data/spec/dummy/app/assets/javascripts/application.js +0 -13
  211. data/spec/dummy/app/controllers/application_controller.rb +0 -5
  212. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  213. data/spec/dummy/bin/bundle +0 -3
  214. data/spec/dummy/bin/rails +0 -9
  215. data/spec/dummy/bin/rake +0 -9
  216. data/spec/dummy/bin/setup +0 -29
  217. data/spec/dummy/bin/spring +0 -17
  218. data/spec/dummy/config/application.rb +0 -26
  219. data/spec/dummy/config/boot.rb +0 -3
  220. data/spec/dummy/config/environments/development.rb +0 -41
  221. data/spec/dummy/config/environments/production.rb +0 -79
  222. data/spec/dummy/config/environments/test.rb +0 -42
  223. data/spec/dummy/config/initializers/assets.rb +0 -11
  224. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  225. data/spec/dummy/config/initializers/session_store.rb +0 -3
  226. data/spec/dummy/config/initializers/to_time_preserves_timezone.rb +0 -10
  227. data/spec/dummy/config/routes.rb +0 -58
  228. data/spec/dummy/config/secrets.yml +0 -22
  229. data/spec/dummy/db/seeds.rb +0 -7
  230. data/spec/dummy/public/robots.txt +0 -5
  231. data/spec/dummy/test/test_helper.rb +0 -10
  232. data/spec/raygun/raygun_spec.rb +0 -47
@@ -1,171 +1,171 @@
1
- require "spec_helper"
2
-
3
- module Raygun
4
- module Breadcrumbs
5
- describe Breadcrumb do
6
- let(:subject) { Breadcrumb.new }
7
- context 'fields' do
8
- it 'has a message' do
9
- message = 'foo'
10
-
11
- subject.message = message
12
-
13
- expect(subject.message).to eq(message)
14
- end
15
-
16
- it 'has a category' do
17
- category = 'foo'
18
-
19
- subject.category = category
20
-
21
- expect(subject.category).to eq(category)
22
- end
23
-
24
- it 'has a level' do
25
- level = 'foo'
26
-
27
- subject.level = level
28
-
29
- expect(subject.level).to eq(level)
30
- end
31
-
32
- it 'has a timestamp' do
33
- timestamp = Time.now
34
-
35
- subject.timestamp = timestamp
36
-
37
- expect(subject.timestamp).to eq(timestamp)
38
- end
39
-
40
- it 'has metadata' do
41
- metadata = {foo: '1'}
42
-
43
- subject.metadata = metadata
44
-
45
- expect(subject.metadata).to eq(metadata)
46
- end
47
-
48
- it 'has a class_name' do
49
- class_name = 'foo'
50
-
51
- subject.class_name = class_name
52
-
53
- expect(subject.class_name).to eq(class_name)
54
- end
55
-
56
- it 'has a method_name' do
57
- method_name = 'foo'
58
-
59
- subject.method_name = method_name
60
-
61
- expect(subject.method_name).to eq(method_name)
62
- end
63
-
64
- it 'has a line_number' do
65
- line_number = 17
66
-
67
- subject.line_number = line_number
68
-
69
- expect(subject.line_number).to eq(line_number)
70
- end
71
- end
72
-
73
- describe "#build_payload" do
74
- before do
75
- Timecop.freeze
76
- Store.initialize
77
- end
78
- after do
79
- Timecop.return
80
- Store.clear
81
- end
82
-
83
- let(:breadcrumb) do
84
- Store.record(
85
- message: "test",
86
- category: "test",
87
- level: :info,
88
- class_name: "HomeController",
89
- method_name: "index",
90
- line_number: 17,
91
- metadata: {
92
- foo: 'bar'
93
- }
94
- )
95
-
96
- Store.stored[0]
97
- end
98
- let(:payload) { breadcrumb.build_payload }
99
-
100
- it "joins the class name, method name and line number together" do
101
- expect(payload[:location]).to eq("HomeController:index:17")
102
- end
103
-
104
- it "does not include the method name and line number if the class name is missing" do
105
- breadcrumb.class_name = nil
106
-
107
- expect(payload.has_key?(:location)).to eq(false)
108
- end
109
-
110
- it "does not inlcude the line number if is it missing" do
111
- breadcrumb.line_number = nil
112
-
113
- expect(payload[:location]).to eq("HomeController:index")
114
- end
115
-
116
- it "does not include keys in payload with nil values" do
117
- breadcrumb.metadata = nil
118
- breadcrumb.category = nil
119
-
120
- expect(payload.key?(:CustomData)).to eq(false)
121
- expect(payload.key?(:category)).to eq(false)
122
- end
123
-
124
- it 'includes the rest of the fields' do
125
- expect(payload[:message]).to eq('test')
126
- expect(payload[:category]).to eq('test')
127
- expect(payload[:level]).to eq(1)
128
- expect(payload[:timestamp]).to_not eq(nil)
129
- expect(payload[:CustomData]).to eq(foo: 'bar')
130
- end
131
- end
132
-
133
- describe "#size" do
134
- before do
135
- Timecop.freeze
136
- Store.initialize
137
- end
138
- after do
139
- Timecop.return
140
- Store.clear
141
- end
142
-
143
- let(:message) { "This is a breadcrumb message" }
144
-
145
- let(:breadcrumb) do
146
- Store.record(
147
- message: message,
148
- category: "test",
149
- level: :info,
150
- class_name: "HomeController",
151
- method_name: "index",
152
- line_number: 17,
153
- metadata: {
154
- foo: 'bar'
155
- }
156
- )
157
-
158
- Store.stored[0]
159
- end
160
-
161
- let(:size) { breadcrumb.size }
162
-
163
- it "returns the estimated size of the breadcrumb" do
164
- # Can't check all the fields but message so assume a standard 100 length for all of them
165
- # The message should be the bulk of large breadcrumbs anyway
166
- expect(size).to eq(message.length + 100)
167
- end
168
- end
169
- end
170
- end
171
- end
1
+ require "spec_helper"
2
+
3
+ module Raygun
4
+ module Breadcrumbs
5
+ describe Breadcrumb do
6
+ let(:subject) { Breadcrumb.new }
7
+ context 'fields' do
8
+ it 'has a message' do
9
+ message = 'foo'
10
+
11
+ subject.message = message
12
+
13
+ expect(subject.message).to eq(message)
14
+ end
15
+
16
+ it 'has a category' do
17
+ category = 'foo'
18
+
19
+ subject.category = category
20
+
21
+ expect(subject.category).to eq(category)
22
+ end
23
+
24
+ it 'has a level' do
25
+ level = 'foo'
26
+
27
+ subject.level = level
28
+
29
+ expect(subject.level).to eq(level)
30
+ end
31
+
32
+ it 'has a timestamp' do
33
+ timestamp = Time.now
34
+
35
+ subject.timestamp = timestamp
36
+
37
+ expect(subject.timestamp).to eq(timestamp)
38
+ end
39
+
40
+ it 'has metadata' do
41
+ metadata = {foo: '1'}
42
+
43
+ subject.metadata = metadata
44
+
45
+ expect(subject.metadata).to eq(metadata)
46
+ end
47
+
48
+ it 'has a class_name' do
49
+ class_name = 'foo'
50
+
51
+ subject.class_name = class_name
52
+
53
+ expect(subject.class_name).to eq(class_name)
54
+ end
55
+
56
+ it 'has a method_name' do
57
+ method_name = 'foo'
58
+
59
+ subject.method_name = method_name
60
+
61
+ expect(subject.method_name).to eq(method_name)
62
+ end
63
+
64
+ it 'has a line_number' do
65
+ line_number = 17
66
+
67
+ subject.line_number = line_number
68
+
69
+ expect(subject.line_number).to eq(line_number)
70
+ end
71
+ end
72
+
73
+ describe "#build_payload" do
74
+ before do
75
+ Timecop.freeze
76
+ Store.initialize
77
+ end
78
+ after do
79
+ Timecop.return
80
+ Store.clear
81
+ end
82
+
83
+ let(:breadcrumb) do
84
+ Store.record(
85
+ message: "test",
86
+ category: "test",
87
+ level: :info,
88
+ class_name: "HomeController",
89
+ method_name: "index",
90
+ line_number: 17,
91
+ metadata: {
92
+ foo: 'bar'
93
+ }
94
+ )
95
+
96
+ Store.stored[0]
97
+ end
98
+ let(:payload) { breadcrumb.build_payload }
99
+
100
+ it "joins the class name, method name and line number together" do
101
+ expect(payload[:location]).to eq("HomeController:index:17")
102
+ end
103
+
104
+ it "does not include the method name and line number if the class name is missing" do
105
+ breadcrumb.class_name = nil
106
+
107
+ expect(payload.has_key?(:location)).to eq(false)
108
+ end
109
+
110
+ it "does not inlcude the line number if is it missing" do
111
+ breadcrumb.line_number = nil
112
+
113
+ expect(payload[:location]).to eq("HomeController:index")
114
+ end
115
+
116
+ it "does not include keys in payload with nil values" do
117
+ breadcrumb.metadata = nil
118
+ breadcrumb.category = nil
119
+
120
+ expect(payload.key?(:CustomData)).to eq(false)
121
+ expect(payload.key?(:category)).to eq(false)
122
+ end
123
+
124
+ it 'includes the rest of the fields' do
125
+ expect(payload[:message]).to eq('test')
126
+ expect(payload[:category]).to eq('test')
127
+ expect(payload[:level]).to eq(1)
128
+ expect(payload[:timestamp]).to_not eq(nil)
129
+ expect(payload[:CustomData]).to eq(foo: 'bar')
130
+ end
131
+ end
132
+
133
+ describe "#size" do
134
+ before do
135
+ Timecop.freeze
136
+ Store.initialize
137
+ end
138
+ after do
139
+ Timecop.return
140
+ Store.clear
141
+ end
142
+
143
+ let(:message) { "This is a breadcrumb message" }
144
+
145
+ let(:breadcrumb) do
146
+ Store.record(
147
+ message: message,
148
+ category: "test",
149
+ level: :info,
150
+ class_name: "HomeController",
151
+ method_name: "index",
152
+ line_number: 17,
153
+ metadata: {
154
+ foo: 'bar'
155
+ }
156
+ )
157
+
158
+ Store.stored[0]
159
+ end
160
+
161
+ let(:size) { breadcrumb.size }
162
+
163
+ it "returns the estimated size of the breadcrumb" do
164
+ # Can't check all the fields but message so assume a standard 100 length for all of them
165
+ # The message should be the bulk of large breadcrumbs anyway
166
+ expect(size).to eq(message.length + 100)
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
@@ -1,170 +1,170 @@
1
- require "spec_helper"
2
-
3
- module Raygun
4
- module Breadcrumbs
5
- describe Store do
6
- let(:subject) { Store }
7
- after { subject.clear }
8
-
9
- describe "#initialize" do
10
- before do
11
- expect(subject.stored).to eq(nil)
12
-
13
- subject.initialize
14
- end
15
-
16
- it "creates the store on the current Thread" do
17
- expect(subject.stored).to eq([])
18
- end
19
-
20
- it "does not effect other threads" do
21
- Thread.new do
22
- expect(subject.stored).to eq(nil)
23
- end.join
24
- end
25
- end
26
-
27
- describe "#any?" do
28
- it "returns true if any breadcrumbs have been logged" do
29
- subject.initialize
30
-
31
- subject.record(message: "test")
32
-
33
- expect(subject.any?).to eq(true)
34
- end
35
-
36
- it "returns false if none have been logged" do
37
- subject.initialize
38
-
39
- expect(subject.any?).to eq(false)
40
- end
41
-
42
- it "returns false if the store is uninitialized" do
43
- expect(subject.any?).to eq(false)
44
- end
45
- end
46
-
47
- describe "#clear" do
48
- before do
49
- subject.initialize
50
- end
51
-
52
- it "resets the store back to nil" do
53
- subject.clear
54
-
55
- expect(subject.stored).to eq(nil)
56
- end
57
- end
58
-
59
- describe "#should_record?" do
60
- it "returns false when the log level is above the breadcrumbs level" do
61
- allow(Raygun.configuration).to receive(:breadcrumb_level).and_return(:error)
62
-
63
- crumb = Breadcrumb.new
64
- crumb.level = :warning
65
-
66
- expect(subject.send(:should_record?, crumb)).to eq(false)
67
- end
68
- end
69
-
70
- describe "#take_until_size" do
71
- before do
72
- subject.initialize
73
- end
74
-
75
- it "takes the most recent breadcrumbs until the size limit is reached" do
76
- subject.record(message: '1' * 100)
77
- subject.record(message: '2' * 100)
78
- subject.record(message: '3' * 100)
79
-
80
- crumbs = subject.take_until_size(500)
81
-
82
- expect(crumbs.length).to eq(2)
83
- expect(crumbs[0].message).to eq('2' * 100)
84
- expect(crumbs[1].message).to eq('3' * 100)
85
- end
86
-
87
- it "does not crash with no recorded breadcrumbs" do
88
- crumbs = subject.take_until_size(500)
89
-
90
- expect(crumbs).to eq([])
91
- end
92
- end
93
-
94
- context "adding a breadcrumb" do
95
- class Foo
96
- include ::Raygun::Breadcrumbs
97
-
98
- def bar
99
- record_breadcrumb(message: "test")
100
- end
101
- end
102
-
103
- before do
104
- subject.clear
105
- subject.initialize
106
- end
107
-
108
- it "gets stored" do
109
- subject.record(message: "test")
110
-
111
- expect(subject.stored.length).to eq(1)
112
- expect(subject.stored[0].message).to eq("test")
113
- end
114
-
115
- it "automatically sets the class name" do
116
- Foo.new.bar
117
-
118
- bc = subject.stored[0]
119
- expect(bc.class_name).to eq("Raygun::Breadcrumbs::Foo")
120
- end
121
-
122
- it "automatically sets the method name" do
123
- Foo.new.bar
124
-
125
- bc = subject.stored[0]
126
- expect(bc.method_name).to eq("bar")
127
- end
128
-
129
- it "does not set the method name if it is already set" do
130
- subject.record(message: 'test', method_name: "foo")
131
-
132
- expect(subject.stored[0].method_name).to eq("foo")
133
- end
134
-
135
-
136
- it "automatically sets the timestamp" do
137
- Timecop.freeze do
138
- Foo.new.bar
139
-
140
- bc = subject.stored[0]
141
- expect(bc.timestamp).to eq(Time.now.utc.to_i)
142
- end
143
- end
144
-
145
- it "does not set the timestamp if it is already set" do
146
- time = Time.now.utc
147
-
148
- Timecop.freeze do
149
- subject.record(message: 'test', timestamp: time)
150
-
151
- expect(subject.stored[0].timestamp).to_not eq(Time.now.utc)
152
- end
153
- end
154
-
155
- it "sets the log level to :info if one is not supplied" do
156
- Foo.new.bar
157
-
158
- expect(subject.stored[0].level).to eq(:info)
159
- end
160
-
161
- it "does not record the breadcrumb if should_record? is false" do
162
- expect(subject).to receive(:should_record?).and_return(false)
163
- Foo.new.bar
164
-
165
- expect(subject.stored.length).to eq(0)
166
- end
167
- end
168
- end
169
- end
170
- end
1
+ require "spec_helper"
2
+
3
+ module Raygun
4
+ module Breadcrumbs
5
+ describe Store do
6
+ let(:subject) { Store }
7
+ after { subject.clear }
8
+
9
+ describe "#initialize" do
10
+ before do
11
+ expect(subject.stored).to eq(nil)
12
+
13
+ subject.initialize
14
+ end
15
+
16
+ it "creates the store on the current Thread" do
17
+ expect(subject.stored).to eq([])
18
+ end
19
+
20
+ it "does not effect other threads" do
21
+ Thread.new do
22
+ expect(subject.stored).to eq(nil)
23
+ end.join
24
+ end
25
+ end
26
+
27
+ describe "#any?" do
28
+ it "returns true if any breadcrumbs have been logged" do
29
+ subject.initialize
30
+
31
+ subject.record(message: "test")
32
+
33
+ expect(subject.any?).to eq(true)
34
+ end
35
+
36
+ it "returns false if none have been logged" do
37
+ subject.initialize
38
+
39
+ expect(subject.any?).to eq(false)
40
+ end
41
+
42
+ it "returns false if the store is uninitialized" do
43
+ expect(subject.any?).to eq(false)
44
+ end
45
+ end
46
+
47
+ describe "#clear" do
48
+ before do
49
+ subject.initialize
50
+ end
51
+
52
+ it "resets the store back to nil" do
53
+ subject.clear
54
+
55
+ expect(subject.stored).to eq(nil)
56
+ end
57
+ end
58
+
59
+ describe "#should_record?" do
60
+ it "returns false when the log level is above the breadcrumbs level" do
61
+ allow(Raygun.configuration).to receive(:breadcrumb_level).and_return(:error)
62
+
63
+ crumb = Breadcrumb.new
64
+ crumb.level = :warning
65
+
66
+ expect(subject.send(:should_record?, crumb)).to eq(false)
67
+ end
68
+ end
69
+
70
+ describe "#take_until_size" do
71
+ before do
72
+ subject.initialize
73
+ end
74
+
75
+ it "takes the most recent breadcrumbs until the size limit is reached" do
76
+ subject.record(message: '1' * 100)
77
+ subject.record(message: '2' * 100)
78
+ subject.record(message: '3' * 100)
79
+
80
+ crumbs = subject.take_until_size(500)
81
+
82
+ expect(crumbs.length).to eq(2)
83
+ expect(crumbs[0].message).to eq('2' * 100)
84
+ expect(crumbs[1].message).to eq('3' * 100)
85
+ end
86
+
87
+ it "does not crash with no recorded breadcrumbs" do
88
+ crumbs = subject.take_until_size(500)
89
+
90
+ expect(crumbs).to eq([])
91
+ end
92
+ end
93
+
94
+ context "adding a breadcrumb" do
95
+ class Foo
96
+ include ::Raygun::Breadcrumbs
97
+
98
+ def bar
99
+ record_breadcrumb(message: "test")
100
+ end
101
+ end
102
+
103
+ before do
104
+ subject.clear
105
+ subject.initialize
106
+ end
107
+
108
+ it "gets stored" do
109
+ subject.record(message: "test")
110
+
111
+ expect(subject.stored.length).to eq(1)
112
+ expect(subject.stored[0].message).to eq("test")
113
+ end
114
+
115
+ it "automatically sets the class name" do
116
+ Foo.new.bar
117
+
118
+ bc = subject.stored[0]
119
+ expect(bc.class_name).to eq("Raygun::Breadcrumbs::Foo")
120
+ end
121
+
122
+ it "automatically sets the method name" do
123
+ Foo.new.bar
124
+
125
+ bc = subject.stored[0]
126
+ expect(bc.method_name).to eq("bar")
127
+ end
128
+
129
+ it "does not set the method name if it is already set" do
130
+ subject.record(message: 'test', method_name: "foo")
131
+
132
+ expect(subject.stored[0].method_name).to eq("foo")
133
+ end
134
+
135
+
136
+ it "automatically sets the timestamp" do
137
+ Timecop.freeze do
138
+ Foo.new.bar
139
+
140
+ bc = subject.stored[0]
141
+ expect(bc.timestamp).to eq(Time.now.utc.to_i)
142
+ end
143
+ end
144
+
145
+ it "does not set the timestamp if it is already set" do
146
+ time = Time.now.utc
147
+
148
+ Timecop.freeze do
149
+ subject.record(message: 'test', timestamp: time)
150
+
151
+ expect(subject.stored[0].timestamp).to_not eq(Time.now.utc)
152
+ end
153
+ end
154
+
155
+ it "sets the log level to :info if one is not supplied" do
156
+ Foo.new.bar
157
+
158
+ expect(subject.stored[0].level).to eq(:info)
159
+ end
160
+
161
+ it "does not record the breadcrumb if should_record? is false" do
162
+ expect(subject).to receive(:should_record?).and_return(false)
163
+ Foo.new.bar
164
+
165
+ expect(subject.stored.length).to eq(0)
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end