aruba 0.8.1 → 0.9.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.travis.yml +3 -1
  4. data/Gemfile +13 -10
  5. data/History.md +25 -7
  6. data/README.md +6 -1
  7. data/Rakefile +16 -3
  8. data/aruba.gemspec +10 -2
  9. data/bin/aruba +7 -0
  10. data/cucumber.yml +11 -2
  11. data/features/api/command/extract_text.feature +97 -0
  12. data/features/api/command/unescape_text.feature +119 -0
  13. data/features/api/core/expand_path.feature +16 -0
  14. data/features/api/{cd.feature → filesystem/cd.feature} +2 -1
  15. data/features/api/filesystem/create_directory.feature +57 -0
  16. data/features/api/filesystem/disk_usage.feature +151 -0
  17. data/features/api/filesystem/does_exist.feature +62 -0
  18. data/features/api/filesystem/is_absolute.feature +48 -0
  19. data/features/api/filesystem/is_directory.feature +53 -0
  20. data/features/api/filesystem/is_file.feature +54 -0
  21. data/features/api/filesystem/is_relative.feature +48 -0
  22. data/features/cli/console.feature +52 -0
  23. data/features/configuration/console_history_file.feature +38 -0
  24. data/features/configuration/exit_timeout.feature +2 -1
  25. data/features/configuration/fixtures_path_prefix.feature +0 -1
  26. data/features/configuration/home_directory.feature +0 -1
  27. data/features/configuration/io_timeout.feature +0 -1
  28. data/features/configuration/keep_ansi.feature +1 -2
  29. data/features/configuration/log_level.feature +38 -0
  30. data/features/configuration/physical_block_size.feature +53 -0
  31. data/features/configuration/remove_ansi_escape_sequences.feature +38 -0
  32. data/features/configuration/root_directory.feature +0 -1
  33. data/features/configuration/working_directory.feature +2 -1
  34. data/features/fixtures/cli-app/README.md +5 -0
  35. data/features/fixtures/cli-app/lib/cli/app.rb +1 -1
  36. data/features/fixtures/cli-app/spec/spec_helper.rb +1 -2
  37. data/features/fixtures/cli-app/spec/support/aruba.rb +1 -0
  38. data/features/fixtures/empty-app/lib/cli/app.rb +1 -1
  39. data/features/fixtures/empty-app/spec/spec_helper.rb +1 -1
  40. data/features/step_definitions/aruba_dev_steps.rb +12 -1
  41. data/features/support/env.rb +1 -1
  42. data/lib/aruba/announcer.rb +1 -14
  43. data/lib/aruba/api.rb +6 -6
  44. data/lib/aruba/api/command.rb +74 -12
  45. data/lib/aruba/api/core.rb +18 -11
  46. data/lib/aruba/api/deprecated.rb +60 -72
  47. data/lib/aruba/api/filesystem.rb +41 -16
  48. data/lib/aruba/aruba_logger.rb +77 -0
  49. data/lib/aruba/aruba_path.rb +33 -0
  50. data/lib/aruba/basic_configuration.rb +2 -2
  51. data/lib/aruba/cli.rb +11 -0
  52. data/lib/aruba/config.rb +13 -3
  53. data/lib/aruba/config/jruby.rb +5 -2
  54. data/lib/aruba/console.rb +66 -0
  55. data/lib/aruba/console/help.rb +33 -0
  56. data/lib/aruba/contracts/is_power_of_two.rb +15 -0
  57. data/lib/aruba/cucumber.rb +27 -10
  58. data/lib/aruba/cucumber/hooks.rb +15 -8
  59. data/lib/aruba/disk_usage_calculator.rb +7 -0
  60. data/lib/aruba/file_size.rb +52 -0
  61. data/lib/aruba/in_process.rb +1 -1
  62. data/lib/aruba/jruby.rb +1 -1
  63. data/lib/aruba/matchers/command.rb +1 -1
  64. data/lib/aruba/matchers/directory.rb +1 -1
  65. data/lib/aruba/matchers/environment.rb +1 -1
  66. data/lib/aruba/matchers/file.rb +1 -1
  67. data/lib/aruba/matchers/path.rb +1 -1
  68. data/lib/aruba/matchers/path/match_path_pattern.rb +1 -1
  69. data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +1 -1
  70. data/lib/aruba/platform.rb +14 -242
  71. data/lib/aruba/{creators → platforms}/aruba_file_creator.rb +3 -3
  72. data/lib/aruba/{creators → platforms}/aruba_fixed_size_file_creator.rb +2 -2
  73. data/lib/aruba/platforms/simple_table.rb +36 -0
  74. data/lib/aruba/platforms/unix_command_string.rb +24 -0
  75. data/lib/aruba/platforms/unix_environment_variables.rb +130 -0
  76. data/lib/aruba/platforms/unix_platform.rb +226 -0
  77. data/lib/aruba/platforms/unix_which.rb +83 -0
  78. data/lib/aruba/platforms/windows_command_string.rb +23 -0
  79. data/lib/aruba/platforms/windows_environment_variables.rb +83 -0
  80. data/lib/aruba/platforms/windows_platform.rb +39 -0
  81. data/lib/aruba/platforms/windows_which.rb +104 -0
  82. data/lib/aruba/process_monitor.rb +3 -3
  83. data/lib/aruba/processes/basic_process.rb +23 -3
  84. data/lib/aruba/processes/debug_process.rb +2 -2
  85. data/lib/aruba/processes/in_process.rb +1 -1
  86. data/lib/aruba/processes/spawn_process.rb +10 -4
  87. data/lib/aruba/reporting.rb +1 -1
  88. data/lib/aruba/rspec.rb +8 -6
  89. data/lib/aruba/runtime.rb +8 -5
  90. data/lib/aruba/version.rb +1 -1
  91. data/spec/aruba/api_spec.rb +25 -23
  92. data/spec/aruba/aruba_path_spec.rb +37 -0
  93. data/spec/aruba/jruby_spec.rb +1 -1
  94. data/spec/aruba/matchers/file_spec.rb +2 -2
  95. data/spec/aruba/matchers/path_spec.rb +3 -3
  96. data/spec/aruba/platform/simple_table_spec.rb +23 -0
  97. data/spec/aruba/platform/windows_environment_variables_spec.rb +500 -0
  98. data/spec/aruba/spawn_process_spec.rb +3 -1
  99. metadata +90 -12
  100. data/lib/aruba/contracts/is_a.rb +0 -21
  101. data/lib/aruba/environment.rb +0 -121
