dmail filters: fix filters being case sensitive.
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
class DmailFilter < ApplicationRecord
|
class DmailFilter < ApplicationRecord
|
||||||
|
extend Memoist
|
||||||
|
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
validates_presence_of :user
|
validates_presence_of :user
|
||||||
before_validation :initialize_user
|
before_validation :initialize_user
|
||||||
@@ -18,6 +20,9 @@ class DmailFilter < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def regexp
|
def regexp
|
||||||
@regexp ||= /\b#{Regexp.union(words.split(/[[:space:]]+/))}\b/
|
union = words.split(/[[:space:]]+/).map { |word| Regexp.escape(word) }.join("|")
|
||||||
|
/\b#{union}\b/i
|
||||||
end
|
end
|
||||||
|
|
||||||
|
memoize :regexp
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -28,6 +28,11 @@ class DmailFilterTest < ActiveSupport::TestCase
|
|||||||
create_dmail("okay", "banned")
|
create_dmail("okay", "banned")
|
||||||
assert_equal(true, @receiver.dmails.last.is_read?)
|
assert_equal(true, @receiver.dmails.last.is_read?)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "be case insensitive" do
|
||||||
|
create_dmail("Banned.", "okay")
|
||||||
|
assert_equal(true, @receiver.dmails.last.is_read?)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "a dmail filter for a user name" do
|
context "a dmail filter for a user name" do
|
||||||
@@ -40,4 +45,13 @@ class DmailFilterTest < ActiveSupport::TestCase
|
|||||||
assert_equal(true, @receiver.dmails.last.is_read?)
|
assert_equal(true, @receiver.dmails.last.is_read?)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "a dmail filter containing multiple words" do
|
||||||
|
should "filter dmails containing any of the words" do
|
||||||
|
@receiver.create_dmail_filter(words: "foo bar spam")
|
||||||
|
create_dmail("this is a test (not *SPAM*)", "hello world")
|
||||||
|
|
||||||
|
assert_equal(true, @receiver.dmails.last.is_read?)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user