Module: Ddr::Models::SearchBuilder

Defined in:
lib/ddr/models/search/search_builder.rb

Overview

Blacklight SearchBuilder methods.

Include in controller search builder class:

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

Instance Method Summary collapse

Instance Method Details

#apply_gated_discovery(solr_parameters) ⇒ Object

Note:

Copied from Hydra::AccessControlsEnforcement



14
15
16
17
# 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_abilityObject



19
20
21
22
# 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_filtersObject



24
25
26
# File 'lib/ddr/models/search/search_builder.rb', line 24

def gated_discovery_filters
  [resource_role_filters, policy_role_filters].compact
end

#policy_role_filtersObject



40
41
42
43
44
45
# 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_policiesObject

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



29
30
31
32
33
34
35
36
37
38
# 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_filtersObject



47
48
49
50
51
# 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