Commit 0b03ddfc8bd2a19d928404ccd88f171598dbfea3
Exists in
master
Merge pull request #1004 from stevecrozz/1001_truncate_long_notice_messages
Refs #1001 truncate long messages on cache
Showing
4 changed files
with
41 additions
and
6 deletions
Show diff stats
app/models/notice.rb
| 1 | 1 | require 'recurse' |
| 2 | 2 | |
| 3 | 3 | class Notice |
| 4 | + MESSAGE_LENGTH_LIMIT = 1000 | |
| 5 | + | |
| 4 | 6 | include Mongoid::Document |
| 5 | 7 | include Mongoid::Timestamps |
| 6 | 8 | |
| ... | ... | @@ -32,6 +34,12 @@ class Notice |
| 32 | 34 | where(:err_id.in => errs.all.map(&:id)) |
| 33 | 35 | } |
| 34 | 36 | |
| 37 | + # Overwrite the default setter to make sure the message length is no longer | |
| 38 | + # than the limit we impose | |
| 39 | + def message=(m) | |
| 40 | + super(m.is_a?(String) ? m[0, MESSAGE_LENGTH_LIMIT] : m) | |
| 41 | + end | |
| 42 | + | |
| 35 | 43 | def user_agent |
| 36 | 44 | agent_string = env_vars['HTTP_USER_AGENT'] |
| 37 | 45 | agent_string.blank? ? nil : UserAgent.parse(agent_string) | ... | ... |
app/models/problem.rb
| ... | ... | @@ -55,7 +55,6 @@ class Problem |
| 55 | 55 | validates :last_notice_at, :first_notice_at, presence: true |
| 56 | 56 | |
| 57 | 57 | before_create :cache_app_attributes |
| 58 | - before_save :truncate_message | |
| 59 | 58 | |
| 60 | 59 | scope :resolved, -> { where(resolved: true) } |
| 61 | 60 | scope :unresolved, -> { where(resolved: false) } |
| ... | ... | @@ -223,10 +222,6 @@ class Problem |
| 223 | 222 | self.app_name = app.name if app |
| 224 | 223 | end |
| 225 | 224 | |
| 226 | - def truncate_message | |
| 227 | - self.message = message[0, 1000] if message | |
| 228 | - end | |
| 229 | - | |
| 230 | 225 | def issue_type |
| 231 | 226 | # Return issue_type if configured, but fall back to detecting app's issue tracker |
| 232 | 227 | attributes['issue_type'] ||= | ... | ... |
spec/models/notice_spec.rb
| ... | ... | @@ -19,6 +19,38 @@ describe Notice, type: 'model' do |
| 19 | 19 | end |
| 20 | 20 | end |
| 21 | 21 | |
| 22 | + describe '#message=' do | |
| 23 | + let(:long_message) do | |
| 24 | + 'Presently I heard a slight groan, and I knew it was the groan of ' \ | |
| 25 | + 'mortal terror. It was not a groan of pain or of grief --oh, no! ' \ | |
| 26 | + '--it was the low stifled sound that arises from the bottom of the ' \ | |
| 27 | + 'soul when overcharged with awe. I knew the sound well. Many a ' \ | |
| 28 | + 'night, just at midnight, when all the world slept, it has welled ' \ | |
| 29 | + 'up from my own bosom, deepening, with its dreadful echo, the ' \ | |
| 30 | + 'terrors that distracted me. I say I knew it well. I knew what the ' \ | |
| 31 | + 'old man felt, and pitied him, although I chuckled at heart. I ' \ | |
| 32 | + 'knew that he had been lying awake ever since the first slight ' \ | |
| 33 | + 'noise, when he had turned in the bed. His fears had been ever ' \ | |
| 34 | + 'since growing upon him. He had been trying to fancy them ' \ | |
| 35 | + 'causeless, but could not. He had been saying to himself --"It is ' \ | |
| 36 | + 'nothing but the wind in the chimney --it is only a mouse crossing ' \ | |
| 37 | + 'the floor," or "It is merely a cricket which has made a single ' \ | |
| 38 | + 'chirp." Yes, he had been trying to comfort himself with these ' \ | |
| 39 | + 'suppositions: but he had found all in vain. All in vain; because ' \ | |
| 40 | + 'Death, in approaching him had stalked with his black shadow ' \ | |
| 41 | + 'before him, and enveloped the victim. And it was the mournful ' \ | |
| 42 | + 'influence of the unperceived shadow that caused him to feel ' \ | |
| 43 | + '--although he neither saw nor heard --to feel the presence of my ' \ | |
| 44 | + 'head within the room. ' | |
| 45 | + end | |
| 46 | + | |
| 47 | + it 'truncates the message' do | |
| 48 | + notice = Fabricate(:notice, message: long_message) | |
| 49 | + expect(long_message.length).to be > 1000 | |
| 50 | + expect(notice.message.length).to eq 1000 | |
| 51 | + end | |
| 52 | + end | |
| 53 | + | |
| 22 | 54 | describe "key sanitization" do |
| 23 | 55 | before do |
| 24 | 56 | @hash = { "some.key" => { "$nested.key" => { "$Path" => "/", "some$key" => "key" } } } | ... | ... |
spec/models/user_spec.rb
| ... | ... | @@ -42,7 +42,7 @@ describe User do |
| 42 | 42 | expect(user.reset_password('Password123', 'Password123')).to be_truthy |
| 43 | 43 | end |
| 44 | 44 | |
| 45 | - it 'should require a password with minimum of 6 characters' do | |
| 45 | + it 'should require a password with minimum of 6 characters' do | |
| 46 | 46 | user = Fabricate.build(:user) |
| 47 | 47 | user.reset_password('12345', '12345') |
| 48 | 48 | expect(user.errors[:password]).to include("is too short (minimum is 6 characters)", "is too short (minimum is 6 characters)") | ... | ... |