@@ -0,0 +1,23 @@
1
+ require 'delegate'
2
+
3
+ module Aruba
4
+ module Platforms
5
+ # This is a command which should be run
6
+ class WindowsCommandString < SimpleDelegator
7
+ def initialize(cmd)
8
+ __setobj__ format('%s /c "%s"', Aruba.platform.which('cmd.exe'), cmd)
9
+ end
10
+
11
+ def to_a
12
+ Shellwords.split __getobj__
13
+ end
14
+
15
+ if RUBY_VERSION < '1.9'
16
+ def to_s
17
+ __getobj__.to_s
18
+ end
19
+ alias_method :inspect, :to_s
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,83 @@
1
+ require 'aruba/platforms/unix_environment_variables'
2
+
3
+ module Aruba
4
+ module Platforms
5
+ # Windows is case-insensitive when it accesses its environment variables.
6
+ # That means that at the Windows command line:
7
+ #
8
+ # C:>set Path
9
+ # C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
10
+ # C:>set PATH
11
+ # C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
12
+ #
13
+ # If you access environment variables through ENV, you can access values no
14
+ # matter the case of the key:
15
+ #
16
+ # irb: > ENV["Path"]
17
+ # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
18
+ # irb: > ENV["Path"]
19
+ # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
20
+ #
21
+ # But if you copy the ENV to a hash, Ruby treats the keys as case sensitive:
22
+ #
23
+ # irb: > env_copy = ENV.to_hash
24
+ # => {"ALLUSERSPROFILE"=>"C:\\ProgramData", "ANSICON"=>"119x1000 (119x58)", "ANSICON_DEF"=>"7", APPDATA"=>"C:\\Users\\blorf\\AppData\\Roaming", ....}
25
+ # irb: > env["Path"]
26
+ # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
27
+ # irb: > env["PATH"]
28
+ # => nil
29
+ #
30
+ # Thus we turn all of the environment variable keys to upper case so that
31
+ # aruba is ensured that accessing environment variables with upper case keys
32
+ # will always work.
33
+ class WindowsEnvironmentVariables < UnixEnvironmentVariables
34
+ def initialize(env = ENV.to_hash)
35
+ @env = Marshal.load(Marshal.dump(env))
36
+
37
+ if RUBY_VERSION <= '1.9.3'
38
+ # rubocop:disable Style/EachWithObject
39
+ @env = @env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
40
+ # rubocop:enable Style/EachWithObject
41
+ else
42
+ @env = @env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
43
+ end
44
+ end
45
+
46
+ def update(other_env, &block)
47
+ if RUBY_VERSION <= '1.9.3'
48
+ # rubocop:disable Style/EachWithObject
49
+ other_env = other_env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
50
+ # rubocop:enable Style/EachWithObject
51
+ else
52
+ other_env = other_env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
53
+ end
54
+
55
+ super(other_env, &block)
56
+ end
57
+
58
+ def fetch(name, default = UnixEnvironmentVariables::UNDEFINED)
59
+ super(name.upcase, default)
60
+ end
61
+
62
+ def key?(name)
63
+ super(name.upcase)
64
+ end
65
+
66
+ def [](name)
67
+ super(name.upcase)
68
+ end
69
+
70
+ def []=(name, value)
71
+ super(name.upcase, value)
72
+ end
73
+
74
+ def append(name, value)
75
+ super(name.upcase, value)
76
+ end
77
+
78
+ def prepend(name, value)
79
+ super(name.upcase, value)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,39 @@
1
+ require 'ffi'
2
+
3
+ require 'aruba/platforms/unix_platform'
4
+ require 'aruba/platforms/windows_command_string'
5
+ require 'aruba/platforms/windows_environment_variables'
6
+ require 'aruba/platforms/windows_which'
7
+
8
+ module Aruba
9
+ # This abstracts OS-specific things
10
+ module Platforms
11
+ # WARNING:
12
+ # All methods found here are not considered part of the public API of aruba.
13
+ #
14
+ # Those methods can be changed at any time in the feature or removed without
15
+ # any further notice.
16
+ #
17
+ # This includes all methods for the Windows platform
18
+ class WindowsPlatform < UnixPlatform
19
+ def self.match?
20
+ FFI::Platform.windows?
21
+ end
22
+
23
+ # @see UnixPlatform#command_string
24
+ def command_string
25
+ WindowsCommandString
26
+ end
27
+
28
+ # @see UnixPlatform#environment_variables
29
+ def environment_variables
30
+ WindowsEnvironmentVariables.new
31
+ end
32
+
33
+ # @see UnixPlatform#which
34
+ def which(program, path = ENV['PATH'])
35
+ WindowsWhich.new.call(program, path)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,104 @@
1
+ require 'aruba/platform'
2
+
3
+ module Aruba
4
+ module Platforms
5
+ # Implement `which(command)` for windows
6
+ class WindowsWhich
7
+ # Bail out because this should never be reached
8
+ class DefaultWhich
9
+ def self.match?(*)
10
+ true
11
+ end
12
+
13
+ def call(program, path)
14
+ fail %(Invalid input program "#{program}" and/or path "#{path}".)
15
+ end
16
+ end
17
+
18
+ # Find path for absolute or relative command
19
+ class AbsoluteOrRelativePathWhich
20
+ def self.match?(program)
21
+ Aruba.platform.absolute_path?(program) || Aruba.platform.relative_command?(program)
22
+ end
23
+
24
+ def call(program, path)
25
+ # Expand `#path_exts`
26
+ found = Dir[program].first
27
+
28
+ return File.expand_path(found) if found && Aruba.platform.executable_file?(found)
29
+ nil
30
+ end
31
+ end
32
+
33
+ # Find path for command
34
+ class ProgramWhich
35
+ def self.match?(program)
36
+ Aruba.platform.command?(program)
37
+ end
38
+
39
+ # rubocop:disable Metrics/CyclomaticComplexity
40
+ # rubocop:disable Metrics/MethodLength
41
+ def call(program, path)
42
+ # Iterate over each path glob the dir + program.
43
+ path.split(File::PATH_SEPARATOR).each do |dir|
44
+ dir = Aruba.platform.expand_path(dir, Dir.getwd)
45
+
46
+ next unless Aruba.platform.exist?(dir) # In case of bogus second argument
47
+
48
+ file = File.join(dir, program)
49
+ # Dir[] doesn't handle backslashes properly, so convert them. Also, if
50
+ # the program name doesn't have an extension, try them all.
51
+ file = file.tr("\\", "/")
52
+
53
+ found = Dir[file].first
54
+
55
+ # Convert all forward slashes to backslashes if supported
56
+ if found && Aruba.platform.executable_file?(found)
57
+ found.tr!(File::SEPARATOR, File::ALT_SEPARATOR)
58
+ return found
59
+ end
60
+ end
61
+
62
+ nil
63
+ end
64
+ # rubocop:enable Metrics/CyclomaticComplexity
65
+ # rubocop:enable Metrics/MethodLength
66
+ end
67
+
68
+ private
69
+
70
+ attr_reader :whiches
71
+
72
+ public
73
+
74
+ def initialize
75
+ @whiches = []
76
+ @whiches << AbsoluteOrRelativePathWhich
77
+ @whiches << ProgramWhich
78
+ @whiches << DefaultWhich
79
+ end
80
+
81
+ # Find fully quallified path for program
82
+ #
83
+ # @param [String] program
84
+ # Name of program
85
+ #
86
+ # @param [String] path
87
+ # ENV['PATH']
88
+ def call(program, path = ENV['PATH'])
89
+ raise ArgumentError, "ENV['PATH'] cannot be empty" if path.nil? || path.empty?
90
+
91
+ program = program.to_s
92
+ program += windows_executable_extentions if File.extname(program).empty?
93
+
94
+ whiches.find { |w| w.match? program }.new.call(program, path)
95
+ end
96
+
97
+ private
98
+
99
+ def windows_executable_extentions
100
+ ENV['PATHEXT'] ? format('.{%s}', ENV['PATHEXT'].tr(';', ',').tr('.','')).downcase : '.{exe,com,bat}'
101
+ end
102
+ end
103
+ end
104
+ end
@@ -60,7 +60,7 @@ module Aruba
60
60
  # @param [String] cmd
