aruba 0.11.0.pre → 0.11.0.pre2

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/History.md +21 -1
  4. data/aruba.gemspec +1 -0
  5. data/features/api/command/find_command.feature +83 -0
  6. data/features/api/command/last_command_started.feature +50 -0
  7. data/features/api/command/last_command_stopped.feature +89 -0
  8. data/features/api/command/run.feature +259 -0
  9. data/features/api/command/stop.feature +53 -1
  10. data/features/api/text/replace_variables.feature +1 -1
  11. data/features/getting_started/run_commands.feature +177 -0
  12. data/features/matchers/file/be_existing_executable.feature +87 -0
  13. data/features/{integration/rspec/getting_started.feature → rspec/integration.feature} +31 -0
  14. data/fixtures/getting-started-app/Gemfile +1 -1
  15. data/lib/aruba.rb +0 -19
  16. data/lib/aruba/api.rb +2 -0
  17. data/lib/aruba/api/command.rb +103 -44
  18. data/lib/aruba/api/core.rb +13 -8
  19. data/lib/aruba/api/deprecated.rb +26 -4
  20. data/lib/aruba/api/environment.rb +21 -13
  21. data/lib/aruba/api/filesystem.rb +13 -0
  22. data/lib/aruba/api/rvm.rb +5 -0
  23. data/lib/aruba/api/text.rb +7 -1
  24. data/lib/aruba/aruba_path.rb +6 -0
  25. data/lib/aruba/basic_configuration.rb +35 -3
  26. data/lib/aruba/basic_configuration/option.rb +7 -0
  27. data/lib/aruba/cli.rb +4 -0
  28. data/lib/aruba/command.rb +47 -1
  29. data/lib/aruba/config.rb +15 -2
  30. data/lib/aruba/config_wrapper.rb +49 -8
  31. data/lib/aruba/console.rb +4 -1
  32. data/lib/aruba/console/help.rb +2 -0
  33. data/lib/aruba/contracts/absolute_path.rb +7 -0
  34. data/lib/aruba/contracts/enum.rb +5 -0
  35. data/lib/aruba/contracts/is_power_of_two.rb +9 -2
  36. data/lib/aruba/contracts/relative_path.rb +7 -0
  37. data/lib/aruba/cucumber/command.rb +6 -9
  38. data/lib/aruba/cucumber/file.rb +1 -1
  39. data/lib/aruba/cucumber/hooks.rb +36 -29
  40. data/lib/aruba/errors.rb +16 -1
  41. data/lib/aruba/events.rb +39 -0
  42. data/lib/aruba/extensions/string/strip.rb +1 -0
  43. data/lib/aruba/file_size.rb +11 -0
  44. data/lib/aruba/hooks.rb +2 -0
  45. data/lib/aruba/in_config_wrapper.rb +24 -0
  46. data/lib/aruba/in_process.rb +2 -0
  47. data/lib/aruba/initializer.rb +37 -0
  48. data/lib/aruba/matchers/base/base_matcher.rb +2 -0
  49. data/lib/aruba/matchers/base/object_formatter.rb +4 -0
  50. data/lib/aruba/matchers/collection/all.rb +2 -0
  51. data/lib/aruba/matchers/collection/include_an_object.rb +2 -0
  52. data/lib/aruba/matchers/command/have_exit_status.rb +1 -1
  53. data/lib/aruba/matchers/command/have_finished_in_time.rb +1 -10
  54. data/lib/aruba/matchers/command/have_output.rb +1 -10
  55. data/lib/aruba/matchers/command/have_output_on_stderr.rb +1 -10
  56. data/lib/aruba/matchers/command/have_output_on_stdout.rb +1 -10
  57. data/lib/aruba/matchers/file/be_an_existing_executable.rb +37 -0
  58. data/lib/aruba/platform.rb +4 -0
  59. data/lib/aruba/platforms/announcer.rb +225 -0
  60. data/lib/aruba/platforms/aruba_file_creator.rb +4 -0
  61. data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +4 -0
  62. data/lib/aruba/{aruba_logger.rb → platforms/aruba_logger.rb} +4 -0
  63. data/lib/aruba/platforms/command_monitor.rb +229 -0
  64. data/lib/aruba/platforms/determine_disk_usage.rb +5 -0
  65. data/lib/aruba/platforms/determine_file_size.rb +9 -0
  66. data/lib/aruba/platforms/disk_usage_calculator.rb +9 -0
  67. data/lib/aruba/platforms/local_environment.rb +12 -0
  68. data/lib/aruba/platforms/simple_table.rb +11 -0
  69. data/lib/aruba/platforms/unix_command_string.rb +3 -0
  70. data/lib/aruba/platforms/unix_environment_variables.rb +3 -0
  71. data/lib/aruba/platforms/unix_platform.rb +20 -2
  72. data/lib/aruba/platforms/unix_which.rb +6 -2
  73. data/lib/aruba/platforms/windows_command_string.rb +7 -0
  74. data/lib/aruba/platforms/windows_environment_variables.rb +2 -0
  75. data/lib/aruba/platforms/windows_platform.rb +3 -0
  76. data/lib/aruba/platforms/windows_which.rb +6 -2
  77. data/lib/aruba/processes/basic_process.rb +20 -5
  78. data/lib/aruba/processes/debug_process.rb +3 -1
  79. data/lib/aruba/processes/in_process.rb +18 -2
  80. data/lib/aruba/processes/spawn_process.rb +14 -13
  81. data/lib/aruba/rspec.rb +34 -23
  82. data/lib/aruba/runtime.rb +65 -6
  83. data/lib/aruba/setup.rb +87 -0
  84. data/lib/aruba/version.rb +1 -1
  85. data/spec/aruba/api_spec.rb +13 -36
  86. data/spec/aruba/{config_wrapper_spec.rb → in_config_wrapper_spec.rb} +1 -1
  87. data/spec/aruba/spawn_process_spec.rb +9 -14
  88. data/spec/support/configs/pry.rb +3 -0
  89. data/spec/support/shared_contexts/aruba.rb +1 -0
  90. metadata +40 -14
  91. data/features/getting_started/supported_programming_languages.feature +0 -89
  92. data/lib/aruba/announcer.rb +0 -219
  93. data/lib/aruba/matchers/rspec.rb +0 -0
  94. data/lib/aruba/process_monitor.rb +0 -201
  95. data/lib/aruba/processes/null_process.rb +0 -26
