module Aruba::Api::Filesystem
Filesystem
methods
Public Instance Methods
Check if path is absolute
@return [Boolean]
# File lib/aruba/api/filesystem.rb, line 54 def absolute?(path) Aruba.platform.absolute_path?(path) end
Return all existing directories in current directory
@return [Array]
List of files
# File lib/aruba/api/filesystem.rb, line 85 def all_directories list(".").select { |p| directory? p }.map { |p| expand_path(p) } end
Return all existing files in current directory
@return [Array]
List of files
# File lib/aruba/api/filesystem.rb, line 77 def all_files list(".").select { |p| file? p }.map { |p| expand_path(p) } end
Return all existing paths (directories, files) in current dir
@return [Array]
List of files and directories
# File lib/aruba/api/filesystem.rb, line 69 def all_paths list(".").map { |path| expand_path(path) } end
Append lines to a (text) file. This will make sure a newline is present between the old content and the new.
@param [String] file_name
The name of the file to be used
@param [String] file_content
The lines which should be appended to file
# File lib/aruba/api/filesystem.rb, line 336 def append_lines_to_file(file_name, file_content) file_name = expand_path(file_name) last = File.open(file_name) do |f| f.seek(-3, IO::SEEK_END) f.read end File.open(file_name, "a") do |f| f << "\n" unless last.end_with? "\n" f << file_content end end
Append data to file
@param [String] file_name
The name of the file to be used
@param [String] file_content
The content which should be appended to file
# File lib/aruba/api/filesystem.rb, line 322 def append_to_file(file_name, file_content) file_name = expand_path(file_name) File.open(file_name, "a") { |f| f << file_content } end
Change file system permissions of file
@param [Octal] mode
File system mode, eg. 0o755
@param [String] file_name
Name of file to be modified. This file needs to be present to succeed
# File lib/aruba/api/filesystem.rb, line 295 def chmod(*args) args = args.flatten options = if args.last.is_a? Hash args.pop else {} end mode = args.shift mode = mode.to_i(8) if mode.is_a? String args.each { |path| raise "Expected #{path} to be present" unless exist?(path) } paths = args.map { |path| expand_path(path) } Aruba.platform.chmod(mode, paths, options) self end
Copy a file and/or directory
@param [String, Array] source
A single file or directory, multiple files or directories or multiple files and directories. If multiple sources are given the destination needs to be a directory
@param [String] destination
A file or directory name. If multiple sources are given the destination needs to be a directory
# File lib/aruba/api/filesystem.rb, line 179 def copy(*args) args = args.flatten destination = args.pop source = args source.each do |s| raise ArgumentError, %(The following source "#{s}" does not exist.) unless exist? s end if destination.start_with? aruba.config.fixtures_path_prefix raise ArgumentError, "Using a fixture as destination (#{destination}) is not supported" end if source.count > 1 && exist?(destination) && !directory?(destination) raise ArgumentError, "Multiples sources can only be copied to a directory" end source_paths = source.map { |f| expand_path(f) } destination_path = expand_path(destination) if source_paths.count > 1 Aruba.platform.mkdir(destination_path) else Aruba.platform.mkdir(File.dirname(destination_path)) source_paths = source_paths.first end Aruba.platform.cp source_paths, destination_path self end
Create a directory in current directory
@param [String] directory_name
The name of the directory which should be created
# File lib/aruba/api/filesystem.rb, line 354 def create_directory(directory_name) Aruba.platform.mkdir expand_path(directory_name) self end
Create directory object
@return [Dir]
The directory object
# File lib/aruba/api/filesystem.rb, line 93 def directory(path) raise ArgumentError, %(Path "#{name}" does not exist.) unless exist? name Dir.new(expand_path(path)) end
Check if directory exist and is directory
@param [String] file
The file/directory which should exist
# File lib/aruba/api/filesystem.rb, line 35 def directory?(file) Aruba.platform.directory? expand_path(file) end
Calculate disk usage for file(s) and/or directories
It shows the disk usage for a single file/directory. If multiple paths are given, it sum their size up.
@param [Array, Path] paths
The paths
@return [FileSize]
Bytes on disk
# File lib/aruba/api/filesystem.rb, line 403 def disk_usage(*paths) paths = paths.flatten expect(paths).to all be_an_existing_path expanded = paths.map { |path| expand_path(path) } Aruba.platform.determine_disk_usage(expanded) end
Check if file exist and is executable
@param [String] path
The path which should exist and be executable
@return [Boolean]
# File lib/aruba/api/filesystem.rb, line 45 def executable?(path) path = expand_path(path) Aruba.platform.file?(path) && Aruba.platform.executable?(path) end
Check if file or directory exist
@param [String] file_or_directory
The file/directory which should exist
# File lib/aruba/api/filesystem.rb, line 19 def exist?(file_or_directory) Aruba.platform.exist? expand_path(file_or_directory) end
Check if file exist and is file
@param [String] file
The file/directory which should exist
# File lib/aruba/api/filesystem.rb, line 27 def file?(file) Aruba.platform.file? expand_path(file) end
Get size of file
@param [String] name
File name
@return [Numeric]
The size of the file
# File lib/aruba/api/filesystem.rb, line 418 def file_size(name) expect(name).to be_an_existing_file Aruba.platform.determine_file_size expand_path(name) end
Return content of directory
@return [Array]
The content of directory
# File lib/aruba/api/filesystem.rb, line 103 def list(name) raise ArgumentError, %(Path "#{name}" does not exist.) unless exist? name unless directory? name raise ArgumentError, %(Only directories are supported. Path "#{name}" is not a directory.) end existing_files = Dir.glob(expand_path(File.join(name, "**", "*"))) current_working_directory = Pathname.new(expand_path(".")) existing_files.map do |d| Pathname.new(d).relative_path_from(current_working_directory).to_s end end
Move a file and/or directory
@param [String, Array] source
A single file or directory, multiple files or directories or multiple files and directories. If multiple sources are given the destination needs to be a directory
@param [String] destination
A file or directory name. If multiple sources are given the destination needs to be a directory
# File lib/aruba/api/filesystem.rb, line 222 def move(*args) args = args.flatten destination = args.pop source = args source.each do |s| if s.start_with? aruba.config.fixtures_path_prefix raise ArgumentError, "Using a fixture as source (#{source}) is not supported" end end if destination.start_with? aruba.config.fixtures_path_prefix raise ArgumentError, "Using a fixture as destination (#{destination}) is not supported" end source.each do |s| raise ArgumentError, %(The following source "#{s}" does not exist.) unless exist? s end if source.count > 1 && exist?(destination) && !directory?(destination) raise ArgumentError, "Multiple sources can only be copied to a directory" end source_paths = source.map { |f| expand_path(f) } destination_path = expand_path(destination) if source_paths.count > 1 Aruba.platform.mkdir(destination_path) else Aruba.platform.mkdir(File.dirname(destination_path)) source_paths = source_paths.first end Aruba.platform.mv source_paths, destination_path self end
Create a file with given content
The method does check if file already exists and fails if the file is missing. If the file name is a path the method will create all neccessary directories.
# File lib/aruba/api/filesystem.rb, line 282 def overwrite_file(name, content) Aruba.platform.create_file(expand_path(name), content, true) self end
Return content of file
@return [Array]
The content of file, without "\n" or "\r\n" at the end. To rebuild the file use `content.join("\n")`
# File lib/aruba/api/filesystem.rb, line 124 def read(name) raise ArgumentError, %(Path "#{name}" does not exist.) unless exist? name unless file? name raise ArgumentError, %(Only files are supported. Path "#{name}" is not a file.) end File.readlines(expand_path(name)).map(&:chomp) end
Check if path is relative
@return [Boolean]
# File lib/aruba/api/filesystem.rb, line 61 def relative?(path) Aruba.platform.relative_path?(path) end
Remove file or directory
@param [Array, String] name
The name of the file / directory which should be removed
# File lib/aruba/api/filesystem.rb, line 364 def remove(*args) args = args.flatten options = if args.last.is_a? Hash args.pop else {} end args = args.map { |path| expand_path(path) } Aruba.platform.rm(args, options) end
Create an empty file
@param [String] file_name
The name of the file
# File lib/aruba/api/filesystem.rb, line 153 def touch(*args) args = args.flatten options = if args.last.is_a? Hash args.pop else {} end args.each { |p| create_directory(File.dirname(p)) } Aruba.platform.touch(args.map { |p| expand_path(p) }, options) self end
Read content of file and yield the content to block
@param [String) file
The name of file which should be read from
@yield
Pass the content of the given file to this block
# File lib/aruba/api/filesystem.rb, line 385 def with_file_content(file) expect(file).to be_an_existing_path content = read(file).join("\n") yield(content) end
Create a file with given content
The method does not check if file already exists. If the file name is a path the method will create all neccessary directories.
@param [String] name
The name of the file
@param [String] content
The content which should be written to the file
# File lib/aruba/api/filesystem.rb, line 143 def write_file(name, content) Aruba.platform.create_file(expand_path(name), content, false) self end
Create a file with the given size
The method does not check if file already exists. If the file name is a path the method will create all neccessary directories.
@param [String] name
The name of the file
@param [Integer] size
The size of the file
# File lib/aruba/api/filesystem.rb, line 271 def write_fixed_size_file(name, size) Aruba.platform.create_fixed_size_file(expand_path(name), size, false) self end