diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/incoming_message.rb | 1 | ||||
-rw-r--r-- | app/models/info_request.rb | 16 | ||||
-rw-r--r-- | app/models/outgoing_message.rb | 5 | ||||
-rw-r--r-- | app/models/public_body.rb | 7 | ||||
-rw-r--r-- | app/models/purge_request.rb | 41 | ||||
-rw-r--r-- | app/models/track_thing.rb | 4 | ||||
-rw-r--r-- | app/models/user.rb | 7 |
7 files changed, 75 insertions, 6 deletions
diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb index cbbcf5aa6..2896de68a 100644 --- a/app/models/incoming_message.rb +++ b/app/models/incoming_message.rb @@ -816,7 +816,6 @@ class IncomingMessage < ActiveRecord::Base :filename => _get_part_file_name(leaf), :charset => leaf.charset, :within_rfc822_subject => within_rfc822_subject, - :display_size => "0K", :body => body) attachment.save! attachments << attachment.id diff --git a/app/models/info_request.rb b/app/models/info_request.rb index b5a1cd833..78121f5ea 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -23,6 +23,9 @@ require 'digest/sha1' class InfoRequest < ActiveRecord::Base + include ActionView::Helpers::UrlHelper + include ActionController::UrlWriter + strip_attributes! validates_presence_of :title, :message => N_("Please enter a summary of your request") @@ -453,7 +456,6 @@ public # An annotation (comment) is made def add_comment(body, user) comment = Comment.new - ActiveRecord::Base.transaction do comment.body = body comment.user = user @@ -1042,6 +1044,18 @@ public end return ret end + + before_save :purge_in_cache + def purge_in_cache + if !MySociety::Config.get('VARNISH_HOST').nil? && !self.id.nil? + # we only do this for existing info_requests (new ones have a nil id) + path = url_for(:controller => 'request', :action => 'show', :url_title => self.url_title, :only_path => true, :locale => :none) + req = PurgeRequest.new(:url => path, + :model => self.class.base_class.to_s, + :model_id => self.id) + req.save() + end + end end diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb index cc561b21d..de3c916aa 100644 --- a/app/models/outgoing_message.rb +++ b/app/models/outgoing_message.rb @@ -267,7 +267,10 @@ class OutgoingMessage < ActiveRecord::Base end end - + after_save(:purge_in_cache) + def purge_in_cache + self.info_request.purge_in_cache + end end diff --git a/app/models/public_body.rb b/app/models/public_body.rb index a18af8c69..2a0661fab 100644 --- a/app/models/public_body.rb +++ b/app/models/public_body.rb @@ -240,7 +240,7 @@ class PublicBody < ActiveRecord::Base # Return the short name if present, or else long name def short_or_long_name if self.short_name.nil? || self.short_name.empty? # 'nil' can happen during construction - self.name + self.name.nil? ? "" : self.name else self.short_name end @@ -547,6 +547,11 @@ class PublicBody < ActiveRecord::Base } end + after_save(:purge_in_cache) + def purge_in_cache + self.info_requests.each {|x| x.purge_in_cache} + end + end diff --git a/app/models/purge_request.rb b/app/models/purge_request.rb new file mode 100644 index 000000000..1450058b1 --- /dev/null +++ b/app/models/purge_request.rb @@ -0,0 +1,41 @@ +# models/purge_request.rb: +# A queue of URLs to purge +# +# Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved. +# Email: francis@mysociety.org; WWW: http://www.mysociety.org/ +# + +class PurgeRequest < ActiveRecord::Base + def self.purge_all + done_something = false + for item in PurgeRequest.all() + item.purge + done_something = true + end + return done_something + end + + def self.purge_all_loop + # Run purge_all in an endless loop, sleeping when there is nothing to do + while true + sleep_seconds = 1 + while !purge_all + sleep sleep_seconds + sleep_seconds *= 2 + sleep_seconds = 300 if sleep_seconds > 300 + end + end + end + + def purge + config = MySociety::Config.load_default() + varnish_url = config['VARNISH_HOST'] + result = quietly_try_to_purge(varnish_url, self.url) + if result == "200" + self.delete() + end + end +end + + + diff --git a/app/models/track_thing.rb b/app/models/track_thing.rb index 58d70ed86..3d147b8e6 100644 --- a/app/models/track_thing.rb +++ b/app/models/track_thing.rb @@ -108,7 +108,7 @@ class TrackThing < ActiveRecord::Base end descriptions = [] if varieties.include? _("requests") - descriptions << _("requests which are {{list_of_statuses}}", :list_of_statuses => Array(statuses).join(_(' or '))) + descriptions << _("requests which are {{list_of_statuses}}", :list_of_statuses => Array(statuses).sort.join(_(' or '))) varieties -= [_("requests")] end if descriptions.empty? and varieties.empty? @@ -116,7 +116,7 @@ class TrackThing < ActiveRecord::Base end descriptions += Array(varieties) parsed_text = parsed_text.strip - descriptions = descriptions.join(_(" or ")) + descriptions = descriptions.sort.join(_(" or ")) if !parsed_text.empty? descriptions += _("{{list_of_things}} matching text '{{search_query}}'", :list_of_things => "", :search_query => parsed_text) end diff --git a/app/models/user.rb b/app/models/user.rb index 59a84b7aa..73d65a8ca 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -422,5 +422,12 @@ class User < ActiveRecord::Base end return true end + + after_save(:purge_in_cache) + def purge_in_cache + # XXX should only be if specific attributes have changed + self.info_requests.each {|x| x.purge_in_cache} + end + end |