summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-01-04 13:40:42 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-01-14 12:48:15 +0100
commitf948c00757ca9529817c7368610b0c0d6734d48f (patch)
treeb163f8e0c65fd2405efc92bab5da9926241f88b6
parenta7f99b67a0bf1160f41ebf4dc92c618eb13a7a10 (diff)
downloadgitlab-ce-f948c00757ca9529817c7368610b0c0d6734d48f.tar.gz
Do not depend on universe when checking parent in `StringPath`
-rw-r--r--lib/gitlab/string_path.rb15
-rw-r--r--spec/lib/gitlab/string_path_spec.rb17
2 files changed, 28 insertions, 4 deletions
diff --git a/lib/gitlab/string_path.rb b/lib/gitlab/string_path.rb
index 9948502e8ea..4d024b3ff73 100644
--- a/lib/gitlab/string_path.rb
+++ b/lib/gitlab/string_path.rb
@@ -7,6 +7,7 @@ module Gitlab
#
class StringPath
attr_reader :path, :universe
+ attr_accessor :name
def initialize(path, universe, metadata = [])
@path = sanitize(path)
@@ -35,7 +36,7 @@ module Gitlab
end
def has_parent?
- @universe.include?(@path.sub(basename, ''))
+ nodes > 1
end
def parent
@@ -48,7 +49,7 @@ module Gitlab
end
def name
- @path.split(::File::SEPARATOR).last
+ @name || @path.split(::File::SEPARATOR).last
end
def has_descendants?
@@ -75,7 +76,11 @@ module Gitlab
end
def directories!
- @path =~ %r{^\./[^/]/} ? directories.prepend(parent) : directories
+ return directories unless has_parent? && directory?
+
+ dotted_parent = parent
+ dotted_parent.name = '..'
+ directories.prepend(dotted_parent)
end
def files
@@ -88,6 +93,10 @@ module Gitlab
@metadata[index]
end
+ def nodes
+ @path.count('/') + (file? ? 1 : 0)
+ end
+
def ==(other)
@path == other.path && @universe == other.universe
end
diff --git a/spec/lib/gitlab/string_path_spec.rb b/spec/lib/gitlab/string_path_spec.rb
index 0ef2155cb9b..a54bf109c80 100644
--- a/spec/lib/gitlab/string_path_spec.rb
+++ b/spec/lib/gitlab/string_path_spec.rb
@@ -30,7 +30,7 @@ describe Gitlab::StringPath do
it { is_expected.to be_absolute }
it { is_expected.to_not be_relative }
it { is_expected.to be_file }
- it { is_expected.to_not have_parent }
+ it { is_expected.to have_parent }
it { is_expected.to_not have_descendants }
describe '#basename' do
@@ -140,6 +140,21 @@ describe Gitlab::StringPath do
end
end
+ describe '#nodes', path: './' do
+ subject { |example| path(example).nodes }
+ it { is_expected.to eq 1 }
+ end
+
+ describe '#nodes', path: './test' do
+ subject { |example| path(example).nodes }
+ it { is_expected.to eq 2 }
+ end
+
+ describe '#nodes', path: './test/' do
+ subject { |example| path(example).nodes }
+ it { is_expected.to eq 2 }
+ end
+
describe '#metadata' do
let(:universe) do
['path/', 'path/file1', 'path/file2']