Class: SearchResultData
- Inherits:
-
Object
- Object
- SearchResultData
- Defined in:
- frontend/app/models/search_result_data.rb
Class Method Summary (collapse)
-
+ (Object) ACCESSION_FACETS
-
+ (Object) add_result_hook(&block)
-
+ (Object) AGENT_FACETS
-
+ (Object) BASE_FACETS
-
+ (Object) BASE_SORT_FIELDS
-
+ (Object) CLASSIFICATION_FACETS
-
+ (Object) DIGITAL_OBJECT_FACETS
-
+ (Object) EVENT_FACETS
-
+ (Object) LOCATION_FACETS
-
+ (Object) RESOURCE_FACETS
-
+ (Object) run_result_hooks(results)
-
+ (Object) SUBJECT_FACETS
-
+ (Object) UNTITLED_TYPES
Instance Method Summary (collapse)
-
- (Object) [](key)
-
- (Object) []=(key, value)
-
- (Object) current_sort_direction(index = 0)
-
- (Object) facet_display_string(facet_group, facet)
-
- (Object) facet_label_for_filter(filter)
-
- (Object) facet_label_for_query
-
- (Object) facet_label_string(facet_group, facet)
-
- (Object) facet_query_string(facet_group, facet)
-
- (Object) facets_for_filter
-
- (Boolean) filtered_terms?
-
- (Boolean) has_titles?
-
- (Object) init_facets
-
- (Object) init_sorts
-
- (SearchResultData) initialize(search_data)
constructor
A new instance of SearchResultData.
-
- (Boolean) query?
-
- (Boolean) results?
-
- (Boolean) single_type?
-
- (Object) sort_fields
-
- (Object) sort_filter_for(field, default = "asc")
-
- (Boolean) sorted?
-
- (Object) sorted_by(index = 0)
-
- (Boolean) sorted_by?(field)
-
- (Object) sorted_by_label(title_label, index = 0)
-
- (Object) types
-
- (Boolean) weightable?
Constructor Details
- (SearchResultData) initialize(search_data)
Returns a new instance of SearchResultData
3 4 5 6 7 8 9 10 |
# File 'frontend/app/models/search_result_data.rb', line 3 def initialize(search_data) @search_data = search_data @facet_data = {} self.class.run_result_hooks(search_data) init_facets init_sorts end |
Class Method Details
+ (Object) ACCESSION_FACETS
227 228 229 |
# File 'frontend/app/models/search_result_data.rb', line 227 def self.ACCESSION_FACETS ["subjects", "accession_date_year", "creators"] end |
+ (Object) add_result_hook(&block)
260 261 262 263 |
# File 'frontend/app/models/search_result_data.rb', line 260 def self.add_result_hook(&block) @result_hooks ||= [] @result_hooks << block end |
+ (Object) AGENT_FACETS
223 224 225 |
# File 'frontend/app/models/search_result_data.rb', line 223 def self.AGENT_FACETS ["primary_type", "source", "rules"] end |
+ (Object) BASE_FACETS
219 220 221 |
# File 'frontend/app/models/search_result_data.rb', line 219 def self.BASE_FACETS ["primary_type","creators","subjects"] end |
+ (Object) BASE_SORT_FIELDS
215 216 217 |
# File 'frontend/app/models/search_result_data.rb', line 215 def self.BASE_SORT_FIELDS %w(create_time user_mtime) end |
+ (Object) CLASSIFICATION_FACETS
255 256 257 |
# File 'frontend/app/models/search_result_data.rb', line 255 def self.CLASSIFICATION_FACETS [] end |
+ (Object) DIGITAL_OBJECT_FACETS
235 236 237 |
# File 'frontend/app/models/search_result_data.rb', line 235 def self.DIGITAL_OBJECT_FACETS ["subjects", "publish", "digital_object_type", "level", "primary_type"] end |
+ (Object) EVENT_FACETS
247 248 249 |
# File 'frontend/app/models/search_result_data.rb', line 247 def self.EVENT_FACETS ["event_type", "outcome"] end |
+ (Object) LOCATION_FACETS
239 240 241 |
# File 'frontend/app/models/search_result_data.rb', line 239 def self.LOCATION_FACETS ["temporary"] end |
+ (Object) RESOURCE_FACETS
231 232 233 |
# File 'frontend/app/models/search_result_data.rb', line 231 def self.RESOURCE_FACETS ["subjects", "publish", "level", "classification_path", "primary_type"] end |
+ (Object) run_result_hooks(results)
266 267 268 269 270 271 |
# File 'frontend/app/models/search_result_data.rb', line 266 def self.run_result_hooks(results) @result_hooks ||= [] Array(@result_hooks).each do |hook| hook.call(results) end end |
+ (Object) SUBJECT_FACETS
243 244 245 |
# File 'frontend/app/models/search_result_data.rb', line 243 def self.SUBJECT_FACETS ["source", "first_term_type"] end |
+ (Object) UNTITLED_TYPES
251 252 253 |
# File 'frontend/app/models/search_result_data.rb', line 251 def self.UNTITLED_TYPES ["event"] end |
Instance Method Details
- (Object) [](key)
44 45 46 |
# File 'frontend/app/models/search_result_data.rb', line 44 def [](key) @search_data[key] end |
- (Object) []=(key, value)
48 49 50 |
# File 'frontend/app/models/search_result_data.rb', line 48 def []=(key, value) @search_data[key] = value end |
- (Object) current_sort_direction(index = 0)
180 181 182 183 184 |
# File 'frontend/app/models/search_result_data.rb', line 180 def current_sort_direction(index = 0) return "desc" unless sorted? @sort_data[index][:direction] end |
- (Object) facet_display_string(facet_group, facet)
79 80 81 |
# File 'frontend/app/models/search_result_data.rb', line 79 def facet_display_string(facet_group, facet) "#{I18n.t("search_results.filter.#{facet_group}", :default => facet_group)}: #{facet_label_string(facet_group, facet)}" end |
- (Object) facet_label_for_filter(filter)
56 57 58 59 60 61 62 63 64 65 66 |
# File 'frontend/app/models/search_result_data.rb', line 56 def facet_label_for_filter(filter) filter_json = JSON.parse(filter) facet = filter_json.keys[0] term = filter_json[facet] if @facet_data.has_key?(facet) and @facet_data[facet].has_key?(term) @facet_data[facet][term][:display_string] else facet_display_string(facet, term) end end |
- (Object) facet_label_for_query
211 212 213 |
# File 'frontend/app/models/search_result_data.rb', line 211 def facet_label_for_query "#{I18n.t("search_results.filter.query")}: #{@search_data[:criteria]["q"]}" end |
- (Object) facet_label_string(facet_group, facet)
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'frontend/app/models/search_result_data.rb', line 83 def facet_label_string(facet_group, facet) return I18n.t("#{facet}._singular", :default => I18n.t("plugins.#{facet}._singular", :default => facet)) if facet_group === "primary_type" return I18n.t("enumerations.name_source.#{facet}", :default => I18n.t("enumerations.subject_source.#{facet}", :default => facet)) if facet_group === "source" return I18n.t("enumerations.name_rule.#{facet}", :default => facet) if facet_group === "rules" return I18n.t("boolean.#{facet.to_s}", :default => facet) if facet_group === "publish" return I18n.t("enumerations.digital_object_digital_object_type.#{facet.to_s}", :default => facet) if facet_group === "digital_object_type" return I18n.t("enumerations.location_temporary.#{facet.to_s}", :default => facet) if facet_group === "temporary" return I18n.t("enumerations.event_event_type.#{facet.to_s}", :default => facet) if facet_group === "event_type" return I18n.t("enumerations.event_outcome.#{facet.to_s}", :default => facet) if facet_group === "outcome" return I18n.t("enumerations.subject_term_type.#{facet.to_s}", :default => facet) if facet_group === "first_term_type" if facet_group === "source" if single_type? and types[0] === "subject" return I18n.t("enumerations.subject_source.#{facet}", :default => facet) else return I18n.t("enumerations.name_source.#{facet}", :default => facet) end end if facet_group === "level" if single_type? and types[0] === "digital_object" return I18n.t("enumerations.digital_object_level.#{facet.to_s}", :default => facet) else return I18n.t("enumerations.archival_record_level.#{facet.to_s}", :default => facet) end end # labels for collection management groups return I18n.t("#{facet}._singular", :default => facet) if facet_group === "parent_type" return I18n.t("enumerations.collection_management_processing_priority.#{facet}", :default => facet) if facet_group === "processing_priority" return I18n.t("enumerations.collection_management_processing_status.#{facet}", :default => facet) if facet_group === "processing_status" if facet_group === "classification_path" return ClassificationHelper.format_classification(ASUtils.json_parse(facet)) end facet end |
- (Object) facet_query_string(facet_group, facet)
40 41 42 |
# File 'frontend/app/models/search_result_data.rb', line 40 def facet_query_string(facet_group, facet) {facet_group => facet}.to_json end |
- (Object) facets_for_filter
68 69 70 71 72 73 74 75 76 77 |
# File 'frontend/app/models/search_result_data.rb', line 68 def facets_for_filter facet_data_for_filter = @facet_data.clone facet_data_for_filter.each {|facet_group, facets| facets.delete_if{|facet, facet_map| facet_map[:count] === @search_data['total_hits'] } } facet_data_for_filter.delete_if {|facet_group, facets| facets.empty?} facet_data_for_filter end |
- (Boolean) filtered_terms?
52 53 54 |
# File 'frontend/app/models/search_result_data.rb', line 52 def filtered_terms? @search_data[:criteria].has_key?("filter_term[]") and @search_data[:criteria]["filter_term[]"].reject{|f| f.empty?}.length > 0 end |
- (Boolean) has_titles?
126 127 128 129 130 131 132 |
# File 'frontend/app/models/search_result_data.rb', line 126 def has_titles? if @search_data[:criteria].has_key?("type[]") and (types - self.class.UNTITLED_TYPES).empty? false else true end end |
- (Object) init_facets
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'frontend/app/models/search_result_data.rb', line 13 def init_facets @search_data['facets']['facet_fields'].each {|facet_group, facets| @facet_data[facet_group] = {} facets.each_slice(2).each {|facet_and_count| next if facet_and_count[1] === 0 @facet_data[facet_group][facet_and_count[0]] = { :label => facet_label_string(facet_group, facet_and_count[0]), :count => facet_and_count[1], :filter_term => facet_query_string(facet_group, facet_and_count[0]), :display_string => facet_display_string(facet_group, facet_and_count[0]) } } } end |
- (Object) init_sorts
30 31 32 33 34 35 36 37 |
# File 'frontend/app/models/search_result_data.rb', line 30 def init_sorts if sorted? @sort_data = @search_data[:criteria]["sort"].split(", ").map {|s| matches = s.match(/(\S+)\s(asc|desc)/) {:field => matches[1], :direction => matches[2]} } end end |
- (Boolean) query?
207 208 209 |
# File 'frontend/app/models/search_result_data.rb', line 207 def query? not @search_data[:criteria]["q"].blank? end |
- (Boolean) results?
122 123 124 |
# File 'frontend/app/models/search_result_data.rb', line 122 def results? @search_data.has_key?('results') and not @search_data['results'].empty? end |
- (Boolean) single_type?
134 135 136 137 138 139 140 141 142 |
# File 'frontend/app/models/search_result_data.rb', line 134 def single_type? if @search_data[:criteria].has_key?("type[]") @search_data[:criteria]["type[]"].length === 1 elsif @search_data[:type] true else false end end |
- (Object) sort_fields
148 149 150 151 152 |
# File 'frontend/app/models/search_result_data.rb', line 148 def sort_fields @sort_fields ||= [].concat(self.class.BASE_SORT_FIELDS) single_type? ? @sort_fields : @sort_fields + ['primary_type'] end |
- (Object) sort_filter_for(field, default = "asc")
187 188 189 190 191 192 193 |
# File 'frontend/app/models/search_result_data.rb', line 187 def sort_filter_for(field, default = "asc") return "#{field} #{default}" if field != sorted_by return "" if current_sort_direction != default return "#{field} #{default === "asc" ? "desc" : "asc"}" end |
- (Boolean) sorted?
154 155 156 |
# File 'frontend/app/models/search_result_data.rb', line 154 def sorted? @search_data[:criteria].has_key?("sort") end |
- (Object) sorted_by(index = 0)
162 163 164 165 166 167 168 |
# File 'frontend/app/models/search_result_data.rb', line 162 def sorted_by(index = 0) if sorted? && @sort_data[index] @sort_data[index][:field] else nil end end |
- (Boolean) sorted_by?(field)
171 172 173 174 175 176 177 |
# File 'frontend/app/models/search_result_data.rb', line 171 def sorted_by?(field) @sort_data.each do |entry| return true if entry[:field] == field end false end |
- (Object) sorted_by_label(title_label, index = 0)
195 196 197 198 199 200 201 202 203 204 205 |
# File 'frontend/app/models/search_result_data.rb', line 195 def sorted_by_label(title_label, index = 0) _sorted_by = sorted_by(index) if _sorted_by.nil? return weightable? ? I18n.t("search_sorting.relevance") : I18n.t("search_sorting.select") end label = _sorted_by == 'title_sort' ? title_label : I18n.t("search_sorting.#{_sorted_by}") direction = I18n.t("search_sorting.#{current_sort_direction(index)}") "#{label} #{direction}" end |
- (Object) types
144 145 146 |
# File 'frontend/app/models/search_result_data.rb', line 144 def types @search_data[:criteria]["type[]"] end |
- (Boolean) weightable?
158 159 160 |
# File 'frontend/app/models/search_result_data.rb', line 158 def weightable? @search_data[:criteria].has_key?("q") end |