diff options
Diffstat (limited to 'app/models/censor_rule.rb')
| -rw-r--r-- | app/models/censor_rule.rb | 28 | 
1 files changed, 20 insertions, 8 deletions
diff --git a/app/models/censor_rule.rb b/app/models/censor_rule.rb index f1f1a0d70..aec8a87cc 100644 --- a/app/models/censor_rule.rb +++ b/app/models/censor_rule.rb @@ -46,17 +46,17 @@ class CensorRule < ActiveRecord::Base      def apply_to_text(text_to_censor)          return nil if text_to_censor.nil? -        text_to_censor.gsub(to_replace, replacement) +        text_to_censor.gsub(to_replace('UTF-8'), replacement)      end      def apply_to_text!(text_to_censor)          return nil if text_to_censor.nil? -        text_to_censor.gsub!(to_replace, replacement) +        text_to_censor.gsub!(to_replace('UTF-8'), replacement)      end      def apply_to_binary!(binary_to_censor)          return nil if binary_to_censor.nil? -        binary_to_censor.gsub!(to_replace) { |match| match.gsub(/./, 'x') } +        binary_to_censor.gsub!(to_replace('ASCII-8BIT')) { |match| match.gsub(single_char_regexp, 'x') }      end      def is_global? @@ -65,6 +65,14 @@ class CensorRule < ActiveRecord::Base      private +    def single_char_regexp +        if String.method_defined?(:encode) +            Regexp.new('.'.force_encoding('ASCII-8BIT')) +        else +            Regexp.new('.', nil, 'N') +        end +    end +      def require_user_request_or_public_body          if info_request.nil? && user.nil? && public_body.nil?              [:info_request, :user, :public_body].each do |a| @@ -75,18 +83,22 @@ class CensorRule < ActiveRecord::Base      def require_valid_regexp          begin -            make_regexp +            make_regexp('UTF-8')          rescue RegexpError => e              errors.add(:text, e.message)          end      end -    def make_regexp -        Regexp.new(text, Regexp::MULTILINE) +    def to_replace(encoding) +        regexp? ? make_regexp(encoding) : encoded_text(encoding) +    end + +    def encoded_text(encoding) +        String.method_defined?(:encode) ? text.dup.force_encoding(encoding) : text      end -    def to_replace -        regexp? ? make_regexp : text +    def make_regexp(encoding) +        Regexp.new(encoded_text(encoding), Regexp::MULTILINE)      end  end  | 
