From d3ccc71c220031ff680c48c94f097abbbfab33d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Tue, 29 Mar 2016 18:25:26 +0200 Subject: [PATCH 1/8] fixes search terms --- app/controllers/spending_proposals_controller.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/controllers/spending_proposals_controller.rb b/app/controllers/spending_proposals_controller.rb index 306348651..b2eb07451 100644 --- a/app/controllers/spending_proposals_controller.rb +++ b/app/controllers/spending_proposals_controller.rb @@ -12,12 +12,13 @@ class SpendingProposalsController < ApplicationController respond_to :html, :js def index - @spending_proposals = @search_terms.present? ? SpendingProposal.search(@search_terms) : SpendingProposal.all + @spending_proposals = search_terms.present? ? SpendingProposal.search(search_terms) : SpendingProposal.all @spending_proposals = @spending_proposals.page(params[:page]).for_render end def new @spending_proposal = SpendingProposal.new + end def show @@ -54,4 +55,8 @@ class SpendingProposalsController < ApplicationController params.require(:spending_proposal).permit(:title, :description, :external_url, :geozone_id, :association_name, :terms_of_service, :captcha, :captcha_key) end + def search_terms + params[:search].presence + end + end From cb681883f887569d202c1e38da93833bb7b8d4d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baza=CC=81n?= Date: Tue, 29 Mar 2016 18:25:44 +0200 Subject: [PATCH 2/8] adds pg_search to spending proposals --- app/models/spending_proposal.rb | 13 +++++++++++++ ...0329160106_add_tsvector_to_spending_proposals.rb | 8 ++++++++ db/schema.rb | 4 +++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 534ce9533..3e461518c 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -2,6 +2,7 @@ class SpendingProposal < ActiveRecord::Base include Measurable include Sanitizable include Taggable + include Searchable apply_simple_captcha acts_as_votable @@ -53,6 +54,18 @@ class SpendingProposal < ActiveRecord::Base results.includes(:geozone, administrator: :user, valuators: :user) end + def searchable_values + { title => 'A', + author.username => 'B', + geozone.try(:name) => 'B', + description => 'C' + } + end + + def self.search(terms) + self.pg_search(terms) + end + def self.by_geozone(geozone) if geozone == 'all' where(geozone_id: nil) diff --git a/db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb b/db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb new file mode 100644 index 000000000..080a8ebc9 --- /dev/null +++ b/db/migrate/20160329160106_add_tsvector_to_spending_proposals.rb @@ -0,0 +1,8 @@ +class AddTsvectorToSpendingProposals < ActiveRecord::Migration + + def change + add_column :spending_proposals, :tsv, :tsvector + add_index :spending_proposals, :tsv, using: "gin" + end + +end diff --git a/db/schema.rb b/db/schema.rb index b5daf6abd..55021dfa0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160329115418) do +ActiveRecord::Schema.define(version: 20160329160106) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -313,10 +313,12 @@ ActiveRecord::Schema.define(version: 20160329115418) do t.string "time_scope" t.datetime "unfeasible_email_sent_at" t.integer "cached_votes_up" + t.tsvector "tsv" end add_index "spending_proposals", ["author_id"], name: "index_spending_proposals_on_author_id", using: :btree add_index "spending_proposals", ["geozone_id"], name: "index_spending_proposals_on_geozone_id", using: :btree + add_index "spending_proposals", ["tsv"], name: "index_spending_proposals_on_tsv", using: :gin create_table "taggings", force: :cascade do |t| t.integer "tag_id" From 18d304ea033b74efa878a372963cfaf85e7d422b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Tue, 29 Mar 2016 18:26:12 +0200 Subject: [PATCH 3/8] adds spending proposals search spec --- spec/features/spending_proposals_spec.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/spec/features/spending_proposals_spec.rb b/spec/features/spending_proposals_spec.rb index f600a2bc9..b31eacec8 100644 --- a/spec/features/spending_proposals_spec.rb +++ b/spec/features/spending_proposals_spec.rb @@ -18,6 +18,29 @@ feature 'Spending proposals' do end end + context("Search") do + scenario 'Search by text' do + spending_proposal1 = create(:spending_proposal, title: "Get Schwifty") + spending_proposal2 = create(:spending_proposal, title: "Schwifty Hello") + spending_proposal3 = create(:spending_proposal, title: "Do not show me") + + visit spending_proposals_path + + within(".expanded #search_form") do + fill_in "search", with: "Schwifty" + click_button "Search" + end + + within("#investment-projects") do + expect(page).to have_css('.investment-project', count: 2) + + expect(page).to have_content(spending_proposal1.title) + expect(page).to have_content(spending_proposal2.title) + expect(page).to_not have_content(spending_proposal3.title) + end + end + end + scenario 'Create' do login_as(author) From 6649b0fbdd400b97a4448a2a5a1c3c9486864ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Wed, 30 Mar 2016 11:47:40 +0200 Subject: [PATCH 4/8] adds default value for cached_votes_up --- db/migrate/20160329115418_add_votes_up_to_spending_proposals.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20160329115418_add_votes_up_to_spending_proposals.rb b/db/migrate/20160329115418_add_votes_up_to_spending_proposals.rb index aa9397c2e..3b0f2a7ad 100644 --- a/db/migrate/20160329115418_add_votes_up_to_spending_proposals.rb +++ b/db/migrate/20160329115418_add_votes_up_to_spending_proposals.rb @@ -1,5 +1,5 @@ class AddVotesUpToSpendingProposals < ActiveRecord::Migration def change - add_column :spending_proposals, :cached_votes_up, :integer + add_column :spending_proposals, :cached_votes_up, :integer, default: 0 end end From 24bbbcec974175b250e2dbf15f4a1269e576514d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Wed, 30 Mar 2016 11:47:49 +0200 Subject: [PATCH 5/8] fixes i18n --- config/locales/es.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/es.yml b/config/locales/es.yml index 2480bd7ba..cf7141933 100755 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -442,7 +442,7 @@ es: support_title: Apoyar este proyecto supports: one: 1 apoyo - other: "%{count} apoyo" + other: "%{count} apoyos" zero: Sin apoyos stats: index: From 195e759f472c561c1596e1a8f443eccf4b6ae4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Wed, 30 Mar 2016 12:10:24 +0200 Subject: [PATCH 6/8] favors before_action vs before_filter --- app/controllers/spending_proposals_controller.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/controllers/spending_proposals_controller.rb b/app/controllers/spending_proposals_controller.rb index b2eb07451..a70c3a89a 100644 --- a/app/controllers/spending_proposals_controller.rb +++ b/app/controllers/spending_proposals_controller.rb @@ -2,11 +2,10 @@ class SpendingProposalsController < ApplicationController include FeatureFlags before_action :authenticate_user!, except: [:index] + before_action -> { flash.now[:notice] = flash[:notice].html_safe if flash[:html_safe] && flash[:notice] } load_and_authorize_resource - before_filter -> { flash.now[:notice] = flash[:notice].html_safe if flash[:html_safe] && flash[:notice] } - feature_flag :spending_proposals respond_to :html, :js @@ -48,7 +47,6 @@ class SpendingProposalsController < ApplicationController set_spending_proposal_votes(@spending_proposal) end - private def spending_proposal_params From 207479ec599f2c97e1a9885513771603d2df5568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Wed, 30 Mar 2016 12:10:43 +0200 Subject: [PATCH 7/8] shows search terms in search results view --- app/controllers/spending_proposals_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/spending_proposals_controller.rb b/app/controllers/spending_proposals_controller.rb index a70c3a89a..24bbbc41a 100644 --- a/app/controllers/spending_proposals_controller.rb +++ b/app/controllers/spending_proposals_controller.rb @@ -54,7 +54,7 @@ class SpendingProposalsController < ApplicationController end def search_terms - params[:search].presence + @search_terms ||= params[:search].presence end end From 948436f130571938ecd0e6ffacd9c4b540025c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Wed, 30 Mar 2016 12:11:15 +0200 Subject: [PATCH 8/8] adds rake task to touch all spending proposals (it triggers the recalculating of the tsvector for pg_search) --- lib/tasks/spending_proposals.rake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/tasks/spending_proposals.rake b/lib/tasks/spending_proposals.rake index b49f2acf5..42cde5424 100644 --- a/lib/tasks/spending_proposals.rake +++ b/lib/tasks/spending_proposals.rake @@ -10,4 +10,11 @@ namespace :spending_proposals do end end end + + desc "Updates all spending proposals to recalculate their tsv column" + task touch: :environment do + SpendingProposal.find_in_batches do |spending_propsal| + spending_propsal.each(&:save) + end + end end \ No newline at end of file