61
61
  # The command
62
62
  def output_from(cmd)
63
- cmd = Platform.detect_ruby(cmd)
63
+ cmd = Aruba.platform.detect_ruby(cmd)
64
64
  get_process(cmd).output
65
65
  end
66
66
 
@@ -69,7 +69,7 @@ module Aruba
69
69
  # @param [String] cmd
70
70
  # The command
71
71
  def stdout_from(cmd)
72
- cmd = Platform.detect_ruby(cmd)
72
+ cmd = Aruba.platform.detect_ruby(cmd)
73
73
  get_process(cmd).stdout
74
74
  end
75
75
 
@@ -78,7 +78,7 @@ module Aruba
78
78
  # @param [String] cmd
79
79
  # The command
80
80
  def stderr_from(cmd)
81
- cmd = Platform.detect_ruby(cmd)
81
+ cmd = Aruba.platform.detect_ruby(cmd)
82
82
  get_process(cmd).stderr
83
83
  end
84
84
 
@@ -6,7 +6,7 @@ module Aruba
6
6
  class BasicProcess
7
7
  attr_reader :exit_status, :environment
8
8
 
9
- def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash, main_class = nil)
9
+ def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash.dup, main_class = nil)
10
10
  @cmd = cmd
11
11
  @working_directory = working_directory
12
12
  @environment = environment
@@ -24,6 +24,26 @@ module Aruba
24
24
  stdout + stderr
25
25
  end
26
26
 
27
+ def write(*)
28
+ NotImplementedError
29
+ end
30
+
31
+ def stdin(*)
32
+ NotImplementedError
33
+ end
34
+
35
+ def stdout(*)
36
+ NotImplementedError
37
+ end
38
+
39
+ def stderr(*)
40
+ NotImplementedError
41
+ end
42
+
43
+ def close_io(*)
44
+ NotImplementedError
45
+ end
46
+
27
47
  # Was process already stopped
28
48
  def stopped?
29
49
  @stopped == true
@@ -42,8 +62,8 @@ module Aruba
42
62
 
43
63
  private
44
64
 
45
- def which(program, path = environment['PATH'])
46
- Aruba::Platform.which(program, path)
65
+ def which(program)
66
+ Aruba.platform.which(program, environment['PATH'])
47
67
  end
48
68
 
49
69
  def command
@@ -13,12 +13,12 @@ module Aruba
13
13
  # rubocop:disable Metrics/CyclomaticComplexity
14
14
  def run!
15
15
  # rubocop:disable Metrics/LineLength
16
- fail LaunchError, %(Command "#{command}" not found in PATH-variable "#{environment['PATH']}".) unless which(command, environment['PATH'])
16
+ fail LaunchError, %(Command "#{command}" not found in PATH-variable "#{environment['PATH']}".) unless which(command)
17
17
  # rubocop:enable Metrics/LineLength
18
18
 
19
19
  if RUBY_VERSION < '1.9'
20
20
  begin
21
- old_env = ENV.to_hash
21
+ old_env = ENV.to_hash.dup
22
22
  ENV.update environment
23
23
 
24
24
  Dir.chdir @working_directory do
@@ -31,7 +31,7 @@ module Aruba
31
31
 
32
32
  attr_reader :main_class
33
33
 
34
- def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash, main_class = nil)
34
+ def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash.dup, main_class = nil)
35
35
  @cmd = cmd
36
36
  @argv = arguments
37
37
  @stdin = StringIO.new
@@ -1,8 +1,10 @@
1
1
  require 'childprocess'
2
2
  require 'tempfile'
3
3
  require 'shellwords'
4
+
4
5
  require 'aruba/errors'
5
6
  require 'aruba/processes/basic_process'
7
+ require 'aruba/platform'
6
8
 
7
9
  module Aruba
8
10
  module Processes
@@ -25,7 +27,7 @@ module Aruba
25
27
  #
26
28
  # @params [String] working_directory
27
29
  # The directory where the command will be executed
28
- def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash, main_class = nil)
30
+ def initialize(cmd, exit_timeout, io_wait, working_directory, environment = ENV.to_hash.dup, main_class = nil)
29
31
  super
30
32
 
31
33
  @exit_timeout = exit_timeout
@@ -43,11 +45,15 @@ module Aruba
43
45
  # rubocop:disable Metrics/MethodLength
44
46
  # rubocop:disable Metrics/CyclomaticComplexity
45
47
  def run!
48
+ # gather fully qualified path
49
+ cmd = which(command)
46
50
  # rubocop:disable Metrics/LineLength
47
- fail LaunchError, %(Command "#{command}" not found in PATH-variable "#{environment['PATH']}".) unless which(command, environment['PATH'])
51
+ fail LaunchError, %(Command "#{command}" not found in PATH-variable "#{environment['PATH']}".) if cmd.nil?
48
52
  # rubocop:enable Metrics/LineLength
49
53
 
50
- @process = ChildProcess.build(which(command, environment['PATH']), *arguments)
54
+ cmd = Aruba.platform.command_string.new(cmd)
55
+
56
+ @process = ChildProcess.build(*[cmd.to_a, arguments].flatten)
51
57
  @out = Tempfile.new("aruba-out")
52
58
  @err = Tempfile.new("aruba-err")
53
59
  @exit_status = nil
