module FeduxOrgStdlib::Filesystem
File
system @deprecated Please use github.com/cucumber/aruba instead
Public Instance Methods
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(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 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 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(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 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 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 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
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
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
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
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
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 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
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 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
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