bullet 6.1.3 → 6.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b574ae38dafed75dc9aded2d6c97ab057593fcda5a49ec4875bc327f99625efd
4
- data.tar.gz: df882c895e98b91a26371b670ffd439a2a39e80df57ce1b61a87de6e89c10c1a
3
+ metadata.gz: 74ea4e863bfe254dde17af73253ffe7041cd2b2dabee2dad05d1eccb6904f229
4
+ data.tar.gz: 284dcd1a516922384bdaf1b3dd9e6a5e6776c213c3ecbc9ca41b223c5b92d36b
5
5
  SHA512:
6
- metadata.gz: 475691616eca228e0938effbc8a9a8930d8ab33f673d4cb2a75ff02b2933ba01ee2a570fff1d9d669700fb05cf09dff9149555f1f2b35c4a31c8904620db70e3
7
- data.tar.gz: 86f37317790084aa7ca3860c1757a41354678a1a0bfbf56fe6f21ebe6793eef5ff257fe75bbad77b999484a9e1abb527d9e9ac877dda04cf9f1236e110e6d561
6
+ metadata.gz: 26c43bfdac9582f059d067d4f56d4d85ed28416654ff5fd4686bf9977cbfbc8d92f887079954662e904fbe3d1b861d02482ac2fefac30a859fbdad8c3833e225
7
+ data.tar.gz: 48decfa9d28b9936f5c1f39c669b6e8061fae649f9036c29d4b28138083a43db8739f3b73bb9c390e9f6baea62aa1f66f79e8ced69cf13e789b8f116c101f25f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Next Release
2
2
 
3
+ ## 6.1.4 (02/26/2021)
4
+
5
+ * Added an option to stop adding HTTP headers to API requests
6
+
3
7
  ## 6.1.3 (01/21/2021)
4
8
 
5
9
  * Consider ThroughAssociation at SingularAssociation like CollectionAssociation
data/README.md CHANGED
@@ -93,7 +93,8 @@ The code above will enable all of the Bullet notification systems:
93
93
  * `Bullet.rollbar`: add notifications to rollbar
94
94
  * `Bullet.sentry`: add notifications to sentry
95
95
  * `Bullet.add_footer`: adds the details in the bottom left corner of the page. Double click the footer or use close button to hide footer.
96
- * `Bullet.skip_html_injection`: prevents Bullet from injecting XHR into the returned HTML. This must be false for receiving alerts or console logging.
96
+ * `Bullet.skip_html_injection`: prevents Bullet from injecting code into the returned HTML. This must be false for receiving alerts, showing the footer or console logging.
97
+ * `Bullet.skip_http_headers`: don't add headers to API requests, and remove the javascript that relies on them. Note that this prevents bullet from logging warnings to the browser console or updating the footer.
97
98
  * `Bullet.stacktrace_includes`: include paths with any of these substrings in the stack trace, even if they are not in your main app
98
99
  * `Bullet.stacktrace_excludes`: ignore paths with any of these substrings in the stack trace, even if they are not in your main app.
99
100
  Each item can be a string (match substring), a regex, or an array where the first item is a path to match, and the second
data/lib/bullet.rb CHANGED
@@ -39,7 +39,7 @@ module Bullet
39
39
  :stacktrace_excludes,
40
40
  :skip_html_injection
41
41
  attr_reader :whitelist
42
- attr_accessor :add_footer, :orm_patches_applied
42
+ attr_accessor :add_footer, :orm_patches_applied, :skip_http_headers
43
43
 
44
44
  available_notifiers = UniformNotifier::AVAILABLE_NOTIFIERS.select { |notifier| notifier != :raise }.map { |notifier| "#{notifier}=" }
45
45
  available_notifiers_options = { to: UniformNotifier }
@@ -73,7 +73,7 @@ module Bullet
73
73
  end
74
74
 
75
75
  def app_root
76
- (defined?(::Rails.root) ? Rails.root.to_s : Dir.pwd).to_s
76
+ @app_root ||= (defined?(::Rails.root) ? Rails.root.to_s : Dir.pwd).to_s
77
77
  end