@@ -65,7 +71,7 @@ module Aruba
65
71
  begin
66
72
  @process.start
67
73
  rescue ChildProcess::LaunchError => e
68
- raise LaunchError, e.message
74
+ raise LaunchError, "It tried to start #{cmd}. " + e.message
69
75
  end
70
76
 
71
77
  after_run
@@ -50,7 +50,7 @@ if(ENV['ARUBA_REPORT_DIR'])
50
50
  end
51
51
 
52
52
  def output
53
- @aruba_keep_ansi = true # We want the output coloured!
53
+ aruba.config.keep_ansi = true # We want the output coloured!
54
54
  escaped_stdout = CGI.escapeHTML(all_stdout)
55
55
  html = Bcat::ANSI.new(escaped_stdout).to_html
56
56
  Bcat::ANSI::STYLES.each do |name, style|
@@ -14,17 +14,19 @@ RSpec.configure do |config|
14
14
  config.include Aruba::Api, :type => :aruba
15
15
 
16
16
  # Setup environment for aruba
17
- config.before :each do
18
- next unless self.class.include? Aruba::Api
17
+ config.around :each do |example|
18
+ if self.class.include? Aruba::Api
19
+ restore_env
20
+ setup_aruba
21
+ end
19
22
 
20
- restore_env
21
- setup_aruba
23
+ example.run
22
24
  end
23
25
 
24
26
  if Aruba::VERSION >= '1.0.0'
25
27
  config.around :each do |example|
26
28
  begin
27
- old_env = ENV.to_hash
29
+ old_env = ENV.to_hash.dup
28
30
  example.run
29
31
  ensure
30
32
  ENV.clear
@@ -45,7 +47,7 @@ RSpec.configure do |config|
45
47
  next unless self.class.include?(Aruba::Api)
46
48
 
47
49
  if example.metadata[:announce_environment]
48
- Aruba::Platform.deprecated 'announce_environment is deprecated. Use announce_modified_environment instead'
50
+ Aruba.platform.deprecated 'announce_environment is deprecated. Use announce_modified_environment instead'
49
51
 
50
52
  announcer.activate(:modified_environment)
51
53
  end
@@ -1,15 +1,18 @@
1
1
  require 'aruba/config'
2
- require 'aruba/environment'
2
+ require 'aruba/aruba_logger'
3
3
 
4
4
  module Aruba
5
5
  class Runtime
6
- attr_reader :config, :current_directory, :environment, :root_directory
6
+ attr_reader :config, :current_directory, :environment, :root_directory, :logger
7
7
 
8
8
  def initialize
9
9
  @config = Aruba.config.make_copy
10
10
  @current_directory = ArubaPath.new(@config.working_directory)
11
11
  @root_directory = ArubaPath.new(@config.root_directory)
12
- @environment = Environment.new
12
+ @environment = Aruba.platform.environment_variables
13
+
14
+ @logger = ArubaLogger.new
15
+ @logger.mode = @config.log_level
13
16
  end
14
17
 
15
18
  # The path to the directory which contains fixtures
@@ -20,12 +23,12 @@ module Aruba
20
23
  def fixtures_directory
21
24
  unless @fixtures_directory
22
25
  candidates = config.fixtures_directories.map { |dir| File.join(root_directory, dir) }
23
- @fixtures_directory = candidates.find { |d| Aruba::Platform.directory? d }
26
+ @fixtures_directory = candidates.find { |d| Aruba.platform.directory? d }
24
27
 
25
28
  fail "No existing fixtures directory found in #{candidates.map { |d| format('"%s"', d) }.join(', ')}. " unless @fixtures_directory
26
29
  end
27
30
 
28
- fail %(Fixtures directory "#{@fixtures_directory}" is not a directory) unless Aruba::Platform.directory?(@fixtures_directory)
31
+ fail %(Fixtures directory "#{@fixtures_directory}" is not a directory) unless Aruba.platform.directory?(@fixtures_directory)
29
32
 
30
33
  ArubaPath.new(@fixtures_directory)
31
34
  end