module Aruba::Api::Core
def aruba
def aruba # TODO: Check this variable being accessed inconsistently. Should only # be using the memo! # Renaming this to `aruba` causes 100's of rspec failures. Needs a # deeper dive, approach with caution! @_aruba_runtime ||= Runtime.new end
def cd(dir, &block)
- Example: Run code in directory -
Example: Move up -
Example: Normal directory -
Parameters:
-
dir
(String
) --
def cd(dir, &block) if block begin unless Aruba.platform.directory?(expand_path(dir)) raise ArgumentError, "#{expand_path(dir)} is not a directory or does not exist." end old_directory = expand_path(".") aruba.current_directory << dir new_directory = expand_path(".") aruba.event_bus.notify Events::ChangedWorkingDirectory.new(old: old_directory, new: new_directory) old_dir = Aruba.platform.getwd real_new_directory = File.expand_path(aruba.current_directory, aruba.root_directory) Aruba.platform.chdir real_new_directory result = with_environment( "OLDPWD" => old_dir, "PWD" => real_new_directory, &block ) ensure aruba.current_directory.pop Aruba.platform.chdir old_dir end return result end unless Aruba.platform.directory?(expand_path(dir)) raise ArgumentError, "#{expand_path(dir)} is not a directory or does not exist." end old_directory = expand_path(".") aruba.current_directory << dir new_directory = expand_path(".") aruba.event_bus.notify Events::ChangedWorkingDirectory.new(old: old_directory, new: new_directory) self end
def expand_path(file_name, dir_string = nil)
- Example: Absolute directory (requires aruba.config.allow_absolute_paths -
Example: using fixtures directory -
Example: using home directory -
Example: Single Dot -
Example: Single file name -
Returns:
-
(String)
-
Parameters:
-
dir_string
(String
) -- -
file_name
(String
) --
def expand_path(file_name, dir_string = nil) unless file_name.is_a?(String) && !file_name.empty? message = "Filename #{file_name} needs to be a string." \ " It cannot be nil or empty either." \ " Please use `expand_path('.')` if you want" \ " the current directory to be expanded." raise ArgumentError, message end unless Aruba.platform.directory? File.join(aruba.config.root_directory, aruba.config.working_directory) raise "Aruba's working directory does not exist." \ " Maybe you forgot to run `setup_aruba` before using its API." end prefix = file_name[0] if prefix == aruba.config.fixtures_path_prefix rest = file_name[2..] path = File.join(*[aruba.fixtures_directory, rest].compact) unless Aruba.platform.exist? path aruba_fixture_candidates = aruba.config.fixtures_directories .map { |p| format('"%s"', p) }.join(", ") raise ArgumentError, "Fixture \"#{rest}\" does not exist" \ " in fixtures directory \"#{aruba.fixtures_directory}\"." \ " This was the one we found first on your system from all possible" \ " candidates: #{aruba_fixture_candidates}." end path elsif prefix == "~" path = with_environment do File.expand_path(file_name) end raise ArgumentError, 'Expanding "~/" to "/" is not allowed' if path == "/" unless Aruba.platform.absolute_path? path raise ArgumentError, "Expanding \"~\" to a relative path \"#{path}\" is not allowed" end path.to_s elsif absolute?(file_name) unless aruba.config.allow_absolute_paths caller_location = caller_locations(1, 1).first caller_file_line = "#{caller_location.path}:#{caller_location.lineno}" message = "Aruba's `expand_path` method was called with an absolute path" \ " at #{caller_file_line}, which is not recommended." \ " The path passed was '#{file_name}'." \ " Change the call to pass a relative path or set" \ " `config.allow_absolute_paths = true` to silence this warning" raise UserError, message end file_name else with_environment do directory = File.expand_path(aruba.current_directory, aruba.root_directory) directory = File.expand_path(dir_string, directory) if dir_string File.expand_path(file_name, directory) end end end
def in_current_directory(&block)
- Yield: -
def in_current_directory(&block) create_directory "." unless directory?(".") cd(".", &block) end
def setup_aruba(clobber = true)
artifacts of your tests. This does NOT clean up the current working
This will only clean up aruba's working directory to remove all
Clean the working directory of aruba
def setup_aruba(clobber = true) Aruba::Setup.new(aruba).call(clobber) self end
def with_environment(env = {}, &block)
- Yield: -
Parameters:
-
env
(Hash
) -- (optional)
def with_environment(env = {}, &block) aruba.environment.nest do |nested_env| nested_env.update(env) Aruba.platform.with_environment nested_env.to_h, &block end end