module Ddr::Models::SearchBuilder

Blacklight SearchBuilder methods.

Include in controller search builder class:

class SearchBuilder < Blacklight::Solr::SearchBuilder
  include Ddr::Models::SearchBuilder
end

Public Instance Methods

apply_gated_discovery(solr_parameters) click to toggle source

@note Copied from Hydra::AccessControlsEnforcement

# File lib/ddr/models/search/search_builder.rb, line 14
def apply_gated_discovery(solr_parameters)
  solr_parameters[:fq] ||= []
  solr_parameters[:fq] << gated_discovery_filters.join(" OR ")
end
current_ability() click to toggle source
# File lib/ddr/models/search/search_builder.rb, line 19
def current_ability
  # :scope is assumed here to be a controller which responds to :current_ability
  scope.current_ability
end
gated_discovery_filters() click to toggle source
# File lib/ddr/models/search/search_builder.rb, line 24
def gated_discovery_filters
  [resource_role_filters, policy_role_filters].compact
end
policy_role_filters() click to toggle source
# File lib/ddr/models/search/search_builder.rb, line 40
def policy_role_filters
  if policy_role_policies.present?
    rels = policy_role_policies.map { |pid| [:isGovernedBy, pid] }
    ActiveFedora::SolrQueryBuilder.construct_query_for_rel(rels, " OR ")
  end
end
policy_role_policies() click to toggle source

List of IDs for policies on which any of the current user's agent has a role in policy scope

# File lib/ddr/models/search/search_builder.rb, line 29
def policy_role_policies
  @policy_role_policies ||= Array.new.tap do |uris|
    filters = current_ability.agents.map do |agent|
      "#{Ddr::Index::Fields::POLICY_ROLE}:\"#{agent}\""
    end.join(" OR ")
    query = "#{Ddr::Index::Fields::ACTIVE_FEDORA_MODEL}:Collection AND (#{filters})"
    results = ActiveFedora::SolrService.query(query, rows: Collection.count, fl: Ddr::Index::Fields::ID)
    results.each_with_object(uris) { |r, memo| memo << r[Ddr::Index::Fields::ID] }
  end
end
resource_role_filters() click to toggle source
# File lib/ddr/models/search/search_builder.rb, line 47
def resource_role_filters
  current_ability.agents.map do |agent|
    ActiveFedora::SolrQueryBuilder.raw_query(Ddr::Index::Fields::RESOURCE_ROLE, agent)
  end.join(" OR ")
end