Merge pull request #236 from glitch-soc/plaintext-mutes
Make keyword mutes operate on plain text inputmaster
commit
20b519f0fc
@ -0,0 +1,27 @@ |
||||
require 'html2text' |
||||
|
||||
class Glitch::KeywordMuteHelper |
||||
attr_reader :text_matcher |
||||
attr_reader :tag_matcher |
||||
|
||||
def initialize(receiver_id) |
||||
@text_matcher = Glitch::KeywordMute.text_matcher_for(receiver_id) |
||||
@tag_matcher = Glitch::KeywordMute.tag_matcher_for(receiver_id) |
||||
end |
||||
|
||||
def matches?(status) |
||||
matchers_match?(status) || (status.reblog? && matchers_match?(status.reblog)) |
||||
end |
||||
|
||||
private |
||||
|
||||
def matchers_match?(status) |
||||
text_matcher.matches?(prepare_text(status.text)) || |
||||
text_matcher.matches?(prepare_text(status.spoiler_text)) || |
||||
tag_matcher.matches?(status.tags) |
||||
end |
||||
|
||||
def prepare_text(text) |
||||
Html2Text.convert(text) |
||||
end |
||||
end |
@ -0,0 +1,50 @@ |
||||
require 'rails_helper' |
||||
|
||||
RSpec.describe Glitch::KeywordMuteHelper do |
||||
describe '#matches?' do |
||||
let(:alice) { Fabricate(:account, username: 'alice').tap(&:save!) } |
||||
let(:helper) { Glitch::KeywordMuteHelper.new(alice) } |
||||
|
||||
it 'ignores names of HTML tags in status text' do |
||||
status = Fabricate(:status, text: '<addr>uh example</addr>') |
||||
Glitch::KeywordMute.create!(account: alice, keyword: 'addr') |
||||
|
||||
expect(helper.matches?(status)).to be false |
||||
end |
||||
|
||||
it 'ignores properties of HTML tags in status text' do |
||||
status = Fabricate(:status, text: '<a href="https://www.example.org">uh example</a>') |
||||
Glitch::KeywordMute.create!(account: alice, keyword: 'href') |
||||
|
||||
expect(helper.matches?(status)).to be false |
||||
end |
||||
|
||||
it 'matches text inside HTML tags' do |
||||
status = Fabricate(:status, text: '<p>HEY THIS IS SOMETHING ANNOYING</p>') |
||||
Glitch::KeywordMute.create!(account: alice, keyword: 'annoying') |
||||
|
||||
expect(helper.matches?(status)).to be true |
||||
end |
||||
|
||||
it 'matches < in HTML-stripped text' do |
||||
status = Fabricate(:status, text: '<p>I <3 oats</p>') |
||||
Glitch::KeywordMute.create!(account: alice, keyword: '<3') |
||||
|
||||
expect(helper.matches?(status)).to be true |
||||
end |
||||
|
||||
it 'matches < in HTML text' do |
||||
status = Fabricate(:status, text: '<p>I <3 oats</p>') |
||||
Glitch::KeywordMute.create!(account: alice, keyword: '<3') |
||||
|
||||
expect(helper.matches?(status)).to be true |
||||
end |
||||
|
||||
it 'matches link hrefs in HTML text' do |
||||
status = Fabricate(:status, text: '<p><a href="https://example.com/it-was-milk">yep</a></p>') |
||||
Glitch::KeywordMute.create!(account: alice, keyword: 'milk') |
||||
|
||||
expect(helper.matches?(status)).to be true |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue