aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuc Donnet2017-12-19 12:10:35 +0100
committerGitHub2017-12-19 12:10:35 +0100
commitbb2713b33296c857ce807e0237bf8095b65070ad (patch)
tree7ad6067405da4d75b508af62ef2debd90fbffd5b
parent1835256469af5f72ec50d986018554722b3b05cb (diff)
parente24fa05b277224ae5bd70b95c22b9386555ea72b (diff)
downloadchouette-core-bb2713b33296c857ce807e0237bf8095b65070ad.tar.bz2
Merge pull request #149 from af83/5305_autocomplete_stop_area_unaccent
5305 autocomplete stop area unaccent
-rw-r--r--app/controllers/autocomplete_stop_areas_controller.rb2
-rw-r--r--db/migrate/20171214130636_enable_unaccent_extension.rb9
-rw-r--r--db/schema.rb3
-rw-r--r--spec/controllers/autocomplete_stop_areas_controller_spec.rb29
4 files changed, 41 insertions, 2 deletions
diff --git a/app/controllers/autocomplete_stop_areas_controller.rb b/app/controllers/autocomplete_stop_areas_controller.rb
index 233012028..be1badff0 100644
--- a/app/controllers/autocomplete_stop_areas_controller.rb
+++ b/app/controllers/autocomplete_stop_areas_controller.rb
@@ -18,7 +18,7 @@ class AutocompleteStopAreasController < ChouetteController
scope = scope.possible_parents if relation_children?
end
args = [].tap{|arg| 4.times{arg << "%#{params[:q]}%"}}
- @stop_areas = scope.where("name ILIKE ? OR city_name ILIKE ? OR registration_number ILIKE ? OR objectid ILIKE ?", *args).limit(50)
+ @stop_areas = scope.where("unaccent(name) ILIKE unaccent(?) OR unaccent(city_name) ILIKE unaccent(?) OR registration_number ILIKE ? OR objectid ILIKE ?", *args).limit(50)
@stop_areas
end
diff --git a/db/migrate/20171214130636_enable_unaccent_extension.rb b/db/migrate/20171214130636_enable_unaccent_extension.rb
new file mode 100644
index 000000000..f7411b1f4
--- /dev/null
+++ b/db/migrate/20171214130636_enable_unaccent_extension.rb
@@ -0,0 +1,9 @@
+class EnableUnaccentExtension < ActiveRecord::Migration
+ def up
+ execute 'CREATE EXTENSION IF NOT EXISTS unaccent SCHEMA shared_extensions;'
+ end
+
+ def down
+ execute 'DROP EXTENSION IF EXISTS unaccent SCHEMA shared_extensions;'
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 4a04dac26..f2642f8fc 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,12 +11,13 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20171130180144) do
+ActiveRecord::Schema.define(version: 20171214130636) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
enable_extension "postgis"
enable_extension "hstore"
+ enable_extension "unaccent"
create_table "access_links", id: :bigserial, force: :cascade do |t|
t.integer "access_point_id", limit: 8
diff --git a/spec/controllers/autocomplete_stop_areas_controller_spec.rb b/spec/controllers/autocomplete_stop_areas_controller_spec.rb
new file mode 100644
index 000000000..50fc877dd
--- /dev/null
+++ b/spec/controllers/autocomplete_stop_areas_controller_spec.rb
@@ -0,0 +1,29 @@
+require 'rails_helper'
+
+RSpec.describe AutocompleteStopAreasController, type: :controller do
+ login_user
+
+ let(:referential) { Referential.first }
+ let!(:stop_area) { create :stop_area, name: 'écolà militaire' }
+
+ describe 'GET #index' do
+ it 'should be successful' do
+ get :index, referential_id: referential.id
+ expect(response).to be_success
+ end
+
+ context 'search by name' do
+ it 'should be successful' do
+ get :index, referential_id: referential.id, q: 'écolà', :format => :json
+ expect(response).to be_success
+ expect(assigns(:stop_areas)).to eq([stop_area])
+ end
+
+ it 'should be accent insensitive' do
+ get :index, referential_id: referential.id, q: 'ecola', :format => :json
+ expect(response).to be_success
+ expect(assigns(:stop_areas)).to eq([stop_area])
+ end
+ end
+ end
+end