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