diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index bbecb88a9..8da777581 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -36,7 +36,7 @@ class ProposalsController < ApplicationController end def summary - @proposals = Proposal.last_week.sort_by_confidence_score.grouped_by_categories + @proposals = Proposal.for_summary @tag_cloud = tag_cloud end diff --git a/app/models/proposal.rb b/app/models/proposal.rb index 6d59b4ee9..b6106951d 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -42,10 +42,7 @@ class Proposal < ActiveRecord::Base scope :sort_by_relevance , -> { all } scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } scope :last_week, -> { where("proposals.created_at >= ?", 7.days.ago)} - - scope :grouped_by_categories, -> { where("lower(tags.name) IN (?)", Proposal.category_names). - joins(:tags).select('proposals.*, tags.name'). - group_by(&:name) } + scope :in_categories, -> { where("lower(tags.name) IN (?)", Proposal.category_names) } def searchable_values { title => 'A', @@ -75,6 +72,15 @@ class Proposal < ActiveRecord::Base /\A#{Setting["proposal_code_prefix"]}-\d\d\d\d-\d\d-(\d*)\z/.match(terms) end + def self.for_summary + last_week. + sort_by_confidence_score. + in_categories. + joins(:tags). + select('proposals.*, tags.name as tag_name'). + group_by(&:tag_name) + end + def self.category_names ActsAsTaggableOn::Tag.where("kind = 'category'").map {|tag| tag.name.downcase } end diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index 45d139503..ea7f78698 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -642,19 +642,19 @@ describe Proposal do end end - describe "grouped_by_categories" do + describe "for_summary" do it "should return proposals tagged with a category" do create(:tag, kind: 'category', name: 'Culture') proposal = create(:proposal, tag_list: 'Culture') - expect(Proposal.grouped_by_categories.values.flatten).to include(proposal) + expect(Proposal.for_summary.values.flatten).to include(proposal) end it "should not return proposals tagged without a category" do create(:tag, kind: 'category', name: 'Culture') proposal = create(:proposal, tag_list: 'Parks') - expect(Proposal.grouped_by_categories.values.flatten).to_not include(proposal) + expect(Proposal.for_summary.values.flatten).to_not include(proposal) end it "should return proposals grouped by tag" do @@ -665,7 +665,7 @@ describe Proposal do proposal2 = create(:proposal, tag_list: 'Culture') proposal3 = create(:proposal, tag_list: 'Health') - expect(Proposal.grouped_by_categories).to include('Culture' => [proposal2, proposal1], 'Health' => [proposal3]) + expect(Proposal.for_summary).to include('Culture' => [proposal2, proposal1], 'Health' => [proposal3]) end end