@@ -1,7 +1,11 @@
1
+ # Aruba
1
2
  module Aruba
3
+ # Platforms
2
4
  module Platforms
3
5
  # Normal File Creator
4
6
  # This class is not meant to be used directly by users.
7
+ #
8
+ # @private
5
9
  class ArubaFileCreator
6
10
  # Write File
7
11
  #
@@ -1,4 +1,6 @@
1
+ # Aruba
1
2
  module Aruba
3
+ # Platforms
2
4
  module Platforms
3
5
  # Create files with fixed size
4
6
  #
@@ -6,6 +8,8 @@ module Aruba
6
8
  #
7
9
  # It uses a single null byte as content and really creates so called sparse
8
10
  # files.
11
+ #
12
+ # @private
9
13
  class ArubaFixedSizeFileCreator
10
14
  # Write File
11
15
  #
@@ -1,6 +1,10 @@
1
1
  require 'logger'
2
2
 
3
+ # Aruba
3
4
  module Aruba
5
+ # Logger
6
+ #
7
+ # @private
4
8
  class ArubaLogger
5
9
  attr_reader :mode
6
10
 
@@ -0,0 +1,229 @@
1
+ require 'aruba/errors'
2
+
3
+ # Aruba
4
+ module Aruba
5
+ # The command monitor is part of the private API of Aruba.
6
+ #
7
+ # @private
8
+ class CommandMonitor
9
+ private
10
+
11
+ attr_reader :announcer
12
+
13
+ public
14
+
15
+ attr_reader :registered_commands, :last_command_started
16
+
17
+ class DefaultLastCommandStopped
18
+ def nil?
19
+ true
20
+ end
21
+
22
+ def method_missing(*)
23
+ fail NoCommandHasBeenStoppedError, 'No last command stopped available'
24
+ end
25
+ end
26
+
27
+ class DefaultLastCommandStarted
28
+ def nil?
29
+ true
30
+ end
31
+
32
+ def method_missing(*)
33
+ fail NoCommandHasBeenStartedError, 'No last command started available'
34
+ end
35
+ end
36
+
37
+ # rubocop:disable Metrics/MethodLength
38
+ def initialize(opts = {})
39
+ @registered_commands = []
40
+ @announcer = opts.fetch(:announcer)
41
+
42
+ @last_command_stopped = DefaultLastCommandStopped.new
43
+ @last_command_started = DefaultLastCommandStarted.new
44
+
45
+ rescue KeyError => e
46
+ raise ArgumentError, e.message
47
+ end
48
+
49
+ if Aruba::VERSION < '1'
50
+ # Return the last command stopped
51
+ def last_command_stopped
52
+ return @last_command_stopped unless @last_command_stopped.nil?
53
+
54
+ registered_commands.each(&:stop)
55
+
56
+ @last_command_stopped
57
+ end
58
+ else
59
+ attr_reader :last_command_stopped
60
+ end
61
+
62
+ # Set last command started
63
+ #
64
+ # @param [String] cmd
65
+ # The commandline of the command
66
+ def last_command_started=(cmd)
67
+ @last_command_started = find(cmd)
68
+ end
69
+
70
+ # Set last command started
71
+ #
72
+ # @param [String] cmd
73
+ # The commandline of the command
74
+ def last_command_stopped=(cmd)
75
+ @last_command_stopped = find(cmd)
76
+ end
77
+
78
+ # Find command
79
+ #
80
+ # @yield [Command]
81
+ # This yields the found command
82
+ def find(cmd)
83
+ cmd = cmd.commandline if cmd.respond_to? :commandline
84
+ command = registered_commands.reverse.find { |c| c.commandline == cmd }
85
+
86
+ fail CommandNotFoundError, "No command named '#{cmd}' has been started" if command.nil?
87
+
88
+ command
89
+ end
90
+
91
+ # Clear list of known commands
92
+ def clear
93
+ registered_commands.each(&:terminate)
94
+ registered_commands.clear
95
+
96
+ self
97
+ end
98
+
99
+ # @deprecated
100
+ # Fetch output (stdout, stderr) from command
101
+ #
102
+ # @param [String] cmd
103
+ # The command
104
+ def output_from(cmd)
105
+ cmd = Utils.detect_ruby(cmd)
106
+ find(cmd).output
107
+ end
108
+
109
+ # @deprecated
110
+ # Fetch stdout from command
111
+ #
112
+ # @param [String] cmd
113
+ # The command
114
+ def stdout_from(cmd)
115
+ cmd = Utils.detect_ruby(cmd)
116
+ find(cmd).stdout
117
+ end
118
+
119
+ # @deprecated
120
+ # Fetch stderr from command
121
+ #
122
+ # @param [String] cmd
123
+ # The command
124
+ def stderr_from(cmd)
125
+ cmd = Utils.detect_ruby(cmd)
126
+ find(cmd).stderr
127
+ end
128
+
129
+ # @deprecated
130
+ # Get stdout of all commands
131
+ #
132
+ # @return [String]
133
+ # The stdout of all command which have run before
134
+ def all_stdout
135
+ registered_commands.each(&:stop)
136
+
137
+ if RUBY_VERSION < '1.9.3'
138
+ # rubocop:disable Style/EachWithObject
139
+ registered_commands.inject("") { |a, e| a << e.stdout; a }
140
+ # rubocop:enable Style/EachWithObject
141
+ else
142
+ registered_commands.each_with_object("") { |e, a| a << e.stdout }
143
+ end
144
+ end
145
+
146
+ # @deprecated
147
+ # Get stderr of all commands
148
+ #
149
+ # @return [String]
150
+ # The stderr of all command which have run before
151
+ def all_stderr
152
+ registered_commands.each(&:stop)
153
+
154
+ if RUBY_VERSION < '1.9.3'
155
+ # rubocop:disable Style/EachWithObject
156
+ registered_commands.inject("") { |a, e| a << e.stderr; a }
157
+ # rubocop:enable Style/EachWithObject
158
+ else
159
+ registered_commands.each_with_object("") { |e, a| a << e.stderr }
160
+ end
161
+ end
162
+
163
+ # @deprecated
164
+ # Get stderr and stdout of all commands
165
+ #
166
+ # @return [String]
167
+ # The stderr and stdout of all command which have run before
168
+ def all_output
169
+ all_stdout << all_stderr
170
+ end
171
+
172
+ # @deprecated
173
+ def last_exit_status
174
+ Aruba.platform.deprecated('The use of "#last_exit_status" is deprecated. Use "last_command_(started|stopped).exit_status" instead')
175
+
176
+ return @last_exit_status if @last_exit_status
177
+ registered_commands.each(&:stop)
178
+ @last_exit_status
179
+ end
180
+
181
+ # @deprecated
182
+ def stop_process(process)
183
+ @last_command_stopped = process
184
+ @last_exit_status = process.stop(announcer)
185
+ end
186
+
187
+ # @deprecated
188
+ def terminate_process!(process)
189
+ process.terminate
190
+ end
191
+
192
+ # @deprecated
193
+ def stop_processes!
194
+ Aruba.platform.deprecated('The use of "#stop_processes!" is deprecated.')
195
+
196
+ registered_commands.each(&:stop)
197
+ end
198
+
199
+ # @deprecated
200
+ # Terminate all running processes
201
+ def terminate_processes
202
+ Aruba.platform.deprecated('The use of "#terminate_processes" is deprecated.')
203
+
204
+ registered_commands.each(&:terminate)
205
+ end
206
+
207
+ # @deprecated
208
+ def only_processes
209
+ Aruba.platform.deprecated('The use of "#only_processes" is deprecated.')
210
+
211
+ registered_commands
212
+ end
213
+
214
+ # @deprecated
215
+ def get_process(wanted)
216
+ command = find(wanted)
217
+ raise ArgumentError.new("No process named '#{wanted}' has been started") unless command
218
+
219
+ command
220
+ end
221
+
222
+ # Register command to monitor
223
+ def register_command(cmd)
224
+ registered_commands << cmd
225
+
226
+ self
227
+ end
228
+ end
229
+ end
@@ -1,7 +1,12 @@
1
1
  require 'aruba/platforms/disk_usage_calculator'
2
2
 
3
+ # Aruba
3
4
  module Aruba
5
+ # Platforms
4
6
  module Platforms
7
+ # Determinate disk usage
8
+ #
9
+ # @private
5
10
  class DetermineDiskUsage
6
11
  def call(*args)
7
12
  args = args.flatten
@@ -1,5 +1,14 @@
1
+ # Aruba
1
2
  module Aruba
3
+ # Platforms
2
4
  module Platforms
5
+ # Determine size of a file
6
+ #
7
+ # @param [String] path
8
+ # The path to file
9
+ #
10
+ # @return [Integer]
11
+ # Returns size if exists. Returns -1 if path does not exist
3
12
  class DetermineFileSize
4
13
  def call(path)
5
14
  return -1 unless File.file? path
@@ -1,8 +1,17 @@
1
1
  require 'aruba/file_size'
2
2
 
3
+ # Aruba
3
4
  module Aruba
5
+ # Platforms
4
6
  module Platforms
7
+ # Calculate disk usage
5
8
  class DiskUsageCalculator
9
+ # Calc
10
+ #
11
+ # @param [Integer] blocks
12
+ # Count of blocks
13
+ # @param [Integer] block_size
14
+ # The size of a single block
6
15
  def call(blocks, block_size)
7
16
  Aruba::FileSize.new(blocks * block_size)
