mirror of
https://github.com/discourse/discourse.git
synced 2025-02-18 02:42:46 +08:00
![Sam Saffron](/assets/img/avatar_default.png)
We have the `# frozen_string_literal: true` comment on all our files. This means all string literals are frozen. There is no need to call #freeze on any literals. For files with `# frozen_string_literal: true` ``` puts %w{a b}[0].frozen? => true puts "hi".frozen? => true puts "a #{1} b".frozen? => true puts ("a " + "b").frozen? => false puts (-("a " + "b")).frozen? => true ``` For more details see: https://samsaffron.com/archive/2018/02/16/reducing-string-duplication-in-ruby
27 lines
731 B
Ruby
27 lines
731 B
Ruby
# frozen_string_literal: true
|
|
|
|
class QuoteComparer
|
|
def self.whitespace
|
|
" \t\r\n"
|
|
end
|
|
|
|
def initialize(topic_id, post_number, text)
|
|
@topic_id = topic_id
|
|
@post_number = post_number
|
|
@text = text
|
|
@parent_post = Post.where(topic_id: @topic_id, post_number: @post_number).first
|
|
end
|
|
|
|
# This algorithm is far from perfect, but it follows the Discourse
|
|
# philosophy of "catch the obvious cases, leave moderation for the
|
|
# complicated ones"
|
|
def modified?
|
|
return true if @text.blank? || @parent_post.blank?
|
|
|
|
parent_text = Nokogiri::HTML::fragment(@parent_post.cooked).text.delete(QuoteComparer.whitespace)
|
|
text = @text.delete(QuoteComparer.whitespace)
|
|
|
|
!parent_text.include?(text)
|
|
end
|
|
end
|