Skip to content

Commit

Permalink
Ensure the value passed to find_by(id:) is a Valkyrie::ID
Browse files Browse the repository at this point in the history
Fixed by #271
  • Loading branch information
jcoyne committed Oct 14, 2017
1 parent 19194a2 commit fcb5b7c
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 1 deletion.
7 changes: 7 additions & 0 deletions lib/valkyrie/persistence/active_fedora/query_service.rb
Expand Up @@ -11,6 +11,7 @@ def find_all_of_model(model:)
end

def find_by(id:)
validate_id(id)
Valkyrie::Persistence::ActiveFedora::Queries::FindByIdQuery.new(id).run
end

Expand All @@ -33,6 +34,12 @@ def find_inverse_references_by(resource:, property:)
def custom_queries
@custom_queries ||= ::Valkyrie::Persistence::CustomQueryContainer.new(query_service: self)
end

private

def validate_id(id)
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a? Valkyrie::ID
end
end
end
end
7 changes: 7 additions & 0 deletions valkyrie/lib/valkyrie/persistence/fedora/query_service.rb
Expand Up @@ -8,6 +8,7 @@ def initialize(adapter:)
end

def find_by(id:)
validate_id(id)
uri = adapter.id_to_uri(id)
begin
resource = Ldp::Resource.for(connection, uri, connection.get(uri))
Expand Down Expand Up @@ -82,5 +83,11 @@ def find_inverse_references_by(resource:, property:)
def custom_queries
@custom_queries ||= ::Valkyrie::Persistence::CustomQueryContainer.new(query_service: self)
end

private

def validate_id(id)
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a? Valkyrie::ID
end
end
end
7 changes: 7 additions & 0 deletions valkyrie/lib/valkyrie/persistence/memory/query_service.rb
Expand Up @@ -15,6 +15,7 @@ def initialize(adapter:)
# isn't in the persistence backend.
# @return [Valkyrie::Resource] The object being searched for.
def find_by(id:)
validate_id(id)
cache[id] || raise(::Valkyrie::Persistence::ObjectNotFoundError)
end

Expand Down Expand Up @@ -90,5 +91,11 @@ def member_ids(resource:)
def custom_queries
@custom_queries ||= ::Valkyrie::Persistence::CustomQueryContainer.new(query_service: self)
end

private

def validate_id(id)
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a? Valkyrie::ID
end
end
end
7 changes: 7 additions & 0 deletions valkyrie/lib/valkyrie/persistence/postgres/query_service.rb
Expand Up @@ -24,6 +24,7 @@ def find_all_of_model(model:)

# (see Valkyrie::Persistence::Memory::QueryService#find_by)
def find_by(id:)
validate_id(id)
resource_factory.to_resource(object: orm_class.find(id))
rescue ActiveRecord::RecordNotFound
raise Valkyrie::Persistence::ObjectNotFoundError
Expand Down Expand Up @@ -99,5 +100,11 @@ def find_references_query
def custom_queries
@custom_queries ||= ::Valkyrie::Persistence::CustomQueryContainer.new(query_service: self)
end

private

def validate_id(id)
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a? Valkyrie::ID
end
end
end
7 changes: 7 additions & 0 deletions valkyrie/lib/valkyrie/persistence/solr/query_service.rb
Expand Up @@ -12,6 +12,7 @@ def initialize(connection:, resource_factory:)

# (see Valkyrie::Persistence::Memory::QueryService#find_by)
def find_by(id:)
validate_id(id)
Valkyrie::Persistence::Solr::Queries::FindByIdQuery.new(id, connection: connection, resource_factory: resource_factory).run
end

Expand Down Expand Up @@ -48,5 +49,11 @@ def find_inverse_references_by(resource:, property:)
def custom_queries
@custom_queries ||= ::Valkyrie::Persistence::CustomQueryContainer.new(query_service: self)
end

private

def validate_id(id)
raise ArgumentError, 'id must be a Valkyrie::ID' unless id.is_a? Valkyrie::ID
end
end
end
7 changes: 6 additions & 1 deletion valkyrie/lib/valkyrie/specs/shared_specs/queries.rb
Expand Up @@ -57,8 +57,13 @@ class SecondResource < Valkyrie::Resource

expect(query_service.find_by(id: resource.id).id).to eq resource.id
end

it "returns a Valkyrie::Persistence::ObjectNotFoundError for a non-found ID" do
expect { query_service.find_by(id: "123123123") }.to raise_error ::Valkyrie::Persistence::ObjectNotFoundError
expect { query_service.find_by(id: Valkyrie::ID.new("123123123")) }.to raise_error ::Valkyrie::Persistence::ObjectNotFoundError
end

it 'raises an error if the id is not a Valkyrie::ID' do
expect { query_service.find_by(id: "123123123") }.to raise_error ArgumentError
end
end

Expand Down

0 comments on commit fcb5b7c

Please sign in to comment.