Class: Valkyrie::Persistence::Solr::Queries::FindMembersQuery

Inherits:
Object
  • Object
show all
Defined in:
lib/valkyrie/persistence/solr/queries/find_members_query.rb

Overview

Responsible for returning all members of a given resource as Resources

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource:, connection:, resource_factory:, model:) ⇒ FindMembersQuery

Returns a new instance of FindMembersQuery.



7
8
9
10
11
12
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 7

def initialize(resource:, connection:, resource_factory:, model:)
  @resource = resource
  @connection = connection
  @resource_factory = resource_factory
  @model = model
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



6
7
8
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 6

def connection
  @connection
end

#modelObject (readonly)

Returns the value of attribute model.



6
7
8
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 6

def model
  @model
end

#resourceObject (readonly)

Returns the value of attribute resource.



6
7
8
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 6

def resource
  @resource
end

#resource_factoryObject (readonly)

Returns the value of attribute resource_factory.



6
7
8
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 6

def resource_factory
  @resource_factory
end

Instance Method Details

#docsObject



31
32
33
34
35
36
37
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 31

def docs
  options = { q: query, rows: 1_000_000_000 }
  options[:fq] = "{!raw f=internal_resource_ssim}#{model}" if model
  options[:defType] = 'lucene'
  result = connection.get("select", params: options)
  result["response"]["docs"]
end

#eachObject



18
19
20
21
22
23
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 18

def each
  return [] unless resource.id.present?
  unordered_members.sort_by { |x| member_ids.index(x.id) }.each do |member|
    yield member
  end
end

#idObject



47
48
49
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 47

def id
  resource.id.to_s
end

#member_idsObject



39
40
41
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 39

def member_ids
  Array.wrap(resource.member_ids)
end

#queryObject



43
44
45
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 43

def query
  "{!join from=#{MEMBER_IDS} to=join_id_ssi}id:#{id}"
end

#runObject



14
15
16
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 14

def run
  enum_for(:each)
end

#unordered_membersObject



25
26
27
28
29
# File 'lib/valkyrie/persistence/solr/queries/find_members_query.rb', line 25

def unordered_members
  docs.map do |doc|
    resource_factory.to_resource(object: doc)
  end
end