diff --git a/lib/container_registry/path.rb b/lib/container_registry/path.rb index 6e8d62b77c7..f76c6489381 100644 --- a/lib/container_registry/path.rb +++ b/lib/container_registry/path.rb @@ -14,24 +14,23 @@ module ContainerRegistry def initialize(path) @path = path - @nodes = path.to_s.split('/') - end - - def to_s - @path end def valid? @path =~ Gitlab::Regex.container_repository_name_regex && - @nodes.size > 1 && - @nodes.size < Namespace::NUMBER_OF_ANCESTORS_ALLOWED + nodes.size > 1 && + nodes.size < Namespace::NUMBER_OF_ANCESTORS_ALLOWED + end + + def nodes + @nodes ||= @path.to_s.split('/') end def components raise InvalidRegistryPathError unless valid? - @components ||= @nodes.size.downto(2).map do |length| - @nodes.take(length).join('/') + @components ||= nodes.size.downto(2).map do |length| + nodes.take(length).join('/') end end @@ -51,7 +50,7 @@ module ContainerRegistry end def repository_project - @project ||= Project.where_full_path_in(components.first(3))&.first + @project ||= Project.where_full_path_in(components.first(3)).first end def repository_name @@ -59,5 +58,9 @@ module ContainerRegistry @path.remove(%r(^?#{Regexp.escape(repository_project.full_path)}/?)) end + + def to_s + @path + end end end diff --git a/spec/lib/container_registry/path_spec.rb b/spec/lib/container_registry/path_spec.rb index 1973da65f0a..825c61beeb3 100644 --- a/spec/lib/container_registry/path_spec.rb +++ b/spec/lib/container_registry/path_spec.rb @@ -3,6 +3,14 @@ require 'spec_helper' describe ContainerRegistry::Path do subject { described_class.new(path) } + describe '#nodes' do + let(:path) { 'path/to/some/project' } + + it 'splits elements by a forward slash' do + expect(subject.nodes).to eq %w[path to some project] + end + end + describe '#components' do context 'when repository path is valid' do let(:path) { 'path/to/some/project' }