class EBSCO::EDS::SearchCriteria
Attributes
AutoCorrect[RW]
AutoSuggest[RW]
Expanders[RW]
FacetFilters[RW]
IncludeFacets[RW]
Limiters[RW]
PublicationId[RW]
Queries[RW]
RelatedContent[RW]
SearchMode[RW]
Sort[RW]
Public Class Methods
new(options = {}, info)
click to toggle source
# File lib/ebsco/eds/options.rb, line 164 def initialize(options = {}, info) # defaults @SearchMode = info.default_search_mode @IncludeFacets = 'y' @Sort = 'relevance' @AutoSuggest = info.default_auto_suggest @AutoCorrect = info.default_auto_correct _has_query = false @Expanders = info.default_expander_ids _my_expanders = [] _available_expander_ids = info.available_expander_ids @Limiters = nil _my_limiters = [] @FacetFilters = [] filter_id = 1 @RelatedContent = info.default_related_content_types _my_related_content = [] _available_related_content_types = info.available_related_content_types # blacklight year range slider input # "range"=>{"pub_year_tisim"=>{"begin"=>"1970", "end"=>"1980"}} if options.has_key?('range') if options['range'].has_key?('pub_year_tisim') begin_year = nil end_year = nil if options['range']['pub_year_tisim'].has_key?('begin') begin_year = options['range']['pub_year_tisim']['begin'] end if options['range']['pub_year_tisim'].has_key?('end') end_year = options['range']['pub_year_tisim']['end'] end unless begin_year.nil? or end_year.nil? pub_year_tisim_range = begin_year + '-01/' + end_year + '-01' _my_limiters.push({:Id => 'DT1', :Values => [pub_year_tisim_range]}) end end end options.each do |key, value| case key # ==================================================================================== # query # ==================================================================================== when :query, 'q' # add blacklight search_fields _field_code = '' if options.has_key? 'search_field' _field = options['search_field'] case _field when 'author' _field_code = 'AU' when 'subject' _field_code = 'SU' when 'title' _field_code = 'TI' when 'text' _field_code = 'TX' when 'abstract' _field_code = 'AB' when 'source' _field_code = 'SO' when 'issn' _field_code = 'IS' when 'isbn' _field_code = 'IB' when 'descriptor' _field_code = 'DE' when 'series' _field_code = 'SE' when 'subject_heading' _field_code = 'SH' when 'keywords' _field_code = 'KW' when /[A-Z]{2}/ _field_code = _field end end if not _field_code == '' @Queries = [{:FieldCode => _field_code, :Term => value}] else @Queries = [{:Term => value}] end _has_query = true # ==================================================================================== # mode # ==================================================================================== when :mode if info.available_search_mode_types.include? value.downcase @SearchMode = value.downcase else @SearchMode = info.default_search_mode end # ==================================================================================== # facets # ==================================================================================== when :include_facets @IncludeFacets = value ? 'y' : 'n' when :facet_filters @FacetFilters = value # ==================================================================================== # sort # ==================================================================================== when :sort, 'sort' if info.available_sorts(value.downcase).empty? if value.downcase == 'newest' || value.downcase == 'pub_date_sort desc' @Sort = 'date' elsif value.downcase == 'oldest' || value.downcase == 'pub_date_sort asc' @Sort = 'date2' elsif value.downcase == 'score desc' @Sort = 'relevance' else @Sort = 'relevance' end else @Sort = value.downcase end # ==================================================================================== # publication id # ==================================================================================== when :publication_id @PublicationId = value # ==================================================================================== # auto suggest & correct # ==================================================================================== when :auto_suggest, 'auto_suggest' @AutoSuggest = value ? 'y' : 'n' when :auto_correct, 'auto_correct' @AutoCorrect = value ? 'y' : 'n' # ==================================================================================== # expanders # ==================================================================================== when :expanders value.each do |item| if _available_expander_ids.include? item.downcase _my_expanders.push(item) end end if _my_expanders.empty? _my_expanders = info.default_expander_ids end @Expanders = _my_expanders # ==================================================================================== # solr limiters & facets # ==================================================================================== when 'f' _search_limiter_list = [] if value.has_key?('eds_search_limiters_facet') _search_limiter_list = value['eds_search_limiters_facet'] end info.available_limiters.each do |limiter| # only handle 'select' limiters (ones with values of 'y' or 'n') if ( _search_limiter_list.include? limiter['Label'] or _search_limiter_list.include? limiter['Id']) and limiter['Type'] == 'select' _my_limiters.push({:Id => limiter['Id'], :Values => ['y']}) end end # date limiters if value.has_key?('eds_publication_year_range_facet') _list = value['eds_publication_year_range_facet'] _this_year = Date.today.year _this_month = Date.today.month _list.each do |item| if item == 'This year' _range = _this_year.to_s + '-01/' + _this_year.to_s + '-' + _this_month.to_s _my_limiters.push({:Id => 'DT1', :Values => [_range]}) end if item == 'Last 3 years' _range = (_this_year-3).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s _my_limiters.push({:Id => 'DT1', :Values => [_range]}) end if item == 'Last 10 years' _range = (_this_year-10).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s _my_limiters.push({:Id => 'DT1', :Values => [_range]}) end if item == 'Last 50 years' _range = (_this_year-50).to_s + '-' + _this_month.to_s + '/' + _this_year.to_s + '-' + _this_month.to_s _my_limiters.push({:Id => 'DT1', :Values => [_range]}) end if item == 'More than 50 years ago' _range = '0000-01/' + (_this_year-50).to_s + '-12' _my_limiters.push({:Id => 'DT1', :Values => [_range]}) end end end # Language if value.has_key?('eds_language_facet') lang_list = value['eds_language_facet'] lang_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'Language', 'Value' => item}]}) filter_id += 1 end end # SubjectEDS if value.has_key?('eds_subject_topic_facet') subj_list = value['eds_subject_topic_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'SubjectEDS', 'Value' => item}]}) filter_id += 1 end end # SubjectGeographic if value.has_key?('eds_subjects_geographic_facet') subj_list = value['eds_subjects_geographic_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'SubjectGeographic', 'Value' => item}]}) filter_id += 1 end end # Publisher if value.has_key?('eds_publisher_facet') subj_list = value['eds_publisher_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'Publisher', 'Value' => item}]}) filter_id += 1 end end # Journal if value.has_key?('eds_journal_facet') subj_list = value['eds_journal_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'Journal', 'Value' => item}]}) filter_id += 1 end end # Category if value.has_key?('eds_category_facet') subj_list = value['eds_category_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'Category', 'Value' => item}]}) filter_id += 1 end end # LocationLibrary if value.has_key?('eds_library_location_facet') subj_list = value['eds_library_location_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'LocationLibrary', 'Value' => item}]}) filter_id += 1 end end # CollectionLibrary if value.has_key?('eds_library_collection_facet') subj_list = value['eds_library_collection_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'CollectionLibrary', 'Value' => item}]}) filter_id += 1 end end # AuthorUniversity if value.has_key?('eds_author_university_facet') subj_list = value['eds_author_university_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'AuthorUniversity', 'Value' => item}]}) filter_id += 1 end end # PublicationYear if value.has_key?('eds_publication_year_facet') year_list = value['eds_publication_year_facet'] year_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'PublicationYear', 'Value' => item}]}) filter_id += 1 end end # Special Cases: # SourceType if value.has_key?('eds_publication_type_facet') f_list = value['eds_publication_type_facet'] f_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'SourceType', 'Value' => item}]}) filter_id += 1 end end # ContentProvider if value.has_key?('eds_content_provider_facet') subj_list = value['eds_content_provider_facet'] subj_list.each do |item| @FacetFilters.push({'FilterId' => filter_id, 'FacetValues' => [{'Id' => 'ContentProvider', 'Value' => item}]}) filter_id += 1 end end # ==================================================================================== # limiters # ==================================================================================== when :limiters value.each do |item| _key = item.split(':',2).first.upcase _values = item.split(':',2).last # is limiter id available? if info.available_limiter_ids.include? _key _limiter = info.available_limiters(_key) # if multi-value, add the values if they're available if _limiter['Type'] == 'multiselectvalue' _available_values = info.available_limiter_values(_key) _multi_values = [] _values.split(',').each do |val| # todo: make case insensitive? if _available_values.include? val _multi_values.push(val) end end if _multi_values.empty? # do nothing, none of the values are available else _my_limiters.push({:Id => _key, :Values => _multi_values}) end # single value, just pass it on else _my_limiters.push({:Id => _key, :Values => [_values]}) end end end @Limiters = _my_limiters # ==================================================================================== # related content # ==================================================================================== when :related_content value.each do |item| if _available_related_content_types.include? item.downcase _available_related_content_types.push(item) else # silently ignore end end if _my_related_content.empty? _my_related_content = info.default_related_content_types end @RelatedContent = _my_related_content # ==================================================================================== # unsupported parameters, ignore # ==================================================================================== else # ignore end end # end options parsing # set solr limiters, if any @Limiters = _my_limiters end