Add support for parent directories in StringPath
This support is not completed though, as parent directory that is first in collection returned by `directories!` is not iterable yet.
This commit is contained in:
parent
aae674c3a2
commit
b19e958d86
4 changed files with 26 additions and 8 deletions
|
@ -1,6 +1,6 @@
|
|||
%tr{ class: 'tree-item' }
|
||||
%td.tree-item-file-name
|
||||
= tree_icon('folder', '755', directory.basename)
|
||||
= tree_icon('folder', '755', directory.name)
|
||||
%span.str-truncated
|
||||
= link_to directory.basename, browse_namespace_project_build_artifacts_path(@project.namespace, @project, @build, path: directory.path)
|
||||
= link_to directory.name, browse_namespace_project_build_artifacts_path(@project.namespace, @project, @build, path: directory.path)
|
||||
%td
|
||||
|
|
|
@ -16,5 +16,5 @@
|
|||
%tr
|
||||
%th Name
|
||||
%th Download
|
||||
= render partial: 'tree_directory', collection: @path.directories, as: :directory
|
||||
= render partial: 'tree_directory', collection: @path.directories!, as: :directory
|
||||
= render partial: 'tree_file', collection: @path.files, as: :file
|
||||
|
|
|
@ -5,6 +5,7 @@ module Gitlab
|
|||
# This is IO-operations safe class, that does similar job to
|
||||
# Ruby's Pathname but without the risk of accessing filesystem.
|
||||
#
|
||||
# TODO: better support for './' and '../'
|
||||
#
|
||||
class StringPath
|
||||
attr_reader :path, :universe
|
||||
|
@ -45,10 +46,13 @@ module Gitlab
|
|||
end
|
||||
|
||||
def basename
|
||||
name = @path.split(::File::SEPARATOR).last
|
||||
directory? ? name + ::File::SEPARATOR : name
|
||||
end
|
||||
|
||||
def name
|
||||
@path.split(::File::SEPARATOR).last
|
||||
end
|
||||
|
||||
def has_descendants?
|
||||
descendants.any?
|
||||
end
|
||||
|
@ -68,6 +72,10 @@ module Gitlab
|
|||
children.select { |child| child.directory? }
|
||||
end
|
||||
|
||||
def directories!
|
||||
has_parent? ? directories.prepend(new(@path + '../')) : directories
|
||||
end
|
||||
|
||||
def files
|
||||
return [] unless directory?
|
||||
children.select { |child| child.file? }
|
||||
|
|
|
@ -50,18 +50,20 @@ describe Gitlab::StringPath do
|
|||
|
||||
describe 'path/dir_1/', path: 'path/dir_1/' do
|
||||
subject { |example| path(example) }
|
||||
|
||||
it { is_expected.to have_parent }
|
||||
|
||||
describe '#basename' do
|
||||
subject { |example| path(example).basename }
|
||||
|
||||
it { is_expected.to eq 'dir_1/' }
|
||||
end
|
||||
|
||||
describe '#name' do
|
||||
subject { |example| path(example).name }
|
||||
it { is_expected.to eq 'dir_1' }
|
||||
end
|
||||
|
||||
describe '#parent' do
|
||||
subject { |example| path(example).parent }
|
||||
|
||||
it { is_expected.to eq string_path('path/') }
|
||||
end
|
||||
|
||||
|
@ -101,6 +103,15 @@ describe Gitlab::StringPath do
|
|||
it { is_expected.to all(be_an_instance_of described_class) }
|
||||
it { is_expected.to contain_exactly string_path('path/dir_1/subdir/') }
|
||||
end
|
||||
|
||||
describe '#directories!' do
|
||||
subject { |example| path(example).directories! }
|
||||
|
||||
it { is_expected.to all(be_directory) }
|
||||
it { is_expected.to all(be_an_instance_of described_class) }
|
||||
it { is_expected.to contain_exactly string_path('path/dir_1/subdir/'),
|
||||
string_path('path/dir_1/../') }
|
||||
end
|
||||
end
|
||||
|
||||
describe './', path: './' do
|
||||
|
@ -118,7 +129,6 @@ describe Gitlab::StringPath do
|
|||
|
||||
describe '#children' do
|
||||
subject { |example| path(example).children }
|
||||
|
||||
it { expect(subject.count).to eq 3 }
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue