module FeduxOrgStdlib::Filesystem

File system @deprecated Please use github.com/cucumber/aruba instead

Public Instance Methods

cleanup_working_directory() click to toggle source

Clean up test directory

# File lib/fedux_org_stdlib/filesystem.rb, line 40
def cleanup_working_directory
  delete_working_directory
  create_working_directory
end
create_directory(*dirs) click to toggle source

Create directory(ies)

@param [String,Array] dirs

the directories to be created, multiple arguments are possible as well

@return [String,Array]

returns a string if there was only one file given, and an array with
muliple files
# File lib/fedux_org_stdlib/filesystem.rb, line 60
def create_directory(*dirs)
  raise_if_forbidden_path_for_create_operation(dirs)

  directories = expand_path(dirs.flatten)
  FileUtils.mkdir_p(directories)

  if directories.size == 1
    return directories.first
  else
    return directories
  end
end
create_file(path, content = '', mode = 0644) click to toggle source

Create a single file

@param [String] path

the path for the new file (can include directories)

@param [String] content

the content written to the file

@return [String]

the path to the created file
# File lib/fedux_org_stdlib/filesystem.rb, line 129
def create_file(path, content = '', mode = 0644)
  raise_if_forbidden_path_for_create_operation(path)

  file = expand_path(path).first
  directory = ::File.dirname(file)

  FileUtils.mkdir_p(directory) unless directory == '.'
  ::File.open(file, 'wb') do |f|
    f.write content
  end

  FileUtils.chmod(mode, file)

  file
end
create_working_directory() click to toggle source

Create temporary directory

# File lib/fedux_org_stdlib/filesystem.rb, line 30
def create_working_directory
  FileUtils.mkdir_p(working_directory) unless ::File.exist? working_directory
end
delete_directory(*dirs) click to toggle source

Delete directory(ies)

@param [String, Array] dirs

the directories to be deleted, multiple arguments are possible as well

@return [String,Array]

returns a string if there was only one file given, and an array with
muliple files
# File lib/fedux_org_stdlib/filesystem.rb, line 81
def delete_directory(*dirs)
  raise_if_forbidden_path_for_delete_operation(dirs)

  directories = expand_path(dirs.flatten)
  FileUtils.rm_r(directories)

  if directories.size == 1
    return directories.first
  else
    return directories
  end
end
delete_file(*files) click to toggle source

Delete a single file

@param [String] files

the path for the new file (can include directories)

@return [String]

the path to the deleted file
# File lib/fedux_org_stdlib/filesystem.rb, line 152
def delete_file(*files)
  raise_if_forbidden_path_for_delete_operation(files)

  files_to_be_deleted = expand_path(files.flatten)
  FileUtils.rm(files_to_be_deleted)

  if files_to_be_deleted.size == 1
    return files_to_be_deleted.first
  else
    return files_to_be_deleted
  end
end
delete_working_directory() click to toggle source

Delete temporary directory

# File lib/fedux_org_stdlib/filesystem.rb, line 35
def delete_working_directory
  FileUtils.rm_rf(working_directory) if ::File.exist? working_directory
end
expand_path(*paths) click to toggle source

Expand path based on temporary directory

@param [String, Array, Multiple Values] paths

the paths to be expanded

@return [Array, String]

the expanded arrays
# File lib/fedux_org_stdlib/filesystem.rb, line 186
def expand_path(*paths)
  raise_if_forbidden_path_for_create_operation(paths)

  paths.flatten.map do |p|
    case p
    when /^~/
      ::File.expand_path(p)
    else
      ::File.join(working_directory, p)
    end
  end
end
in_working_directory(&block)
path_does_not_exist?(*paths) click to toggle source

Check absence of path(s)

@param [String,Array] paths

which path(s) should be checked, multiple arguments are possible as well

@return [TrueClass,FalseClass]

the result of all checks done
# File lib/fedux_org_stdlib/filesystem.rb, line 115
def path_does_not_exist?(*paths)
  !path_exists?(paths)
end
path_exists?(*paths) click to toggle source

Check existence of path(s)

@param [String,Array] paths

which path(s) should be checked, multiple arguments are possible as well

@return [TrueClass,FalseClass]

the result of all checks done
# File lib/fedux_org_stdlib/filesystem.rb, line 101
def path_exists?(*paths)
  raise_if_forbidden_path_for_create_operation(paths)

  paths_expanded = expand_path(paths.flatten)
  paths_expanded.flatten.all? { |p| ::File.exist?(p) }
end
path_matches?(strings, regex, *paths) click to toggle source

Check if path matches

@param [Array, String] strings

strings which are checked against paths

@param [Array, String] regex

regex which is checked against path

@param [Array, String] paths

the paths to be checked

@return [TrueClass, FalseClass]

true if path is valid, false if invalid
# File lib/fedux_org_stdlib/filesystem.rb, line 242
def path_matches?(strings, regex, *paths)
  flattend_paths = paths.flatten
  flattend_strings = strings.flatten

  flattend_paths.any? { |f|  f =~ regex || flattend_strings.include?(f) }
end
raise_if_forbidden_path_for_create_operation(*paths) click to toggle source

Check if path is forbidden for delete operation

@param [String, Array] paths

paths which should be checked

@return [TrueClass, FalseClass]

true if path is forbidden, false if path is not forbidden
# File lib/fedux_org_stdlib/filesystem.rb, line 206
def raise_if_forbidden_path_for_create_operation(*paths)
  flattend_paths = paths.flatten
  strings = []
  regex = /\.\./

  fail FileSystem::Exceptions::InvalidPath, "Sorry, but you cannot use paths matching \"#{strings.join(', ')}\"  or \"#{regex.inspect}\" here!" if path_matches?(strings, regex, flattend_paths)
end
raise_if_forbidden_path_for_delete_operation(*paths) click to toggle source

Check if path is forbidden for delete operation

@param [String, Array] paths

paths which should be checked

@return [TrueClass, FalseClass]

true if path is forbidden, false if path is not forbidden
# File lib/fedux_org_stdlib/filesystem.rb, line 221
def raise_if_forbidden_path_for_delete_operation(*paths)
  flattend_paths = paths.flatten
  strings = %w(/)
  regex = /\.\./

  fail FileSystem::Exceptions::InvalidPath, "Sorry, but you cannot use paths matching \"#{strings.join(', ')}\"  or \"#{regex}\" here!" if path_matches?(strings, regex, flattend_paths)
end
read_file(path) click to toggle source

Read the content of a file

@param [String] path

the path to the file

@return [String,Binary]

the content of the file
# File lib/fedux_org_stdlib/filesystem.rb, line 172
def read_file(path)
  raise_if_forbidden_path_for_create_operation(path)

  file_path = expand_path(path).first
  ::File.read(file_path)
end
root_directory() click to toggle source

The root directory of the project

@return [String]

the root directory
# File lib/fedux_org_stdlib/filesystem.rb, line 16
def root_directory
  #::File.expand_path('../../../', __FILE__)
  fail Exceptions::InvalidUsageOfLibrary, 'Sorry, but you need to define the root directory yourself'
end
switch_to_working_directory(&block) click to toggle source

Switch the current working directory to the temporary one and execute code block

# File lib/fedux_org_stdlib/filesystem.rb, line 47
def switch_to_working_directory(&block)
  Dir.chdir(working_directory, &block)
end
Also aliased as: in_working_directory
working_directory() click to toggle source

The temporary directory for the project

@return [String]

the directory created for the tests
# File lib/fedux_org_stdlib/filesystem.rb, line 25
def working_directory
  ::File.join(root_directory, 'tmp', 'test')
end