Improve code in container repository path class
This commit is contained in:
parent
1a47986b3d
commit
e10dae3e3c
2 changed files with 21 additions and 10 deletions
|
@ -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
|
||||
|
|
|
@ -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' }
|
||||
|
|
Loading…
Reference in a new issue