diff options
-rw-r--r-- | lib/gitlab/string_path.rb | 35 | ||||
-rw-r--r-- | spec/lib/gitlab/string_path_spec.rb | 21 |
2 files changed, 56 insertions, 0 deletions
diff --git a/lib/gitlab/string_path.rb b/lib/gitlab/string_path.rb new file mode 100644 index 00000000000..be65b41dff5 --- /dev/null +++ b/lib/gitlab/string_path.rb @@ -0,0 +1,35 @@ +module Gitlab + ## + # Class that represents a path to a file or directory + # + # This is IO-operations safe class, that does similar job to + # Ruby's Pathname but without the risk of accessing filesystem. + # + # + class StringPath + def initialize(path, universe) + @path = path + @universe = universe + end + + def absolute? + @path.start_with?('/') + end + + def relative? + !absolute? + end + + def directory? + @path.end_with?('/') + end + + def file? + !directory? + end + + def to_s + @path + end + end +end diff --git a/spec/lib/gitlab/string_path_spec.rb b/spec/lib/gitlab/string_path_spec.rb new file mode 100644 index 00000000000..14a08bcb49b --- /dev/null +++ b/spec/lib/gitlab/string_path_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +describe Gitlab::StringPath do + let(:universe) do + ['path/dir_1/', + 'path/dir_1/file_1', + 'path/second_dir', + 'path/second_dir/dir_3/file_2', + 'path/second_dir/dir_3/file_3', + 'another_file', + '/file/with/absolute_path'] + end + + describe '/file/with/absolute_path' do + subject { described_class.new('/file/with/absolute_path', universe) } + + it { is_expected.to be_absolute } + it { is_expected.to_not be_relative } + it { is_expected.to be_file } + end +end |