78
78
 
79
79
  def n_plus_one_query_enable?
data/lib/bullet/rack.rb CHANGED
@@ -22,9 +22,9 @@ module Bullet
22
22
  response_body = response_body(response)
23
23
  response_body = append_to_html_body(response_body, footer_note) if Bullet.add_footer
24
24
  response_body = append_to_html_body(response_body, Bullet.gather_inline_notifications)
25
- response_body = append_to_html_body(response_body, xhr_script) if Bullet.add_footer
25
+ response_body = append_to_html_body(response_body, xhr_script) if Bullet.add_footer && !Bullet.skip_http_headers
26
26
  headers['Content-Length'] = response_body.bytesize.to_s
27
- else
27
+ elsif !Bullet.skip_http_headers
28
28
  set_header(headers, 'X-bullet-footer-text', Bullet.footer_info.uniq) if Bullet.add_footer
29
29
  set_header(headers, 'X-bullet-console-text', Bullet.text_notifications) if Bullet.console_enabled?
30
30
  end
@@ -3,6 +3,7 @@
3
3
  module Bullet
4
4
  module StackTraceFilter
5
5
  VENDOR_PATH = '/vendor'
6
+ IS_RUBY_19 = Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
6
7
 
7
8
  def caller_in_project
8
9
  vendor_root = Bullet.app_root + VENDOR_PATH
@@ -47,19 +48,15 @@ module Bullet
47
48
  end
48
49
 
49
50
  def location_as_path(location)
50
- ruby_19? ? location : location.absolute_path.to_s
51
+ IS_RUBY_19 ? location : location.absolute_path.to_s
51
52
  end
52
53
 
53
54
  def select_caller_locations
54
- if ruby_19?
55
+ if IS_RUBY_19
55
56
  caller.select { |caller_path| yield caller_path }
56
57
  else
57
58
  caller_locations.select { |location| yield location }
58
59
  end
59
60
  end
60
-
61
- def ruby_19?
62
- @ruby_19 ||= Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
63
- end
64
61
  end
65
62
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bullet
4
- VERSION = '6.1.3'
4
+ VERSION = '6.1.4'
5
5
  end
@@ -90,7 +90,7 @@ module Bullet
90
90
  before do
91
91
  expect(Bullet).to receive(:notification?).and_return(true)
92
92
  allow(Bullet).to receive(:gather_inline_notifications).and_return('<bullet></bullet>')
93
- allow(middleware).to receive(:xhr_script).and_return('')
93
+ allow(middleware).to receive(:xhr_script).and_return('<script></script>')
94
94
  allow(middleware).to receive(:footer_note).and_return('footer')
95
95
  expect(Bullet).to receive(:perform_out_of_channel_notifications)
96
96
  end
@@ -99,9 +99,8 @@ module Bullet
99
99
  expect(Bullet).to receive(:add_footer).exactly(3).times.and_return(true)
100
100
  _, headers, response = middleware.call('Content-Type' => 'text/html')
101
101
 
102
- expect(headers['Content-Length']).to eq((56 + middleware.send(:footer_note).length).to_s)
103
- expect(response.first).to start_with('<html><head></head><body>')
104
- expect(response.first).to include('<bullet></bullet><')
102
+ expect(headers['Content-Length']).to eq((73 + middleware.send(:footer_note).length).to_s)
103
+ expect(response).to eq(%w[<html><head></head><body>footer<bullet></bullet><script></script></body></html>])
105
104
  end
106
105
 
107
106
  it 'should change response body for html safe string if add_footer is true' do
@@ -111,9 +110,16 @@ module Bullet
111
110
  end
112
111
  _, headers, response = middleware.call('Content-Type' => 'text/html')
113
112
 
