diff options
-rw-r--r-- | app/models/track_thing.rb | 70 |
1 files changed, 19 insertions, 51 deletions
diff --git a/app/models/track_thing.rb b/app/models/track_thing.rb index 2f74a38a0..7c8c0003c 100644 --- a/app/models/track_thing.rb +++ b/app/models/track_thing.rb @@ -69,62 +69,30 @@ class TrackThing < ActiveRecord::Base end def track_query_description - # XXX this is very brittle... we should probably ask users - # simply to name their tracks when they make them? - original_text = parsed_text = self.track_query.gsub(/([()]|OR)/, "") - filters = parsed_text.scan /\b\S+:\S+\b/ - varieties = Set.new - statuses = Set.new - for filter in filters - parsed_text = parsed_text.sub(filter, "") - if filter =~ /variety:user/ - varieties << _("users") - end - if filter =~ /variety:comment/ - varieties << _("comments") - end - if filter =~ /variety:authority/ - varieties << _("authorities") - end - if filter =~ /(variety:(sent|followup_sent|response)|latest_status)/ - varieties << _("requests") - end - if filter =~ /(rejected|not_held)/ - statuses << _("unsuccessful") - end - if filter =~ /(:successful|:partially_successful)/ - statuses << _("successful") - end - if filter =~ /waiting/ - statuses << _("awaiting a response") - end - end - if filters.empty? - parsed_text = original_text - end - descriptions = [] - if varieties.include? _("requests") - if statuses.empty? - # HACK: Relies on the 'descriptions.sort' below to luckily put this first - descriptions << _("all requests") + filter_description = query_filter_description('(variety:sent OR variety:followup_sent OR variety:response OR variety:comment)', + :no_query => N_("all requests or comments"), + :query => N_("all requests or comments matching text '{{query}}'")) + return filter_description if filter_description + filter_description = query_filter_description('(latest_status:successful OR latest_status:partially_successful)', + :no_query => N_("requests which are successful"), + :query => N_("requests which are successful matching text '{{query}}'")) + return filter_description if filter_description + return _("anything matching text '{{query}}'", :query => track_query) + end + + # Return a readable query description for queries involving commonly used filter clauses + def query_filter_description(string, options) + parsed_query = track_query.gsub(string, '') + if parsed_query != track_query + parsed_query.strip! + if parsed_query.empty? + _(options[:no_query]) else - descriptions << _("requests which are {{list_of_statuses}}", :list_of_statuses => Array(statuses).sort.join(_(' or '))) + _(options[:query], :query => parsed_query) end - varieties -= [_("requests")] end - if descriptions.empty? and varieties.empty? - varieties << _("anything") - end - descriptions += Array(varieties) - parsed_text = parsed_text.strip - 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 - return descriptions end - def TrackThing.create_track_for_request(info_request) track_thing = TrackThing.new track_thing.track_type = 'request_updates' |