aruba 1.0.0.pre.alpha.2 → 1.0.0.pre.alpha.3
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.
- checksums.yaml +5 -5
 - data/.github/PULL_REQUEST_TEMPLATE.md +2 -1
 - data/.rubocop.yml +6 -181
 - data/.rubocop_todo.yml +364 -0
 - data/.travis.yml +63 -34
 - data/.yardopts +3 -0
 - data/CHANGELOG.md +1121 -0
 - data/CONTRIBUTING.md +179 -78
 - data/Gemfile +29 -44
 - data/README.md +41 -11
 - data/Rakefile +35 -35
 - data/appveyor.yml +6 -5
 - data/aruba.gemspec +14 -16
 - data/bin/console +2 -11
 - data/cucumber.yml +0 -7
 - data/fixtures/cli-app/README.md +1 -1
 - data/fixtures/cli-app/Rakefile +1 -1
 - data/fixtures/cli-app/cli-app.gemspec +1 -0
 - data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +3 -3
 - data/fixtures/cli-app/lib/cli/app/version.rb +1 -1
 - data/fixtures/empty-app/Rakefile +1 -1
 - data/fixtures/empty-app/cli-app.gemspec +1 -0
 - data/fixtures/empty-app/lib/cli/app/version.rb +1 -1
 - data/fixtures/getting-started-app/Gemfile +1 -1
 - data/lib/aruba/api.rb +3 -10
 - data/lib/aruba/api/bundler.rb +16 -0
 - data/lib/aruba/api/commands.rb +249 -0
 - data/lib/aruba/api/core.rb +24 -10
 - data/lib/aruba/api/environment.rb +12 -7
 - data/lib/aruba/api/filesystem.rb +22 -20
 - data/lib/aruba/api/text.rb +3 -9
 - data/lib/aruba/aruba_path.rb +3 -18
 - data/lib/aruba/basic_configuration.rb +3 -19
 - data/lib/aruba/cli.rb +1 -1
 - data/lib/aruba/colorizer.rb +33 -33
 - data/lib/aruba/command.rb +4 -0
 - data/lib/aruba/config_wrapper.rb +1 -1
 - data/lib/aruba/configuration.rb +78 -0
 - data/lib/aruba/console.rb +5 -5
 - data/lib/aruba/console/help.rb +1 -1
 - data/lib/aruba/cucumber.rb +0 -1
 - data/lib/aruba/cucumber/command.rb +55 -115
 - data/lib/aruba/cucumber/environment.rb +1 -1
 - data/lib/aruba/cucumber/file.rb +9 -21
 - data/lib/aruba/cucumber/hooks.rb +6 -62
 - data/lib/aruba/event_bus/name_resolver.rb +1 -2
 - data/lib/aruba/hooks.rb +1 -1
 - data/lib/aruba/initializer.rb +3 -3
 - data/lib/aruba/matchers/base/base_matcher.rb +2 -2
 - data/lib/aruba/matchers/base/message_indenter.rb +19 -0
 - data/lib/aruba/matchers/base/object_formatter.rb +2 -2
 - data/lib/aruba/matchers/collection/include_an_object.rb +7 -9
 - data/lib/aruba/matchers/command/be_successfully_executed.rb +2 -4
 - data/lib/aruba/matchers/command/have_exit_status.rb +1 -1
 - data/lib/aruba/matchers/command/have_finished_in_time.rb +2 -4
 - data/lib/aruba/matchers/command/have_output.rb +9 -4
 - data/lib/aruba/matchers/command/have_output_on_stderr.rb +1 -1
 - data/lib/aruba/matchers/command/have_output_on_stdout.rb +1 -1
 - data/lib/aruba/matchers/command/have_output_size.rb +1 -1
 - data/lib/aruba/matchers/directory/be_an_existing_directory.rb +4 -6
 - data/lib/aruba/matchers/directory/have_sub_directory.rb +4 -6
 - data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +2 -4
 - data/lib/aruba/matchers/file/be_an_existing_executable.rb +4 -6
 - data/lib/aruba/matchers/file/be_an_existing_file.rb +4 -6
 - data/lib/aruba/matchers/file/have_file_content.rb +4 -4
 - data/lib/aruba/matchers/file/have_file_size.rb +6 -8
 - data/lib/aruba/matchers/file/have_same_file_content.rb +9 -12
 - data/lib/aruba/matchers/path/a_path_matching_pattern.rb +2 -4
 - data/lib/aruba/matchers/path/be_an_absolute_path.rb +3 -5
 - data/lib/aruba/matchers/path/be_an_existing_path.rb +4 -6
 - data/lib/aruba/matchers/path/have_permissions.rb +6 -8
 - data/lib/aruba/matchers/string/include_output_string.rb +8 -10
 - data/lib/aruba/matchers/string/match_output_string.rb +9 -11
 - data/lib/aruba/matchers/string/output_string_eq.rb +7 -9
 - data/lib/aruba/platform.rb +0 -1
 - data/lib/aruba/platforms/announcer.rb +26 -70
 - data/lib/aruba/platforms/aruba_file_creator.rb +1 -1
 - data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +2 -2
 - data/lib/aruba/platforms/aruba_logger.rb +22 -2
 - data/lib/aruba/platforms/command_monitor.rb +2 -125
 - data/lib/aruba/platforms/filesystem_status.rb +9 -9
 - data/lib/aruba/platforms/local_environment.rb +2 -2
 - data/lib/aruba/platforms/simple_table.rb +3 -3
 - data/lib/aruba/platforms/unix_command_string.rb +7 -4
 - data/lib/aruba/platforms/unix_environment_variables.rb +9 -13
 - data/lib/aruba/platforms/unix_platform.rb +2 -27
 - data/lib/aruba/platforms/unix_which.rb +2 -1
 - data/lib/aruba/platforms/windows_command_string.rb +20 -7
 - data/lib/aruba/platforms/windows_environment_variables.rb +35 -30
 - data/lib/aruba/platforms/windows_which.rb +4 -3
 - data/lib/aruba/processes/basic_process.rb +11 -15
 - data/lib/aruba/processes/debug_process.rb +5 -0
 - data/lib/aruba/processes/in_process.rb +17 -8
 - data/lib/aruba/processes/spawn_process.rb +35 -23
 - data/lib/aruba/rspec.rb +9 -22
 - data/lib/aruba/runtime.rb +7 -5
 - data/lib/aruba/setup.rb +6 -4
 - data/lib/aruba/tasks/docker_helpers.rb +1 -1
 - data/lib/aruba/version.rb +1 -1
 - metadata +37 -57
 - data/History.md +0 -612
 - data/bin/bootstrap +0 -34
 - data/fixtures/spawn_process/stderr.sh +0 -3
 - data/lib/aruba/api/command.rb +0 -309
 - data/lib/aruba/api/deprecated.rb +0 -895
 - data/lib/aruba/api/rvm.rb +0 -44
 - data/lib/aruba/config.rb +0 -101
 - data/lib/aruba/cucumber/rvm.rb +0 -3
 - data/lib/aruba/in_process.rb +0 -14
 - data/lib/aruba/jruby.rb +0 -4
 - data/lib/aruba/matchers/path/match_path_pattern.rb +0 -41
 - data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +0 -25
 - data/lib/aruba/spawn_process.rb +0 -11
 
| 
         @@ -5,44 +5,35 @@ module Aruba 
     | 
|
| 
       5 
5 
     | 
    
         
             
              # Platforms
         
     | 
| 
       6 
6 
     | 
    
         
             
              module Platforms
         
     | 
| 
       7 
7 
     | 
    
         
             
                # Windows is case-insensitive when it accesses its environment variables.
         
     | 
| 
       8 
     | 
    
         
            -
                # That means that at the Windows command line:
         
     | 
| 
       9 
8 
     | 
    
         
             
                #
         
     | 
| 
       10 
     | 
    
         
            -
                # 
     | 
| 
       11 
     | 
    
         
            -
                # 
     | 
| 
       12 
     | 
    
         
            -
                # 
     | 
| 
       13 
     | 
    
         
            -
                #  C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
         
     | 
| 
      
 9 
     | 
    
         
            +
                # To work around this we turn all of the environment variable keys to
         
     | 
| 
      
 10 
     | 
    
         
            +
                # upper-case so that aruba is ensured that accessing environment variables
         
     | 
| 
      
 11 
     | 
    
         
            +
                # with upper-case keys will always work. See the following examples.
         
     | 
| 
       14 
12 
     | 
    
         
             
                #
         
     | 
| 
       15 
     | 
    
         
            -
                #  
     | 
| 
       16 
     | 
    
         
            -
                #  
     | 
| 
      
 13 
     | 
    
         
            +
                # @example Setting Windows environment variables using mixed case
         
     | 
| 
      
 14 
     | 
    
         
            +
                #   C:>set Path
         
     | 
| 
      
 15 
     | 
    
         
            +
                #   C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
         
     | 
| 
      
 16 
     | 
    
         
            +
                #   C:>set PATH
         
     | 
| 
      
 17 
     | 
    
         
            +
                #   C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
         
     | 
| 
       17 
18 
     | 
    
         
             
                #
         
     | 
| 
       18 
     | 
    
         
            -
                # 
     | 
| 
       19 
     | 
    
         
            -
                # 
     | 
| 
       20 
     | 
    
         
            -
                # 
     | 
| 
       21 
     | 
    
         
            -
                #  => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
         
     | 
| 
      
 19 
     | 
    
         
            +
                # @example If you access environment variables through ENV, you can access values no matter the case of the key:
         
     | 
| 
      
 20 
     | 
    
         
            +
                #     ENV["Path"] # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
         
     | 
| 
      
 21 
     | 
    
         
            +
                #     ENV["PATH"] # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
         
     | 
| 
       22 
22 
     | 
    
         
             
                #
         
     | 
| 
       23 
     | 
    
         
            -
                # But if you copy the ENV to a hash, Ruby treats the keys as case sensitive:
         
     | 
| 
       24 
     | 
    
         
            -
                #
         
     | 
| 
       25 
     | 
    
         
            -
                # 
     | 
| 
       26 
     | 
    
         
            -
                # 
     | 
| 
       27 
     | 
    
         
            -
                # 
     | 
| 
       28 
     | 
    
         
            -
                # 
     | 
| 
       29 
     | 
    
         
            -
                # 
     | 
| 
       30 
     | 
    
         
            -
                #  => nil
         
     | 
| 
       31 
     | 
    
         
            -
                #
         
     | 
| 
       32 
     | 
    
         
            -
                # Thus we turn all of the environment variable keys to upper case so that
         
     | 
| 
       33 
     | 
    
         
            -
                # aruba is ensured that accessing environment variables with upper case keys
         
     | 
| 
       34 
     | 
    
         
            -
                # will always work.
         
     | 
| 
      
 23 
     | 
    
         
            +
                # @example But if you copy the ENV to a hash, Ruby treats the keys as case sensitive:
         
     | 
| 
      
 24 
     | 
    
         
            +
                #   env_copy = ENV.to_hash
         
     | 
| 
      
 25 
     | 
    
         
            +
                #   # => {"ALLUSERSPROFILE"=>"C:\\ProgramData", "ANSICON"=>"119x1000 (119x58)", "ANSICON_DEF"=>"7",  APPDATA"=>"C:\\Users\\blorf\\AppData\\Roaming", ....}
         
     | 
| 
      
 26 
     | 
    
         
            +
                #   env["Path"]
         
     | 
| 
      
 27 
     | 
    
         
            +
                #   # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
         
     | 
| 
      
 28 
     | 
    
         
            +
                #   env["PATH"]
         
     | 
| 
      
 29 
     | 
    
         
            +
                #   # => nil
         
     | 
| 
       35 
30 
     | 
    
         
             
                class WindowsEnvironmentVariables < UnixEnvironmentVariables
         
     | 
| 
       36 
     | 
    
         
            -
                  def initialize(env = ENV 
     | 
| 
       37 
     | 
    
         
            -
                     
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                    @env = env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
         
     | 
| 
      
 31 
     | 
    
         
            +
                  def initialize(env = ENV)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    super(upcase_env env)
         
     | 
| 
       40 
33 
     | 
    
         
             
                  end
         
     | 
| 
       41 
34 
     | 
    
         | 
| 
       42 
35 
     | 
    
         
             
                  def update(other_env, &block)
         
     | 
| 
       43 
     | 
    
         
            -
                     
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                    super(other_env, &block)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    super(upcase_env(other_env), &block)
         
     | 
| 
       46 
37 
     | 
    
         
             
                  end
         
     | 
| 
       47 
38 
     | 
    
         | 
| 
       48 
39 
     | 
    
         
             
                  def fetch(name, default = UnixEnvironmentVariables::UNDEFINED)
         
     | 
| 
         @@ -72,6 +63,20 @@ module Aruba 
     | 
|
| 
       72 
63 
     | 
    
         
             
                  def delete(name)
         
     | 
| 
       73 
64 
     | 
    
         
             
                    super(name.upcase)
         
     | 
| 
       74 
65 
     | 
    
         
             
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  def self.hash_from_env
         
     | 
| 
      
 68 
     | 
    
         
            +
                    upcase_env(ENV)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  def self.upcase_env(env)
         
     | 
| 
      
 72 
     | 
    
         
            +
                    env.each_with_object({}) { |(k, v), a| a[k.to_s.upcase] = v }
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  private
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  def upcase_env(env)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    self.class.upcase_env(env)
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
       75 
80 
     | 
    
         
             
                end
         
     | 
| 
       76 
81 
     | 
    
         
             
              end
         
     | 
| 
       77 
82 
     | 
    
         
             
            end
         
     | 
| 
         @@ -23,11 +23,12 @@ module Aruba 
     | 
|
| 
       23 
23 
     | 
    
         
             
                      Aruba.platform.absolute_path?(program) || Aruba.platform.relative_command?(program)
         
     | 
| 
       24 
24 
     | 
    
         
             
                    end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                    def call(program,  
     | 
| 
      
 26 
     | 
    
         
            +
                    def call(program, _path)
         
     | 
| 
       27 
27 
     | 
    
         
             
                      # Expand `#path_exts`
         
     | 
| 
       28 
28 
     | 
    
         
             
                      found = Dir[program].first
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                      return File.expand_path(found) if found && Aruba.platform.executable?(found)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       31 
32 
     | 
    
         
             
                      nil
         
     | 
| 
       32 
33 
     | 
    
         
             
                    end
         
     | 
| 
       33 
34 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -48,7 +49,7 @@ module Aruba 
     | 
|
| 
       48 
49 
     | 
    
         
             
                        file = File.join(dir, program)
         
     | 
| 
       49 
50 
     | 
    
         
             
                        # Dir[] doesn't handle backslashes properly, so convert them. Also, if
         
     | 
| 
       50 
51 
     | 
    
         
             
                        # the program name doesn't have an extension, try them all.
         
     | 
| 
       51 
     | 
    
         
            -
                        file = file.tr( 
     | 
| 
      
 52 
     | 
    
         
            +
                        file = file.tr('\\', '/')
         
     | 
| 
       52 
53 
     | 
    
         | 
| 
       53 
54 
     | 
    
         
             
                        found = Dir[file].first
         
     | 
| 
       54 
55 
     | 
    
         | 
| 
         @@ -95,7 +96,7 @@ module Aruba 
     | 
|
| 
       95 
96 
     | 
    
         
             
                  private
         
     | 
| 
       96 
97 
     | 
    
         | 
| 
       97 
98 
     | 
    
         
             
                  def windows_executable_extentions
         
     | 
| 
       98 
     | 
    
         
            -
                    ENV['PATHEXT'] ? format('.{%s}', ENV['PATHEXT'].tr(';', ',').tr('.','')).downcase : '.{exe,com,bat}'
         
     | 
| 
      
 99 
     | 
    
         
            +
                    ENV['PATHEXT'] ? format('.{%s}', ENV['PATHEXT'].tr(';', ',').tr('.', '')).downcase : '.{exe,com,bat}'
         
     | 
| 
       99 
100 
     | 
    
         
             
                  end
         
     | 
| 
       100 
101 
     | 
    
         
             
                end
         
     | 
| 
       101 
102 
     | 
    
         
             
              end
         
     | 
| 
         @@ -11,9 +11,12 @@ module Aruba 
     | 
|
| 
       11 
11 
     | 
    
         
             
                #
         
     | 
| 
       12 
12 
     | 
    
         
             
                # @private
         
     | 
| 
       13 
13 
     | 
    
         
             
                class BasicProcess
         
     | 
| 
       14 
     | 
    
         
            -
                  attr_reader :exit_status, :environment, :working_directory, :main_class, 
     | 
| 
      
 14 
     | 
    
         
            +
                  attr_reader :exit_status, :environment, :working_directory, :main_class,
         
     | 
| 
      
 15 
     | 
    
         
            +
                    :io_wait_timeout, :exit_timeout, :startup_wait_time, :stop_signal
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                  def initialize(cmd, exit_timeout, io_wait_timeout, working_directory, 
     | 
| 
      
 17 
     | 
    
         
            +
                  def initialize(cmd, exit_timeout, io_wait_timeout, working_directory,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                 environment = Aruba.platform.environment_variables.hash_from_env,
         
     | 
| 
      
 19 
     | 
    
         
            +
                                 main_class = nil, stop_signal = nil, startup_wait_time = 0)
         
     | 
| 
       17 
20 
     | 
    
         
             
                    @cmd               = cmd
         
     | 
| 
       18 
21 
     | 
    
         
             
                    @working_directory = working_directory
         
     | 
| 
       19 
22 
     | 
    
         
             
                    @environment       = environment
         
     | 
| 
         @@ -101,14 +104,6 @@ module Aruba 
     | 
|
| 
       101 
104 
     | 
    
         
             
                    @timed_out == true
         
     | 
| 
       102 
105 
     | 
    
         
             
                  end
         
     | 
| 
       103 
106 
     | 
    
         | 
| 
       104 
     | 
    
         
            -
                  # @deprecated
         
     | 
| 
       105 
     | 
    
         
            -
                  # @private
         
     | 
| 
       106 
     | 
    
         
            -
                  def run!
         
     | 
| 
       107 
     | 
    
         
            -
                    Aruba.platform.deprecated('The use of "command#run!" is deprecated. You can simply use "command#start" instead.')
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                    start
         
     | 
| 
       110 
     | 
    
         
            -
                  end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
107 
     | 
    
         
             
                  # Hook which is run before command is run
         
     | 
| 
       113 
108 
     | 
    
         
             
                  def before_run; end
         
     | 
| 
       114 
109 
     | 
    
         | 
| 
         @@ -117,18 +112,16 @@ module Aruba 
     | 
|
| 
       117 
112 
     | 
    
         | 
| 
       118 
113 
     | 
    
         
             
                  def inspect
         
     | 
| 
       119 
114 
     | 
    
         
             
                    # rubocop:disable Style/UnneededInterpolation
         
     | 
| 
       120 
     | 
    
         
            -
                    out = truncate("#{stdout(: 
     | 
| 
       121 
     | 
    
         
            -
                    err = truncate("#{stderr(: 
     | 
| 
      
 115 
     | 
    
         
            +
                    out = truncate("#{stdout(wait_for_io: 0).inspect}", 35)
         
     | 
| 
      
 116 
     | 
    
         
            +
                    err = truncate("#{stderr(wait_for_io: 0).inspect}", 35)
         
     | 
| 
       122 
117 
     | 
    
         
             
                    # rubocop:enable Style/UnneededInterpolation
         
     | 
| 
       123 
118 
     | 
    
         | 
| 
       124 
119 
     | 
    
         
             
                    fmt = '#<%s:%s commandline="%s": stdout=%s stderr=%s>'
         
     | 
| 
       125 
     | 
    
         
            -
                    format fmt, self.class,  
     | 
| 
      
 120 
     | 
    
         
            +
                    format fmt, self.class, object_id, commandline, out, err
         
     | 
| 
       126 
121 
     | 
    
         
             
                  end
         
     | 
| 
       127 
122 
     | 
    
         | 
| 
       128 
123 
     | 
    
         
             
                  alias to_s inspect
         
     | 
| 
       129 
124 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
                  private
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
125 
     | 
    
         
             
                  def command
         
     | 
| 
       133 
126 
     | 
    
         
             
                    Shellwords.split(commandline).first
         
     | 
| 
       134 
127 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -139,8 +132,11 @@ module Aruba 
     | 
|
| 
       139 
132 
     | 
    
         
             
                    []
         
     | 
| 
       140 
133 
     | 
    
         
             
                  end
         
     | 
| 
       141 
134 
     | 
    
         | 
| 
      
 135 
     | 
    
         
            +
                  private
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
       142 
137 
     | 
    
         
             
                  def truncate(string, max_length)
         
     | 
| 
       143 
138 
     | 
    
         
             
                    return string if string.length <= max_length
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
       144 
140 
     | 
    
         
             
                    string[0, max_length - 1] + ' ...'
         
     | 
| 
       145 
141 
     | 
    
         
             
                  end
         
     | 
| 
       146 
142 
     | 
    
         
             
                end
         
     | 
| 
         @@ -18,6 +18,7 @@ module Aruba 
     | 
|
| 
       18 
18 
     | 
    
         
             
                  end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
                  def start
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @started = true
         
     | 
| 
       21 
22 
     | 
    
         
             
                    Dir.chdir @working_directory do
         
     | 
| 
       22 
23 
     | 
    
         
             
                      Aruba.platform.with_environment(environment) do
         
     | 
| 
       23 
24 
     | 
    
         
             
                        @exit_status = system(command, *arguments) ? 0 : 1
         
     | 
| 
         @@ -64,6 +65,10 @@ module Aruba 
     | 
|
| 
       64 
65 
     | 
    
         
             
                  def terminate(*)
         
     | 
| 
       65 
66 
     | 
    
         
             
                    stop
         
     | 
| 
       66 
67 
     | 
    
         
             
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  def interactive?
         
     | 
| 
      
 70 
     | 
    
         
            +
                    true
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
       67 
72 
     | 
    
         
             
                end
         
     | 
| 
       68 
73 
     | 
    
         
             
              end
         
     | 
| 
       69 
74 
     | 
    
         
             
            end
         
     | 
| 
         @@ -33,19 +33,22 @@ module Aruba 
     | 
|
| 
       33 
33 
     | 
    
         
             
                    end
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                    def exit(exitstatus)
         
     | 
| 
       36 
     | 
    
         
            -
                      @exitstatus = 
     | 
| 
      
 36 
     | 
    
         
            +
                      @exitstatus =
         
     | 
| 
      
 37 
     | 
    
         
            +
                        case exitstatus
         
     | 
| 
      
 38 
     | 
    
         
            +
                        when Numeric then Integer(exitstatus)
         
     | 
| 
      
 39 
     | 
    
         
            +
                        when TrueClass then 0
         
     | 
| 
      
 40 
     | 
    
         
            +
                        when FalseClass then 1
         
     | 
| 
      
 41 
     | 
    
         
            +
                        else raise TypeError, "no implicit conversion of #{exitstatus.class} into Integer"
         
     | 
| 
      
 42 
     | 
    
         
            +
                        end
         
     | 
| 
       37 
43 
     | 
    
         
             
                    end
         
     | 
| 
       38 
44 
     | 
    
         
             
                  end
         
     | 
| 
       39 
45 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                  class << self
         
     | 
| 
       41 
     | 
    
         
            -
                    # @deprecated
         
     | 
| 
       42 
     | 
    
         
            -
                    attr_accessor :main_class
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
46 
     | 
    
         
             
                  # @private
         
     | 
| 
       46 
47 
     | 
    
         
             
                  attr_reader :main_class
         
     | 
| 
       47 
48 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                  def initialize(cmd, exit_timeout, io_wait_timeout, working_directory, 
     | 
| 
      
 49 
     | 
    
         
            +
                  def initialize(cmd, exit_timeout, io_wait_timeout, working_directory,
         
     | 
| 
      
 50 
     | 
    
         
            +
                                 environment = Aruba.platform.environment_variables.hash_from_env,
         
     | 
| 
      
 51 
     | 
    
         
            +
                                 main_class = nil, stop_signal = nil, startup_wait_time = 0)
         
     | 
| 
       49 
52 
     | 
    
         
             
                    @cmd               = cmd
         
     | 
| 
       50 
53 
     | 
    
         
             
                    @argv              = arguments
         
     | 
| 
       51 
54 
     | 
    
         
             
                    @stdin             = StringIO.new
         
     | 
| 
         @@ -58,7 +61,9 @@ module Aruba 
     | 
|
| 
       58 
61 
     | 
    
         | 
| 
       59 
62 
     | 
    
         
             
                  # Start command
         
     | 
| 
       60 
63 
     | 
    
         
             
                  def start
         
     | 
| 
       61 
     | 
    
         
            -
                    fail  
     | 
| 
      
 64 
     | 
    
         
            +
                    fail 'You need to call aruba.config.main_class = YourMainClass' unless main_class
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    @started = true
         
     | 
| 
       62 
67 
     | 
    
         | 
| 
       63 
68 
     | 
    
         
             
                    Dir.chdir @working_directory do
         
     | 
| 
       64 
69 
     | 
    
         
             
                      before_run
         
     | 
| 
         @@ -120,6 +125,10 @@ module Aruba 
     | 
|
| 
       120 
125 
     | 
    
         
             
                  def pid
         
     | 
| 
       121 
126 
     | 
    
         
             
                    $PROCESS_ID
         
     | 
| 
       122 
127 
     | 
    
         
             
                  end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                  def interactive?
         
     | 
| 
      
 130 
     | 
    
         
            +
                    false
         
     | 
| 
      
 131 
     | 
    
         
            +
                  end
         
     | 
| 
       123 
132 
     | 
    
         
             
                end
         
     | 
| 
       124 
133 
     | 
    
         
             
              end
         
     | 
| 
       125 
134 
     | 
    
         
             
            end
         
     | 
| 
         @@ -19,24 +19,38 @@ module Aruba 
     | 
|
| 
       19 
19 
     | 
    
         
             
                # @private
         
     | 
| 
       20 
20 
     | 
    
         
             
                class SpawnProcess < BasicProcess
         
     | 
| 
       21 
21 
     | 
    
         
             
                  # Use as default launcher
         
     | 
| 
       22 
     | 
    
         
            -
                  def self.match?( 
     | 
| 
      
 22 
     | 
    
         
            +
                  def self.match?(_mode)
         
     | 
| 
       23 
23 
     | 
    
         
             
                    true
         
     | 
| 
       24 
24 
     | 
    
         
             
                  end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                  # Create process
         
     | 
| 
       27 
27 
     | 
    
         
             
                  #
         
     | 
| 
       28 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 28 
     | 
    
         
            +
                  # @param [String] cmd
         
     | 
| 
       29 
29 
     | 
    
         
             
                  #   Command string
         
     | 
| 
       30 
30 
     | 
    
         
             
                  #
         
     | 
| 
       31 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 31 
     | 
    
         
            +
                  # @param [Numeric] exit_timeout
         
     | 
| 
       32 
32 
     | 
    
         
             
                  #   The timeout until we expect the command to be finished
         
     | 
| 
       33 
33 
     | 
    
         
             
                  #
         
     | 
| 
       34 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 34 
     | 
    
         
            +
                  # @param [Numeric] io_wait_timeout
         
     | 
| 
       35 
35 
     | 
    
         
             
                  #   The timeout until we expect the io to be finished
         
     | 
| 
       36 
36 
     | 
    
         
             
                  #
         
     | 
| 
       37 
     | 
    
         
            -
                  # @ 
     | 
| 
      
 37 
     | 
    
         
            +
                  # @param [String] working_directory
         
     | 
| 
       38 
38 
     | 
    
         
             
                  #   The directory where the command will be executed
         
     | 
| 
       39 
     | 
    
         
            -
                   
     | 
| 
      
 39 
     | 
    
         
            +
                  #
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # @param [Hash] environment
         
     | 
| 
      
 41 
     | 
    
         
            +
                  #   Environment variables
         
     | 
| 
      
 42 
     | 
    
         
            +
                  #
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # @param [Class] main_class
         
     | 
| 
      
 44 
     | 
    
         
            +
                  #   E.g. Cli::App::Runner
         
     | 
| 
      
 45 
     | 
    
         
            +
                  #
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # @param [String] stop_signal
         
     | 
| 
      
 47 
     | 
    
         
            +
                  #   Name of signal to send to stop process. E.g. 'HUP'.
         
     | 
| 
      
 48 
     | 
    
         
            +
                  #
         
     | 
| 
      
 49 
     | 
    
         
            +
                  # @param [Numeric] startup_wait_time
         
     | 
| 
      
 50 
     | 
    
         
            +
                  #   The amount of seconds to wait after Aruba has started a command.
         
     | 
| 
      
 51 
     | 
    
         
            +
                  def initialize(cmd, exit_timeout, io_wait_timeout, working_directory,
         
     | 
| 
      
 52 
     | 
    
         
            +
                                 environment = Aruba.platform.environment_variables.hash_from_env,
         
     | 
| 
      
 53 
     | 
    
         
            +
                                 main_class = nil, stop_signal = nil, startup_wait_time = 0)
         
     | 
| 
       40 
54 
     | 
    
         
             
                    super
         
     | 
| 
       41 
55 
     | 
    
         | 
| 
       42 
56 
     | 
    
         
             
                    @process      = nil
         
     | 
| 
         @@ -53,11 +67,12 @@ module Aruba 
     | 
|
| 
       53 
67 
     | 
    
         
             
                  def start
         
     | 
| 
       54 
68 
     | 
    
         
             
                    # rubocop:disable Metrics/LineLength
         
     | 
| 
       55 
69 
     | 
    
         
             
                    fail CommandAlreadyStartedError, %(Command "#{commandline}" has already been started. Please `#stop` the command first and `#start` it again. Alternatively use `#restart`.\n#{caller.join("\n")}) if started?
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
       56 
71 
     | 
    
         
             
                    # rubocop:enable Metrics/LineLength
         
     | 
| 
       57 
72 
     | 
    
         | 
| 
       58 
73 
     | 
    
         
             
                    @started = true
         
     | 
| 
       59 
74 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                    @process = ChildProcess.build(* 
     | 
| 
      
 75 
     | 
    
         
            +
                    @process = ChildProcess.build(*command_string.to_a)
         
     | 
| 
       61 
76 
     | 
    
         
             
                    @stdout_file = Tempfile.new('aruba-stdout-')
         
     | 
| 
       62 
77 
     | 
    
         
             
                    @stderr_file = Tempfile.new('aruba-stderr-')
         
     | 
| 
       63 
78 
     | 
    
         | 
| 
         @@ -139,14 +154,6 @@ module Aruba 
     | 
|
| 
       139 
154 
     | 
    
         
             
                    end
         
     | 
| 
       140 
155 
     | 
    
         
             
                  end
         
     | 
| 
       141 
156 
     | 
    
         | 
| 
       142 
     | 
    
         
            -
                  def read_stdout
         
     | 
| 
       143 
     | 
    
         
            -
                    # rubocop:disable Metrics/LineLength
         
     | 
| 
       144 
     | 
    
         
            -
                    Aruba.platform.deprecated('The use of "#read_stdout" is deprecated. Use "#stdout" instead. To reduce the time to wait for io, pass `:wait_for_io => 0` or some suitable for your use case')
         
     | 
| 
       145 
     | 
    
         
            -
                    # rubocop:enable Metrics/LineLength
         
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
                    stdout(:wait_for_io => 0)
         
     | 
| 
       148 
     | 
    
         
            -
                  end
         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
157 
     | 
    
         
             
                  def write(input)
         
     | 
| 
       151 
158 
     | 
    
         
             
                    return if stopped?
         
     | 
| 
       152 
159 
     | 
    
         | 
| 
         @@ -233,7 +240,7 @@ module Aruba 
     | 
|
| 
       233 
240 
     | 
    
         
             
                  # @return [Aruba::Platforms::FilesystemStatus]
         
     | 
| 
       234 
241 
     | 
    
         
             
                  #   This returns a File::Stat-object
         
     | 
| 
       235 
242 
     | 
    
         
             
                  def filesystem_status
         
     | 
| 
       236 
     | 
    
         
            -
                    Aruba.platform.filesystem_status.new( 
     | 
| 
      
 243 
     | 
    
         
            +
                    Aruba.platform.filesystem_status.new(command_path)
         
     | 
| 
       237 
244 
     | 
    
         
             
                  end
         
     | 
| 
       238 
245 
     | 
    
         | 
| 
       239 
246 
     | 
    
         
             
                  # Content of command
         
     | 
| 
         @@ -242,22 +249,27 @@ module Aruba 
     | 
|
| 
       242 
249 
     | 
    
         
             
                  #   The content of the script/command. This might be binary output as
         
     | 
| 
       243 
250 
     | 
    
         
             
                  #   string if your command is a binary executable.
         
     | 
| 
       244 
251 
     | 
    
         
             
                  def content
         
     | 
| 
       245 
     | 
    
         
            -
                    File.read  
     | 
| 
      
 252 
     | 
    
         
            +
                    File.read command_path
         
     | 
| 
      
 253 
     | 
    
         
            +
                  end
         
     | 
| 
      
 254 
     | 
    
         
            +
             
     | 
| 
      
 255 
     | 
    
         
            +
                  def interactive?
         
     | 
| 
      
 256 
     | 
    
         
            +
                    true
         
     | 
| 
       246 
257 
     | 
    
         
             
                  end
         
     | 
| 
       247 
258 
     | 
    
         | 
| 
       248 
259 
     | 
    
         
             
                  private
         
     | 
| 
       249 
260 
     | 
    
         | 
| 
       250 
261 
     | 
    
         
             
                  def command_string
         
     | 
| 
       251 
     | 
    
         
            -
                    #  
     | 
| 
       252 
     | 
    
         
            -
                    cmd = Aruba.platform.which(command, environment['PATH'])
         
     | 
| 
      
 262 
     | 
    
         
            +
                    fail LaunchError, %(Command "#{command}" not found in PATH-variable "#{environment['PATH']}".) if command_path.nil?
         
     | 
| 
       253 
263 
     | 
    
         | 
| 
       254 
     | 
    
         
            -
                     
     | 
| 
      
 264 
     | 
    
         
            +
                    Aruba.platform.command_string.new(command_path, *arguments)
         
     | 
| 
      
 265 
     | 
    
         
            +
                  end
         
     | 
| 
       255 
266 
     | 
    
         | 
| 
       256 
     | 
    
         
            -
             
     | 
| 
      
 267 
     | 
    
         
            +
                  def command_path
         
     | 
| 
      
 268 
     | 
    
         
            +
                    @command_path ||= Aruba.platform.which(command, environment['PATH'])
         
     | 
| 
       257 
269 
     | 
    
         
             
                  end
         
     | 
| 
       258 
270 
     | 
    
         | 
| 
       259 
     | 
    
         
            -
                  def wait_for_io(time_to_wait 
     | 
| 
       260 
     | 
    
         
            -
                    sleep time_to_wait 
     | 
| 
      
 271 
     | 
    
         
            +
                  def wait_for_io(time_to_wait)
         
     | 
| 
      
 272 
     | 
    
         
            +
                    sleep time_to_wait
         
     | 
| 
       261 
273 
     | 
    
         
             
                    yield
         
     | 
| 
       262 
274 
     | 
    
         
             
                  end
         
     | 
| 
       263 
275 
     | 
    
         | 
    
        data/lib/aruba/rspec.rb
    CHANGED
    
    | 
         @@ -5,16 +5,16 @@ require 'aruba/api' 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'aruba/version'
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            RSpec.configure do |config|
         
     | 
| 
       8 
     | 
    
         
            -
              config.include Aruba::Api, : 
     | 
| 
      
 8 
     | 
    
         
            +
              config.include Aruba::Api, type: :aruba
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              # Setup environment for aruba
         
     | 
| 
       11 
11 
     | 
    
         
             
              config.around :each do |example|
         
     | 
| 
       12 
12 
     | 
    
         
             
                if self.class.include? Aruba::Api
         
     | 
| 
       13 
     | 
    
         
            -
                  restore_env
         
     | 
| 
       14 
13 
     | 
    
         
             
                  setup_aruba
         
     | 
| 
       15 
14 
     | 
    
         | 
| 
       16 
15 
     | 
    
         
             
                  # Modify PATH to include project/bin
         
     | 
| 
       17 
     | 
    
         
            -
                  prepend_environment_variable 'PATH', 
     | 
| 
      
 16 
     | 
    
         
            +
                  prepend_environment_variable 'PATH',
         
     | 
| 
      
 17 
     | 
    
         
            +
                    aruba.config.command_search_paths.join(File::PATH_SEPARATOR) + File::PATH_SEPARATOR
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                  # Use configured home directory as HOME
         
     | 
| 
       20 
20 
     | 
    
         
             
                  set_environment_variable 'HOME', aruba.config.home_directory
         
     | 
| 
         @@ -23,18 +23,17 @@ RSpec.configure do |config| 
     | 
|
| 
       23 
23 
     | 
    
         
             
                example.run
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                next unless self.class.include? Aruba::Api
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       26 
27 
     | 
    
         
             
                stop_all_commands
         
     | 
| 
       27 
28 
     | 
    
         
             
              end
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
               
     | 
| 
       30 
     | 
    
         
            -
                 
     | 
| 
       31 
     | 
    
         
            -
                   
     | 
| 
       32 
     | 
    
         
            -
                    with_environment do
         
     | 
| 
       33 
     | 
    
         
            -
                      example.run
         
     | 
| 
       34 
     | 
    
         
            -
                    end
         
     | 
| 
       35 
     | 
    
         
            -
                  else
         
     | 
| 
      
 30 
     | 
    
         
            +
              config.around :each do |example|
         
     | 
| 
      
 31 
     | 
    
         
            +
                if self.class.include? Aruba::Api
         
     | 
| 
      
 32 
     | 
    
         
            +
                  with_environment do
         
     | 
| 
       36 
33 
     | 
    
         
             
                    example.run
         
     | 
| 
       37 
34 
     | 
    
         
             
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                else
         
     | 
| 
      
 36 
     | 
    
         
            +
                  example.run
         
     | 
| 
       38 
37 
     | 
    
         
             
                end
         
     | 
| 
       39 
38 
     | 
    
         
             
              end
         
     | 
| 
       40 
39 
     | 
    
         | 
| 
         @@ -48,21 +47,9 @@ RSpec.configure do |config| 
     | 
|
| 
       48 
47 
     | 
    
         
             
              config.before :each do |example|
         
     | 
| 
       49 
48 
     | 
    
         
             
                next unless self.class.include?(Aruba::Api)
         
     | 
| 
       50 
49 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                if example.metadata[:announce_environment]
         
     | 
| 
       52 
     | 
    
         
            -
                  Aruba.platform.deprecated 'announce_environment is deprecated. Use announce_changed_environment instead'
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                  aruba.announcer.activate(:changed_environment)
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
50 
     | 
    
         
             
                aruba.announcer.activate(:full_environment)     if example.metadata[:announce_full_environment]
         
     | 
| 
       58 
51 
     | 
    
         
             
                aruba.announcer.activate(:changed_environment)  if example.metadata[:announce_changed_environment]
         
     | 
| 
       59 
52 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                if example.metadata[:announce_modified_environment]
         
     | 
| 
       61 
     | 
    
         
            -
                  Aruba.platform.deprecated 'announce_modified_environment is deprecated. Use announce_changed_environment instead'
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                  aruba.announcer.activate(:changed_environment)
         
     | 
| 
       64 
     | 
    
         
            -
                end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
53 
     | 
    
         
             
                aruba.announcer.activate(:command)                   if example.metadata[:announce_command]
         
     | 
| 
       67 
54 
     | 
    
         
             
                aruba.announcer.activate(:directory)                 if example.metadata[:announce_directory]
         
     | 
| 
       68 
55 
     | 
    
         
             
                aruba.announcer.activate(:full_environment)          if example.metadata[:announce_full_environment]
         
     | 
    
        data/lib/aruba/runtime.rb
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'aruba/ 
     | 
| 
      
 1 
     | 
    
         
            +
            require 'aruba/configuration'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'aruba/aruba_path'
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'aruba/config_wrapper'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'aruba/events'
         
     | 
| 
         @@ -49,7 +49,7 @@ module Aruba 
     | 
|
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
                  @environment.update(@config.command_runtime_environment)
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                  @command_monitor = opts.fetch(:command_monitor, Aruba.platform.command_monitor.new(: 
     | 
| 
      
 52 
     | 
    
         
            +
                  @command_monitor = opts.fetch(:command_monitor, Aruba.platform.command_monitor.new(announcer: @announcer))
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
                  @logger = opts.fetch(:logger, Aruba.platform.logger.new)
         
     | 
| 
       55 
55 
     | 
    
         
             
                  @logger.mode = @config.log_level
         
     | 
| 
         @@ -77,11 +77,13 @@ module Aruba 
     | 
|
| 
       77 
77 
     | 
    
         
             
                # @return [ArubaPath]
         
     | 
| 
       78 
78 
     | 
    
         
             
                #   The directory to where your fixtures are stored
         
     | 
| 
       79 
79 
     | 
    
         
             
                def fixtures_directory
         
     | 
| 
       80 
     | 
    
         
            -
                   
     | 
| 
      
 80 
     | 
    
         
            +
                  @fixtures_directory ||= begin
         
     | 
| 
       81 
81 
     | 
    
         
             
                    candidates = config.fixtures_directories.map { |dir| File.join(root_directory, dir) }
         
     | 
| 
       82 
     | 
    
         
            -
                     
     | 
| 
      
 82 
     | 
    
         
            +
                    directory = candidates.find { |d| Aruba.platform.directory? d }
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
                    fail "No existing fixtures directory found in #{candidates.map { |d| format('"%s"', d) }.join(', ')}. 
     | 
| 
      
 84 
     | 
    
         
            +
                    fail "No existing fixtures directory found in #{candidates.map { |d| format('"%s"', d) }.join(', ')}." unless directory
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                    directory
         
     | 
| 
       85 
87 
     | 
    
         
             
                  end
         
     | 
| 
       86 
88 
     | 
    
         | 
| 
       87 
89 
     | 
    
         
             
                  fail %(Fixtures directory "#{@fixtures_directory}" is not a directory) unless Aruba.platform.directory?(@fixtures_directory)
         
     |