114
- expect(headers['Content-Length']).to eq((56 + middleware.send(:footer_note).length).to_s)
115
- expect(response.first).to start_with('<html><head></head><body>')
116
- expect(response.first).to include('<bullet></bullet><')
113
+ expect(headers['Content-Length']).to eq((73 + middleware.send(:footer_note).length).to_s)
114
+ expect(response).to eq(%w[<html><head></head><body>footer<bullet></bullet><script></script></body></html>])
115
+ end
116
+
117
+ it 'should add the footer-text header for non-html requests when add_footer is true' do
118
+ allow(Bullet).to receive(:add_footer).at_least(:once).and_return(true)
119
+ allow(Bullet).to receive(:footer_info).and_return(['footer text'])
120
+ app.headers = {'Content-Type' => 'application/json'}
121
+ _, headers, _response = middleware.call({})
122
+ expect(headers).to include('X-bullet-footer-text' => '["footer text"]')
117
123
  end
118
124
 
119
125
  it 'should change response body if console_enabled is true' do
@@ -133,12 +139,62 @@ module Bullet
133
139
  expect(response).to eq(%w[<html><head></head><body><bullet></bullet></body></html>])
134
140
  end
135
141
 
142
+ it 'should add headers for non-html requests when console_enabled is true' do
143
+ allow(Bullet).to receive(:console_enabled?).at_least(:once).and_return(true)
144
+ allow(Bullet).to receive(:text_notifications).and_return(['text notifications'])
145
+ app.headers = {'Content-Type' => 'application/json'}
146
+ _, headers, _response = middleware.call({})
147
+ expect(headers).to include('X-bullet-console-text' => '["text notifications"]')
148
+ end
149
+
136
150
  it "shouldn't change response body unnecessarily" do
137
151
  expected_response = Support::ResponseDouble.new 'Actual body'
138
152
  app.response = expected_response
139
153
  _, _, response = middleware.call({})
140
154
  expect(response).to eq(expected_response)
141
155
  end
156
+
157
+ it "shouldn't add headers unnecessarily" do
158
+ app.headers = {'Content-Type' => 'application/json'}
159
+ _, headers, _response = middleware.call({})
160
+ expect(headers).not_to include('X-bullet-footer-text')
161
+ expect(headers).not_to include('X-bullet-console-text')
162
+ end
163
+
164
+ context "when skip_http_headers is enabled" do
165
+ before do
166
+ allow(Bullet).to receive(:skip_http_headers).and_return(true)
167
+ end
168
+
169
+ it 'should include the footer but not the xhr script tag if add_footer is true' do
170
+ expect(Bullet).to receive(:add_footer).at_least(:once).and_return(true)
171
+ _, headers, response = middleware.call({})
172
+
173
+ expect(headers['Content-Length']).to eq((56 + middleware.send(:footer_note).length).to_s)
174
+ expect(response).to eq(%w[<html><head></head><body>footer<bullet></bullet></body></html>])
175
+ end
176
+
177
+ it 'should not include the xhr script tag if console_enabled is true' do
178
+ expect(Bullet).to receive(:console_enabled?).and_return(true)
179
+ _, headers, response = middleware.call({})
180
+ expect(headers['Content-Length']).to eq('56')
181
+ expect(response).to eq(%w[<html><head></head><body><bullet></bullet></body></html>])
182
+ end
183
+
184
+ it 'should not add the footer-text header for non-html requests when add_footer is true' do
185
+ allow(Bullet).to receive(:add_footer).at_least(:once).and_return(true)
186
+ app.headers = {'Content-Type' => 'application/json'}
187
+ _, headers, _response = middleware.call({})
188
+ expect(headers).not_to include('X-bullet-footer-text')
189
+ end
190
+
191
+ it 'should not add headers for non-html requests when console_enabled is true' do
192
+ allow(Bullet).to receive(:console_enabled?).at_least(:once).and_return(true)
193
+ app.headers = {'Content-Type' => 'application/json'}
194
+ _, headers, _response = middleware.call({})
195
+ expect(headers).not_to include('X-bullet-console-text')
196
+ end
197
+ end
142
198
  end
143
199
 
144
200
  context 'when skip_html_injection is enabled' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.3
4
+ version: 6.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-20 00:00:00.000000000 Z
11
+ date: 2021-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport