Class: Valkyrie::Persistence::Memory::QueryService
- Inherits:
-
Object
- Object
- Valkyrie::Persistence::Memory::QueryService
- Defined in:
- lib/valkyrie/persistence/memory/query_service.rb
Overview
Documentation for Query Services in general is maintained here.
Query Service for the memory metadata adapter.
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
-
#query_handlers ⇒ Object
readonly
Returns the value of attribute query_handlers.
Instance Method Summary collapse
-
#count_all_of_model(model:) ⇒ Object
Count all objects of a given model.
-
#custom_queries ⇒ Valkyrie::Persistence::CustomQueryContainer
Get the set of custom queries configured for this query service.
-
#find_all ⇒ Array<Valkyrie::Resource>
Get all objects.
-
#find_all_of_model(model:) ⇒ Array<Valkyrie::Resource>
Get all objects of a given model.
-
#find_by(id:) ⇒ Valkyrie::Resource
Get a single resource by ID.
-
#find_by_alternate_identifier(alternate_identifier:) ⇒ Valkyrie::Resource
Get a single resource by ‘alternate_identifier`.
-
#find_inverse_references_by(resource: nil, id: nil, property:, model: nil) ⇒ Array<Valkyrie::Resource>
Get all resources which link to a resource with a given property.
-
#find_many_by_ids(ids:) ⇒ Array<Valkyrie::Resource>
Get a batch of resources by ID.
-
#find_members(resource:, model: nil) ⇒ Array<Valkyrie::Resource>
Get all members of a given resource.
-
#find_parents(resource:) ⇒ Array<Valkyrie::Resource>
Find all parents of a given resource.
-
#find_references_by(resource:, property:, model: nil) ⇒ Array<Valkyrie::Resource>
Get all resources referenced from a resource with a given property.
-
#initialize(adapter:) ⇒ QueryService
constructor
A new instance of QueryService.
Constructor Details
#initialize(adapter:) ⇒ QueryService
Many query service methods are part of Valkyrie’s public API, but instantiation itself is not
Returns a new instance of QueryService.
13 14 15 16 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 13 def initialize(adapter:) @adapter = adapter @query_handlers = [] end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
7 8 9 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 7 def adapter @adapter end |
#query_handlers ⇒ Object (readonly)
Returns the value of attribute query_handlers.
7 8 9 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 7 def query_handlers @query_handlers end |
Instance Method Details
#count_all_of_model(model:) ⇒ Object
Count all objects of a given model.
82 83 84 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 82 def count_all_of_model(model:) cache.values.select { |obj| obj.is_a?(model) }.count end |
#custom_queries ⇒ Valkyrie::Persistence::CustomQueryContainer
Get the set of custom queries configured for this query service.
156 157 158 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 156 def custom_queries @custom_queries ||= ::Valkyrie::Persistence::CustomQueryContainer.new(query_service: self) end |
#find_all ⇒ Array<Valkyrie::Resource>
Get all objects.
64 65 66 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 64 def find_all cache.values end |
#find_all_of_model(model:) ⇒ Array<Valkyrie::Resource>
Get all objects of a given model.
72 73 74 75 76 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 72 def find_all_of_model(model:) cache.values.select do |obj| obj.is_a?(model) end end |
#find_by(id:) ⇒ Valkyrie::Resource
Get a single resource by ID.
24 25 26 27 28 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 24 def find_by(id:) id = Valkyrie::ID.new(id.to_s) if id.is_a?(String) validate_id(id) cache[id] || raise(::Valkyrie::Persistence::ObjectNotFoundError) end |
#find_by_alternate_identifier(alternate_identifier:) ⇒ Valkyrie::Resource
Get a single resource by ‘alternate_identifier`. Alternate identifiers are identifiers (like NOIDs, DOIs, ARKs, etc.) that are not the system-generated ID, but might be used to identify a resource in an application (e.g., to make shorter URLs).
38 39 40 41 42 43 44 45 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 38 def find_by_alternate_identifier(alternate_identifier:) alternate_identifier = Valkyrie::ID.new(alternate_identifier.to_s) if alternate_identifier.is_a?(String) validate_id(alternate_identifier) cache.select do |_key, resource| next unless resource[:alternate_ids] resource[:alternate_ids].include?(alternate_identifier) end.values.first || raise(::Valkyrie::Persistence::ObjectNotFoundError) end |
#find_inverse_references_by(resource: nil, id: nil, property:, model: nil) ⇒ Array<Valkyrie::Resource>
Get all resources which link to a resource with a given property.
131 132 133 134 135 136 137 138 139 140 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 131 def find_inverse_references_by(resource: nil, id: nil, property:, model: nil) raise ArgumentError, "Provide resource or id" unless resource || id ensure_persisted(resource) if resource id ||= resource.id result = find_all.select do |obj| Array.wrap(obj[property]).include?(id) end return result unless model result.select { |obj| obj.is_a?(model) } end |
#find_many_by_ids(ids:) ⇒ Array<Valkyrie::Resource>
Get a batch of resources by ID.
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 51 def find_many_by_ids(ids:) ids = ids.uniq ids.map do |id| begin find_by(id: id) rescue ::Valkyrie::Persistence::ObjectNotFoundError nil end end.reject(&:nil?) end |
#find_members(resource:, model: nil) ⇒ Array<Valkyrie::Resource>
Get all members of a given resource.
91 92 93 94 95 96 97 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 91 def find_members(resource:, model: nil) result = member_ids(resource: resource).map do |id| find_by(id: id) end return result unless model result.select { |obj| obj.is_a?(model) } end |
#find_parents(resource:) ⇒ Array<Valkyrie::Resource>
Find all parents of a given resource.
148 149 150 151 152 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 148 def find_parents(resource:) cache.values.select do |record| member_ids(resource: record).include?(resource.id) end end |
#find_references_by(resource:, property:, model: nil) ⇒ Array<Valkyrie::Resource>
Get all resources referenced from a resource with a given property.
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/valkyrie/persistence/memory/query_service.rb', line 106 def find_references_by(resource:, property:, model: nil) refs = Array.wrap(resource[property]).map do |id| begin find_by(id: id) rescue ::Valkyrie::Persistence::ObjectNotFoundError nil end end.reject(&:nil?) refs.uniq! unless ordered_property?(resource: resource, property: property) return refs unless model refs.select { |obj| obj.is_a?(model) } end |