From f03d4eec1b11b8a03413c89b7d2cadcd0cfd6ef9 Mon Sep 17 00:00:00 2001 From: Tyler Hunt Date: Sat, 22 Jun 2019 12:19:48 -0400 Subject: [PATCH] Add Faker::File.dir (#1361) * Add file dir Add Faker::File.dir for generating directory paths. Fix an imprecise test on Faker::File.file_name and update it to use the new Faker::File.dir method. * Update file.md --- doc/default/file.md | 8 +++++++- doc/unreleased/default/file.md | 8 +++++++- lib/faker/default/file.rb | 11 ++++++++++- test/faker/default/test_faker_file.rb | 14 +++++++++++++- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/doc/default/file.md b/doc/default/file.md index d52b4cd939..23cc1742c1 100644 --- a/doc/default/file.md +++ b/doc/default/file.md @@ -11,5 +11,11 @@ Faker::File.mime_type #=> "application/pdf" Faker::File.file_name('path/to') #=> "path/to/something_random.jpg" Faker::File.file_name('foo/bar', 'baz') #=> "foo/bar/baz.zip" Faker::File.file_name('foo/bar', 'baz', 'doc') #=> "foo/bar/baz.doc" -Faker::File.file_name('foo/bar', 'baz', 'mp3', '\') #=> "foo\bar\baz.mp3" +Faker::File.file_name('foo/bar', 'baz', 'mp3', '\\') #=> "foo\bar\baz.mp3" + +# Optional arguments: segment_count, root, directory_separator +Faker::File.dir #=> "path/to/something_random" +Faker::File.dir(2) #=> "foo/bar" +Faker::File.dir(3, '/') #=> "/foo/bar/baz" +Faker::File.dir(3, nil, '\\') #=> "foo\bar\baz" ``` diff --git a/doc/unreleased/default/file.md b/doc/unreleased/default/file.md index d52b4cd939..23cc1742c1 100644 --- a/doc/unreleased/default/file.md +++ b/doc/unreleased/default/file.md @@ -11,5 +11,11 @@ Faker::File.mime_type #=> "application/pdf" Faker::File.file_name('path/to') #=> "path/to/something_random.jpg" Faker::File.file_name('foo/bar', 'baz') #=> "foo/bar/baz.zip" Faker::File.file_name('foo/bar', 'baz', 'doc') #=> "foo/bar/baz.doc" -Faker::File.file_name('foo/bar', 'baz', 'mp3', '\') #=> "foo\bar\baz.mp3" +Faker::File.file_name('foo/bar', 'baz', 'mp3', '\\') #=> "foo\bar\baz.mp3" + +# Optional arguments: segment_count, root, directory_separator +Faker::File.dir #=> "path/to/something_random" +Faker::File.dir(2) #=> "foo/bar" +Faker::File.dir(3, '/') #=> "/foo/bar/baz" +Faker::File.dir(3, nil, '\\') #=> "foo\bar\baz" ``` diff --git a/lib/faker/default/file.rb b/lib/faker/default/file.rb index fd76a99d0b..44fa8ec0d0 100644 --- a/lib/faker/default/file.rb +++ b/lib/faker/default/file.rb @@ -3,6 +3,15 @@ module Faker class File < Base class << self + def dir(segment_count = 3, root = nil, directory_separator = '/') + Array + .new(segment_count) { Faker::Internet.slug } + .unshift(root) + .compact + .join(directory_separator) + .squeeze(directory_separator) + end + def extension fetch('file.extension') end @@ -12,7 +21,7 @@ def mime_type end def file_name(dir = nil, name = nil, ext = nil, directory_separator = '/') - dir ||= Faker::Internet.slug + dir ||= dir(1) name ||= Faker::Lorem.word.downcase ext ||= extension diff --git a/test/faker/default/test_faker_file.rb b/test/faker/default/test_faker_file.rb index 9ecb75bf2a..a8975a4323 100644 --- a/test/faker/default/test_faker_file.rb +++ b/test/faker/default/test_faker_file.rb @@ -16,6 +16,18 @@ def test_mime_type_format end def test_file_name - assert @tester.file_name.match(%r{([a-z\-_]+)(\\|\/)([a-z\-_]+)\.([a-z]+)}) + assert @tester + .file_name + .match(%r{^([a-z\-_.]+)(\\|\/)([a-z\-_]+)\.([a-z]+)$}) + end + + def test_dir + assert @tester.dir.match(%r{^(([a-z\-_.]+)(\\|\/)){2}([a-z\-_.]+)$}) + end + + def test_dir_with_args + assert @tester + .dir(2, '\\root\\', '\\') + .match(%r{^\\root(\\([a-z\-_.]+)){2}$}) end end