8
17
  end
@@ -1,6 +1,18 @@
1
+ # Aruba
1
2
  module Aruba
3
+ # Platforms
2
4
  module Platforms
5
+ # Local environemnt
6
+ #
7
+ # Wraps logic to make enviroment local and restorable
3
8
  class LocalEnvironment
9
+ # Run in environment
10
+ #
11
+ # @param [Hash] env
12
+ # The environment
13
+ #
14
+ # @yield
15
+ # The block of code which should with local ENV
4
16
  def call(env, &block)
5
17
  old_env = ENV.to_hash.dup
6
18
 
@@ -1,5 +1,8 @@
1
+ # Aruba
1
2
  module Aruba
3
+ # Platforms
2
4
  module Platforms
5
+ # Generate simple table
3
6
  class SimpleTable
4
7
  private
5
8
 
@@ -7,10 +10,18 @@ module Aruba
7
10
 
8
11
  public
9
12
 
13
+ # Create
14
+ #
15
+ # @param [Hash] hash
16
+ # Input
10
17
  def initialize(hash)
11
18
  @hash = hash
12
19
  end
13
20
 
21
+ # Generate table
22
+ #
23
+ # @return [String]
24
+ # The table
14
25
  def to_s
15
26
  longest_key = hash.keys.map(&:to_s).max_by(&:length)
