From 7c46f3a6bbdbf5e3b442896c0c84302eb55818ac Mon Sep 17 00:00:00 2001 From: Rikesh Dhokia Date: Wed, 18 May 2011 15:51:39 +1000 Subject: [PATCH 1/9] #622: rikesh - implement advanced search by created by field --- Gemfile | 1 + Gemfile.lock | 11 +++- app/controllers/advanced_search_controller.rb | 26 +++++--- app/models/child.rb | 8 ++- app/models/search_criteria.rb | 6 +- app/views/advanced_search/index.html.erb | 10 +++- config/routes.rb | 2 +- features/advanced_search.feature | 22 +++++++ features/step_definitions/web_steps.rb | 1 - features/support/paths.rb | 26 ++++---- public/javascripts/advanced_search.js | 5 ++ .../advanced_search_controller_spec.rb | 60 ++++++++++++++++--- spec/models/child_spec.rb | 24 +++++++- spec/models/search_criteria_spec.rb | 10 +++- 14 files changed, 173 insertions(+), 39 deletions(-) create mode 100644 features/advanced_search.feature diff --git a/Gemfile b/Gemfile index b666f5d85..53b168282 100644 --- a/Gemfile +++ b/Gemfile @@ -21,6 +21,7 @@ group :cucumber do gem 'cucumber', '0.9.4' gem 'cucumber-rails', '0.3.2' gem 'hpricot', '0.8.2' + gem 'launchy', '0.4.0' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 7e6f82610..9c0927d5f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -13,6 +13,7 @@ GEM activesupport (= 2.3.11) activesupport (2.3.11) builder (2.1.2) + configuration (1.2.0) couchrest (0.34) mime-types (>= 1.15) rest-client (>= 0.5) @@ -37,6 +38,9 @@ GEM hpricot (0.8.2) json (1.4.6) json_pure (1.4.6) + launchy (0.4.0) + configuration (>= 0.0.5) + rake (>= 0.8.1) mime-types (1.16) mini_magick (1.3.2) subexec (~> 0.0.4) @@ -44,9 +48,9 @@ GEM pdf-reader (0.8.6) Ascii85 (>= 0.9) prawn (0.8.4) - prawn-core (>= 0.8.4, < 0.9) - prawn-layout (>= 0.8.4, < 0.9) - prawn-security (>= 0.8.4, < 0.9) + prawn-core (< 0.9, >= 0.8.4) + prawn-layout (< 0.9, >= 0.8.4) + prawn-security (< 0.9, >= 0.8.4) prawn-core (0.8.4) prawn-layout (0.8.4) prawn-security (0.8.4) @@ -94,6 +98,7 @@ DEPENDENCIES hpricot (= 0.8.2) json (= 1.4.6) json_pure (= 1.4.6) + launchy (= 0.4.0) mime-types (= 1.16) mini_magick (= 1.3.2) pdf-reader (= 0.8.6) diff --git a/app/controllers/advanced_search_controller.rb b/app/controllers/advanced_search_controller.rb index ab6b4a76f..e3ea36129 100644 --- a/app/controllers/advanced_search_controller.rb +++ b/app/controllers/advanced_search_controller.rb @@ -1,16 +1,28 @@ class AdvancedSearchController < ApplicationController - def index + def index + puts params[:criteria_list] @forms = FormSection.all @aside = 'shared/sidebar_links' - - if params[:criteria_list] - @criteria_list = SearchCriteria.build_from_params params[:criteria_list] - @results = SearchService.search(@criteria_list) - else + new_search = !params[:criteria_list] + if new_search @criteria_list = [SearchCriteria.new] @results = [] + else + @criteria_list = (child_fields_selected?(params[:criteria_list]) ? SearchCriteria.build_from_params(params[:criteria_list]): []) + append_advanced_user_criteria(params[:created_by_value], @criteria_list) + @results = SearchService.search(@criteria_list) + end + end + + def child_fields_selected?(criteria_list) + !criteria_list.first[1]["field"].blank? if !criteria_list.first[1].nil? + end + + def append_advanced_user_criteria(value, list) + if (value.length > 0) + advanced_user_criteria = SearchCriteria.create_advanced_criteria({:field => "created_by", :value => value, :index => 12}) + list.push(advanced_user_criteria) end - end end \ No newline at end of file diff --git a/app/models/child.rb b/app/models/child.rb index 2c20debc0..970526245 100644 --- a/app/models/child.rb +++ b/app/models/child.rb @@ -31,13 +31,15 @@ class Child < CouchRestRails::Document validates_with_method :validate_has_at_least_one_field_value def self.build_solar_schema - fields = ["unique_identifier"] + Field.all_text_names - + fields = build_fields_for_solar Sunspot.setup(Child) do text *fields end end - + + def self.build_fields_for_solar + ["unique_identifier", "created_by"] + Field.all_text_names + end def validate_has_at_least_one_field_value return true if FormSection.all_enabled_child_fields.any? { |field| is_filled_in? field } diff --git a/app/models/search_criteria.rb b/app/models/search_criteria.rb index 72fd9ba08..e94f366ed 100644 --- a/app/models/search_criteria.rb +++ b/app/models/search_criteria.rb @@ -8,6 +8,10 @@ def initialize(params = {}) @field = params[:field] || "" @value = params[:value] || "" end + + def self.create_advanced_criteria(criteria) + SearchCriteria.new(:field => criteria[:field], :value => criteria[:value], :join => "AND", :index => criteria[:index].to_s) + end def self.build_from_params(criteria_list) text_fields = FormSection.all.map{ |form| form.all_text_fields }.flatten @@ -52,7 +56,7 @@ def self.build_joins(list, lucene_query) end end - + end \ No newline at end of file diff --git a/app/views/advanced_search/index.html.erb b/app/views/advanced_search/index.html.erb index c81ba1d60..2a647ce0b 100644 --- a/app/views/advanced_search/index.html.erb +++ b/app/views/advanced_search/index.html.erb @@ -34,9 +34,6 @@ <% end %> - - -