diff --git a/lib/resource_registry/registry.rb b/lib/resource_registry/registry.rb index d958a14..f50be28 100644 --- a/lib/resource_registry/registry.rb +++ b/lib/resource_registry/registry.rb @@ -1,5 +1,5 @@ +# typed: strict # frozen_string_literal: true -# typed: false require_relative "resource" require_relative "capabilities/capability_config" @@ -49,9 +49,11 @@ def fetch!(identifier) ).returns(T.nilable(Resource)) end def fetch_for_repository(repository_class) - fetch_all.values.find { |r| r.repository == repository_class } + resources_by_raw_repository[repository_class.to_s] end + alias find_for_repository fetch_for_repository + sig { returns(T::Hash[String, Resource]) } def fetch_all resources @@ -71,20 +73,20 @@ def fetch_with_capabilities(*capabilities) end end - sig do - params( - repository: T::Class[ResourceRegistry::Repositories::Base[T.untyped]] - ).returns(T.nilable(Resource)) - end - def find_by_repository(repository) - fetch_all.values.find { |resource| resource.repository == repository } - end - private sig { returns(T::Hash[String, Resource]) } attr_accessor :resources + sig { returns(T::Hash[String, Resource]) } + def resources_by_raw_repository + @resources_by_raw_repository ||= + T.let( + resources.values.index_by(&:repository_raw), + T.nilable(T::Hash[String, Resource]) + ) + end + sig { params(resources: T::Array[Resource]).returns(T::Boolean) } def duplicated_identifier?(resources) resources.map(&:identifier).uniq.size != resources.size diff --git a/lib/resource_registry/resource.rb b/lib/resource_registry/resource.rb index 7edd957..bd14260 100644 --- a/lib/resource_registry/resource.rb +++ b/lib/resource_registry/resource.rb @@ -210,7 +210,7 @@ def verbs_except(except) def dump { "identifier" => identifier, - "repository" => repository.to_s, + "repository" => repository_raw, "description" => description, "relationships" => relationships.values.map(&:dump), "capabilities" =>