16
27
  return [] if longest_key.nil?
@@ -1,7 +1,9 @@
1
1
  require 'delegate'
2
2
  require 'shellwords'
3
3
 
4
+ # Aruba
4
5
  module Aruba
6
+ # Platforms
5
7
  module Platforms
6
8
  # This is a command which should be run
7
9
  class UnixCommandString < SimpleDelegator
@@ -9,6 +11,7 @@ module Aruba
9
11
  __setobj__ cmd
10
12
  end
11
13
 
14
+ # Convert to array
12
15
  def to_a
13
16
  Shellwords.split __getobj__
14
17
  end
@@ -1,5 +1,8 @@
1
+ # Aruba
1
2
  module Aruba
3
+ # Platforms
2
4
  module Platforms
5
+ # Abstract environment variables
3
6
  class UnixEnvironmentVariables
4
7
  # We need to use this, because `nil` is a valid value as default
5
8
  UNDEFINED = Object.new.freeze
@@ -11,7 +11,11 @@ require 'aruba/platforms/determine_disk_usage'
11
11
  require 'aruba/platforms/aruba_file_creator'
12
12
  require 'aruba/platforms/aruba_fixed_size_file_creator'
13
13
  require 'aruba/platforms/local_environment'
14
+ require 'aruba/platforms/aruba_logger'
15
+ require 'aruba/platforms/announcer'
16
+ require 'aruba/platforms/command_monitor'
14
17
 
18
+ # Aruba
15
19
  module Aruba
16
20
  # This abstracts OS-specific things
17
21
  module Platforms
@@ -22,6 +26,8 @@ module Aruba
22
26
  # any further notice.
23
27
  #
24
28
  # This includes all methods for the UNIX platform
29
+ #
30
+ # @private
25
31
  class UnixPlatform
26
32
  def self.match?
27
33
  !FFI::Platform.windows?
@@ -35,6 +41,18 @@ module Aruba
35
41
  UnixCommandString
36
42
  end
37
43
 
44
+ def announcer
45
+ Announcer
46
+ end
47
+
48
+ def command_monitor
49
+ CommandMonitor
50
+ end
51
+
52
+ def logger
53
+ ArubaLogger
54
+ end
55
+
38
56
  def determine_file_size(*args)
39
57
  DetermineFileSize.new.call(*args)
40
58
  end
@@ -151,8 +169,8 @@ module Aruba
151
169
  end
152
170
 
153
171
  # Path is executable
154
- def executable_file?(f)
155
- File.file?(f) && File.executable?(f)
172
+ def executable?(f)
173
+ File.executable?(f)
156
174
  end
157
175
 
158
176
  # Expand path