aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/censor_rule.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/censor_rule.rb')
-rw-r--r--app/models/censor_rule.rb75
1 files changed, 40 insertions, 35 deletions
diff --git a/app/models/censor_rule.rb b/app/models/censor_rule.rb
index 3c5c77563..3b5c2d805 100644
--- a/app/models/censor_rule.rb
+++ b/app/models/censor_rule.rb
@@ -26,18 +26,46 @@ class CensorRule < ActiveRecord::Base
belongs_to :user
belongs_to :public_body
- # a flag to allow the require_user_request_or_public_body validation to be skipped
+ # a flag to allow the require_user_request_or_public_body
+ # validation to be skipped
attr_accessor :allow_global
- validate :require_user_request_or_public_body, :unless => proc{ |rule| rule.allow_global == true }
- validate :require_valid_regexp, :if => proc{ |rule| rule.regexp? == true }
- validates_presence_of :text
- scope :global, {:conditions => {:info_request_id => nil,
- :user_id => nil,
- :public_body_id => nil}}
+ validate :require_user_request_or_public_body, :unless => proc { |rule| rule.allow_global == true }
+ validate :require_valid_regexp, :if => proc { |rule| rule.regexp? == true }
+
+ validates_presence_of :text,
+ :replacement,
+ :last_edit_comment,
+ :last_edit_editor
+
+ scope :global, { :conditions => { :info_request_id => nil,
+ :user_id => nil,
+ :public_body_id => nil } }
+
+ def apply_to_text!(text_to_censor)
+ return nil if text_to_censor.nil?
+ text_to_censor.gsub!(to_replace, 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') }
+ end
+
+ def for_admin_column
+ self.class.content_columns.each do |column|
+ yield(column.human_name, send(column.name), column.type.to_s, column.name)
+ end
+ end
+
+ def is_global?
+ info_request_id.nil? && user_id.nil? && public_body_id.nil?
+ end
+
+ private
def require_user_request_or_public_body
- if self.info_request.nil? && self.user.nil? && self.public_body.nil?
+ if info_request.nil? && user.nil? && public_body.nil?
[:info_request, :user, :public_body].each do |a|
errors.add(a, "Rule must apply to an info request, a user or a body")
end
@@ -46,41 +74,18 @@ class CensorRule < ActiveRecord::Base
def require_valid_regexp
begin
- self.make_regexp()
+ make_regexp
rescue RegexpError => e
errors.add(:text, e.message)
end
end
def make_regexp
- return Regexp.new(self.text, Regexp::MULTILINE)
- end
-
- def apply_to_text!(text)
- if text.nil?
- return nil
- end
- to_replace = regexp? ? self.make_regexp() : self.text
- text.gsub!(to_replace, self.replacement)
- end
-
- def apply_to_binary!(binary)
- if binary.nil?
- return nil
- end
- to_replace = regexp? ? self.make_regexp() : self.text
- binary.gsub!(to_replace){ |match| match.gsub(/./, 'x') }
+ Regexp.new(text, Regexp::MULTILINE)
end
- def for_admin_column
- self.class.content_columns.each do |column|
- yield(column.human_name, self.send(column.name), column.type.to_s, column.name)
- end
- end
-
- def is_global?
- return true if (info_request_id.nil? && user_id.nil? && public_body_id.nil?)
- return false
+ def to_replace
+ regexp? ? make_regexp : text
end
end