Class: Hyrax::CustomQueries::FindByDateRange

Inherits:
Object
  • Object
show all
Defined in:
app/services/hyrax/custom_queries/find_by_date_range.rb

Overview

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query_service:) ⇒ FindByDateRange

Returns a new instance of FindByDateRange.



11
12
13
# File 'app/services/hyrax/custom_queries/find_by_date_range.rb', line 11

def initialize(query_service:)
  @query_service = query_service
end

Instance Attribute Details

#query_serviceObject (readonly)

Returns the value of attribute query_service.



15
16
17
# File 'app/services/hyrax/custom_queries/find_by_date_range.rb', line 15

def query_service
  @query_service
end

Class Method Details

.queriesObject



7
8
9
# File 'app/services/hyrax/custom_queries/find_by_date_range.rb', line 7

def self.queries
  [:find_by_date_range]
end

Instance Method Details

#find_by_date_range(start_datetime:, end_datetime: nil, models: nil) ⇒ Array<Hyrax::Resource>

Note:

this is an unoptimized default implementation of this custom query. it’s Hyrax’s policy to provide such implementations of custom queries in use for cross-compatibility of Valkyrie query services. it’s advisable to provide an optimized query for the specific adapter.

Parameters:

  • models (Array) (defaults to: nil)
  • start_datetime (DateTime)
  • end_datetime (DateTime) (defaults to: nil)

Returns:



29
30
31
32
33
34
35
# File 'app/services/hyrax/custom_queries/find_by_date_range.rb', line 29

def find_by_date_range(start_datetime:, end_datetime: nil, models: nil)
  end_range = end_datetime.blank? ? '*' : end_datetime.utc.xmlschema
  query = "system_create_dtsi:[#{start_datetime.utc.xmlschema} TO #{end_range}]"
  query += " AND has_model_ssim: (#{models.map { |m| "\"#{m}\"" }.join(' OR ')})" unless models.empty?
  ids = Hyrax::SolrService.query_result(query, fl: 'id')['response']['docs'].map { |doc| doc['id'] }
  Hyrax.query_service.find_many_by_ids(ids: ids)
end