Sha256: 6ff06db67e6eef5894e9a11d18622c47b496f1bc5aa0e69efd89e4daf1287770

Contents?: true

Size: 1.66 KB

Versions: 7

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true
# Search for possible works that user can edit and could be a work's child or parent.
class Hyrax::My::FindWorksSearchBuilder < Hyrax::My::SearchBuilder
  include Hyrax::FilterByType

  self.default_processor_chain += [:filter_on_title, :show_only_other_works, :show_only_works_not_child, :show_only_works_not_parent]

  # Excludes the id that is part of the params
  def initialize(context)
    super(context)
    # Without an id this class will produce an invalid query.
    @id = context.params[:id] || raise("missing required parameter: id")
    @q = context.params[:q]
  end

  def filter_on_title(solr_parameters)
    solr_parameters[:fq] ||= []
    solr_parameters[:fq] += [Hyrax::SolrQueryBuilderService.construct_query(title_tesim: @q)]
  end

  def show_only_other_works(solr_parameters)
    solr_parameters[:fq] ||= []
    solr_parameters[:fq] += ["-#{Hyrax::SolrQueryBuilderService.construct_query_for_ids([parsed_id])}"]
  end

  def show_only_works_not_child(solr_parameters)
    ids = Hyrax::SolrService.query("{!field f=id}#{parsed_id}", fl: "member_ids_ssim", rows: 10_000).flat_map { |x| x.fetch("member_ids_ssim", []) }
    solr_parameters[:fq] ||= []
    solr_parameters[:fq] += ["-#{Hyrax::SolrQueryBuilderService.construct_query_for_ids([ids])}"]
  end

  def show_only_works_not_parent(solr_parameters)
    solr_parameters[:fq] ||= []
    solr_parameters[:fq]  += [
      "-" + Hyrax::SolrQueryBuilderService.construct_query(member_ids_ssim: parsed_id)
    ]
  end

  def only_works?
    true
  end

  # Since Valkyrie objects pass is an Id object, additional parsing is needed.
  def parsed_id
    @id.is_a?(String) ? @id : @id.id
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
hyrax-5.1.0.pre.beta1 app/search_builders/hyrax/my/find_works_search_builder.rb
hyrax-5.0.4 app/search_builders/hyrax/my/find_works_search_builder.rb
hyrax-5.0.3 app/search_builders/hyrax/my/find_works_search_builder.rb
hyrax-5.0.2 app/search_builders/hyrax/my/find_works_search_builder.rb
hyrax-5.0.1 app/search_builders/hyrax/my/find_works_search_builder.rb
hyrax-5.0.0 app/search_builders/hyrax/my/find_works_search_builder.rb
hyrax-5.0.0.rc3 app/search_builders/hyrax/my/find_works_search_builder.rb