aruba 0.14.9 → 1.0.0

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 (309) hide show
  1. checksums.yaml +4 -4
  2. data/.cucumberproignore +3 -0
  3. data/.github/ISSUE_TEMPLATE.md +48 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +41 -0
  5. data/.gitignore +1 -0
  6. data/.rspec +1 -1
  7. data/.rubocop.yml +20 -179
  8. data/.rubocop_todo.yml +262 -0
  9. data/.simplecov +7 -5
  10. data/.travis.yml +54 -46
  11. data/.yardopts +3 -0
  12. data/CHANGELOG.md +613 -246
  13. data/CONTRIBUTING.md +247 -45
  14. data/Dockerfile +67 -0
  15. data/Gemfile +5 -96
  16. data/LICENSE +1 -1
  17. data/README.md +57 -180
  18. data/Rakefile +63 -32
  19. data/appveyor.yml +8 -11
  20. data/aruba.gemspec +47 -41
  21. data/bin/console +7 -0
  22. data/bin/test +9 -0
  23. data/cucumber.yml +4 -24
  24. data/doc/dependency_decisions.yml +42 -2
  25. data/docker-compose.yml +26 -0
  26. data/{bin → exe}/aruba +1 -1
  27. data/fixtures/cli-app/Rakefile +1 -1
  28. data/fixtures/cli-app/bin/aruba-test-cli +6 -0
  29. data/fixtures/cli-app/cli-app.gemspec +1 -2
  30. data/fixtures/cli-app/features/support/aruba.rb +1 -0
  31. data/fixtures/cli-app/features/support/env.rb +1 -1
  32. data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +3 -3
  33. data/fixtures/cli-app/lib/cli/app/version.rb +1 -1
  34. data/fixtures/cli-app/lib/cli/app.rb +1 -5
  35. data/fixtures/cli-app/spec/spec_helper.rb +4 -6
  36. data/fixtures/empty-app/Rakefile +1 -1
  37. data/fixtures/empty-app/cli-app.gemspec +1 -2
  38. data/fixtures/empty-app/lib/cli/app/version.rb +1 -1
  39. data/fixtures/empty-app/lib/cli/app.rb +0 -6
  40. data/fixtures/getting-started-app/Gemfile +1 -1
  41. data/lib/aruba/api/commands.rb +109 -143
  42. data/lib/aruba/api/core.rb +57 -43
  43. data/lib/aruba/api/environment.rb +16 -7
  44. data/lib/aruba/api/filesystem.rb +42 -29
  45. data/lib/aruba/api/text.rb +3 -9
  46. data/lib/aruba/api.rb +6 -11
  47. data/lib/aruba/aruba_path.rb +27 -89
  48. data/lib/aruba/basic_configuration.rb +4 -24
  49. data/lib/aruba/cli.rb +1 -1
  50. data/lib/aruba/colorizer.rb +10 -99
  51. data/lib/aruba/command.rb +2 -0
  52. data/lib/aruba/config/jruby.rb +15 -5
  53. data/lib/aruba/config_wrapper.rb +1 -1
  54. data/lib/aruba/configuration.rb +92 -0
  55. data/lib/aruba/console/help.rb +1 -7
  56. data/lib/aruba/console.rb +5 -5
  57. data/lib/aruba/contracts/absolute_path.rb +2 -2
  58. data/lib/aruba/contracts/relative_path.rb +2 -2
  59. data/lib/aruba/cucumber/command.rb +171 -160
  60. data/lib/aruba/cucumber/environment.rb +1 -1
  61. data/lib/aruba/cucumber/file.rb +21 -35
  62. data/lib/aruba/cucumber/hooks.rb +17 -56
  63. data/lib/aruba/cucumber/testing_frameworks.rb +74 -50
  64. data/lib/aruba/cucumber.rb +0 -5
  65. data/lib/aruba/event_bus/name_resolver.rb +5 -16
  66. data/lib/aruba/hooks.rb +1 -1
  67. data/lib/aruba/in_config_wrapper.rb +5 -1
  68. data/lib/aruba/initializer.rb +36 -42
  69. data/lib/aruba/matchers/base/base_matcher.rb +2 -2
  70. data/lib/aruba/matchers/base/message_indenter.rb +19 -0
  71. data/lib/aruba/matchers/base/object_formatter.rb +2 -9
  72. data/lib/aruba/matchers/collection/include_an_object.rb +7 -9
  73. data/lib/aruba/matchers/command/be_successfully_executed.rb +6 -4
  74. data/lib/aruba/matchers/command/have_exit_status.rb +14 -4
  75. data/lib/aruba/matchers/command/have_finished_in_time.rb +3 -5
  76. data/lib/aruba/matchers/command/have_output.rb +10 -5
  77. data/lib/aruba/matchers/command/have_output_on_stderr.rb +2 -2
  78. data/lib/aruba/matchers/command/have_output_on_stdout.rb +2 -2
  79. data/lib/aruba/matchers/command/have_output_size.rb +2 -2
  80. data/lib/aruba/matchers/directory/be_an_existing_directory.rb +5 -7
  81. data/lib/aruba/matchers/directory/have_sub_directory.rb +4 -6
  82. data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +2 -4
  83. data/lib/aruba/matchers/file/be_an_existing_executable.rb +4 -6
  84. data/lib/aruba/matchers/file/be_an_existing_file.rb +5 -7
  85. data/lib/aruba/matchers/file/have_file_content.rb +4 -4
  86. data/lib/aruba/matchers/file/have_file_size.rb +6 -8
  87. data/lib/aruba/matchers/file/have_same_file_content.rb +5 -8
  88. data/lib/aruba/matchers/path/a_path_matching_pattern.rb +2 -4
  89. data/lib/aruba/matchers/path/be_an_absolute_path.rb +3 -5
  90. data/lib/aruba/matchers/path/be_an_existing_path.rb +4 -6
  91. data/lib/aruba/matchers/path/have_permissions.rb +6 -8
  92. data/lib/aruba/matchers/string/include_output_string.rb +8 -10
  93. data/lib/aruba/matchers/string/match_output_string.rb +9 -11
  94. data/lib/aruba/matchers/string/output_string_eq.rb +7 -9
  95. data/lib/aruba/platform.rb +0 -8
  96. data/lib/aruba/platforms/announcer.rb +42 -79
  97. data/lib/aruba/platforms/aruba_file_creator.rb +2 -6
  98. data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +2 -2
  99. data/lib/aruba/platforms/aruba_logger.rb +23 -7
  100. data/lib/aruba/platforms/command_monitor.rb +12 -107
  101. data/lib/aruba/platforms/determine_disk_usage.rb +56 -14
  102. data/lib/aruba/platforms/filesystem_status.rb +10 -14
  103. data/lib/aruba/platforms/local_environment.rb +2 -2
  104. data/lib/aruba/platforms/simple_table.rb +3 -11
  105. data/lib/aruba/platforms/unix_command_string.rb +7 -11
  106. data/lib/aruba/platforms/unix_environment_variables.rb +18 -27
  107. data/lib/aruba/platforms/unix_platform.rb +20 -51
  108. data/lib/aruba/platforms/unix_which.rb +2 -1
  109. data/lib/aruba/platforms/windows_command_string.rb +15 -10
  110. data/lib/aruba/platforms/windows_environment_variables.rb +43 -44
  111. data/lib/aruba/platforms/windows_platform.rb +4 -0
  112. data/lib/aruba/platforms/windows_which.rb +4 -3
  113. data/lib/aruba/processes/basic_process.rb +28 -30
  114. data/lib/aruba/processes/debug_process.rb +12 -3
  115. data/lib/aruba/processes/in_process.rb +17 -8
  116. data/lib/aruba/processes/spawn_process.rb +57 -46
  117. data/lib/aruba/rspec.rb +14 -36
  118. data/lib/aruba/runtime.rb +3 -6
  119. data/lib/aruba/setup.rb +6 -6
  120. data/lib/aruba/tasks/docker_helpers.rb +154 -0
  121. data/lib/aruba/version.rb +1 -1
  122. metadata +191 -244
  123. data/features/.nav +0 -72
  124. data/features/api/command/find_command.feature +0 -83
  125. data/features/api/command/last_command_started.feature +0 -50
  126. data/features/api/command/last_command_stopped.feature +0 -89
  127. data/features/api/command/run.feature +0 -414
  128. data/features/api/command/run_simple.feature +0 -242
  129. data/features/api/command/send_signal.feature +0 -53
  130. data/features/api/command/stderr.feature +0 -46
  131. data/features/api/command/stdout.feature +0 -46
  132. data/features/api/command/stop.feature +0 -131
  133. data/features/api/command/stop_all_commands.feature +0 -53
  134. data/features/api/command/terminate_all_commands.feature +0 -53
  135. data/features/api/command/which.feature +0 -37
  136. data/features/api/core/expand_path.feature +0 -88
  137. data/features/api/environment/append_environment_variable.feature +0 -128
  138. data/features/api/environment/delete_environment_variable.feature +0 -63
  139. data/features/api/environment/prepend_environment_variable.feature +0 -128
  140. data/features/api/environment/set_environment_variable.feature +0 -376
  141. data/features/api/filesystem/cd.feature +0 -184
  142. data/features/api/filesystem/create_directory.feature +0 -57
  143. data/features/api/filesystem/disk_usage.feature +0 -152
  144. data/features/api/filesystem/does_exist.feature +0 -62
  145. data/features/api/filesystem/fixtures.feature +0 -104
  146. data/features/api/filesystem/is_absolute.feature +0 -48
  147. data/features/api/filesystem/is_directory.feature +0 -53
  148. data/features/api/filesystem/is_file.feature +0 -54
  149. data/features/api/filesystem/is_relative.feature +0 -48
  150. data/features/api/filesystem/move.feature +0 -119
  151. data/features/api/text/extract_text.feature +0 -87
  152. data/features/api/text/replace_variables.feature +0 -45
  153. data/features/api/text/sanitize_text.feature +0 -228
  154. data/features/api/text/unescape_text.feature +0 -127
  155. data/features/cli/console.feature +0 -52
  156. data/features/cli/init.feature +0 -79
  157. data/features/configuration/activate_announcer_on_command_failure.feature +0 -38
  158. data/features/configuration/command_runtime_environment.feature +0 -129
  159. data/features/configuration/console_history_file.feature +0 -38
  160. data/features/configuration/exit_timeout.feature +0 -52
  161. data/features/configuration/fixtures_directories.feature +0 -38
  162. data/features/configuration/fixtures_path_prefix.feature +0 -23
  163. data/features/configuration/home_directory.feature +0 -80
  164. data/features/configuration/io_timeout.feature +0 -30
  165. data/features/configuration/keep_ansi.feature +0 -30
  166. data/features/configuration/log_level.feature +0 -38
  167. data/features/configuration/physical_block_size.feature +0 -53
  168. data/features/configuration/remove_ansi_escape_sequences.feature +0 -38
  169. data/features/configuration/root_directory.feature +0 -30
  170. data/features/configuration/startup_wait_time.feature +0 -48
  171. data/features/configuration/usage.feature +0 -159
  172. data/features/configuration/working_directory.feature +0 -33
  173. data/features/development/build.feature +0 -15
  174. data/features/getting_started/cleanup.feature +0 -58
  175. data/features/getting_started/run_commands.feature +0 -187
  176. data/features/getting_started/supported_testing_frameworks.feature +0 -104
  177. data/features/getting_started/writing_good_feature_tests.feature +0 -38
  178. data/features/hooks/after/command.feature +0 -46
  179. data/features/hooks/before/command.feature +0 -75
  180. data/features/matchers/collection/include_an_object.feature +0 -72
  181. data/features/matchers/directory/have_sub_directory.feature +0 -110
  182. data/features/matchers/file/be_a_command_found_in_path.feature +0 -115
  183. data/features/matchers/file/be_existing_executable.feature +0 -88
  184. data/features/matchers/file/be_existing_file.feature +0 -82
  185. data/features/matchers/file/have_file_content.feature +0 -123
  186. data/features/matchers/file/have_file_size.feature +0 -107
  187. data/features/matchers/path/be_an_absolute_path.feature +0 -74
  188. data/features/matchers/path/be_an_existing_path.feature +0 -97
  189. data/features/matchers/path/have_permissions.feature +0 -118
  190. data/features/matchers/timeouts.feature +0 -48
  191. data/features/platforms/jruby.feature +0 -14
  192. data/features/rspec/integration.feature +0 -179
  193. data/features/step_definitions/aruba_dev_steps.rb +0 -56
  194. data/features/step_definitions/hooks.rb +0 -156
  195. data/features/steps/command/debug.feature +0 -92
  196. data/features/steps/command/exit_statuses.feature +0 -136
  197. data/features/steps/command/in_process.feature +0 -485
  198. data/features/steps/command/interactive.feature +0 -90
  199. data/features/steps/command/output.feature +0 -567
  200. data/features/steps/command/run.feature +0 -66
  201. data/features/steps/command/send_signal.feature +0 -104
  202. data/features/steps/command/shell.feature +0 -155
  203. data/features/steps/command/stderr.feature +0 -68
  204. data/features/steps/command/stdout.feature +0 -109
  205. data/features/steps/command/stop.feature +0 -313
  206. data/features/steps/core/announce.feature +0 -283
  207. data/features/steps/environment/append_environment_variable.feature +0 -52
  208. data/features/steps/environment/disable_bunder.feature +0 -18
  209. data/features/steps/environment/home_variable.feature +0 -62
  210. data/features/steps/environment/prepend_environment_variable.feature +0 -52
  211. data/features/steps/environment/set_environment_variable.feature +0 -49
  212. data/features/steps/filesystem/append_to_file.feature +0 -45
  213. data/features/steps/filesystem/cd_to_directory.feature +0 -33
  214. data/features/steps/filesystem/check_file_content.feature +0 -61
  215. data/features/steps/filesystem/check_permissions_of_file.feature +0 -39
  216. data/features/steps/filesystem/compare_files.feature +0 -42
  217. data/features/steps/filesystem/copy.feature +0 -45
  218. data/features/steps/filesystem/create_directory.feature +0 -57
  219. data/features/steps/filesystem/create_file.feature +0 -76
  220. data/features/steps/filesystem/existence_of_directory.feature +0 -57
  221. data/features/steps/filesystem/existence_of_file.feature +0 -43
  222. data/features/steps/filesystem/file_content.feature +0 -86
  223. data/features/steps/filesystem/fixtures.feature +0 -64
  224. data/features/steps/filesystem/move.feature +0 -45
  225. data/features/steps/filesystem/non_existence_of_directory.feature +0 -69
  226. data/features/steps/filesystem/non_existence_of_file.feature +0 -80
  227. data/features/steps/filesystem/overwrite_file.feature +0 -72
  228. data/features/steps/filesystem/remove_directory.feature +0 -38
  229. data/features/steps/filesystem/remove_file.feature +0 -38
  230. data/features/steps/filesystem/use_fixture.feature +0 -77
  231. data/features/steps/overview.feature +0 -25
  232. data/features/support/aruba.rb +0 -7
  233. data/features/support/env.rb +0 -33
  234. data/features/support/jruby.rb +0 -5
  235. data/features/support/simplecov_setup.rb +0 -8
  236. data/fixtures/cli-app/bin/cli +0 -6
  237. data/fixtures/spawn_process/stderr.sh +0 -3
  238. data/lib/aruba/api/deprecated.rb +0 -1234
  239. data/lib/aruba/config.rb +0 -107
  240. data/lib/aruba/cucumber/core.rb +0 -5
  241. data/lib/aruba/cucumber/rvm.rb +0 -3
  242. data/lib/aruba/in_process.rb +0 -14
  243. data/lib/aruba/jruby.rb +0 -4
  244. data/lib/aruba/matchers/deprecated/file.rb +0 -17
  245. data/lib/aruba/matchers/deprecated.rb +0 -1
  246. data/lib/aruba/matchers/path/match_path_pattern.rb +0 -41
  247. data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +0 -25
  248. data/lib/aruba/platforms/disk_usage_calculator.rb +0 -20
  249. data/lib/aruba/reporting.rb +0 -126
  250. data/lib/aruba/spawn_process.rb +0 -11
  251. data/script/bootstrap +0 -28
  252. data/script/console +0 -16
  253. data/script/test +0 -3
  254. data/spec/aruba/api/bundler_spec.rb +0 -15
  255. data/spec/aruba/api/deprecated_spec.rb +0 -308
  256. data/spec/aruba/api/environment/restore_env_spec.rb +0 -86
  257. data/spec/aruba/api/environment/set_env_spec.rb +0 -46
  258. data/spec/aruba/api/filesystem/file_size_spec.rb +0 -28
  259. data/spec/aruba/api/runtime_spec.rb +0 -28
  260. data/spec/aruba/api_spec.rb +0 -981
  261. data/spec/aruba/aruba_path_spec.rb +0 -103
  262. data/spec/aruba/basic_configuration_spec.rb +0 -5
  263. data/spec/aruba/configuration_spec.rb +0 -5
  264. data/spec/aruba/hooks_spec.rb +0 -17
  265. data/spec/aruba/in_config_wrapper_spec.rb +0 -25
  266. data/spec/aruba/jruby_spec.rb +0 -55
  267. data/spec/aruba/matchers/command/have_output_size_spec.rb +0 -25
  268. data/spec/aruba/matchers/command_spec.rb +0 -174
  269. data/spec/aruba/matchers/deprecated_spec.rb +0 -120
  270. data/spec/aruba/matchers/directory_spec.rb +0 -57
  271. data/spec/aruba/matchers/file_spec.rb +0 -208
  272. data/spec/aruba/matchers/path_spec.rb +0 -58
  273. data/spec/aruba/platform/simple_table_spec.rb +0 -23
  274. data/spec/aruba/platform/windows_environment_variables_spec.rb +0 -500
  275. data/spec/aruba/platforms/unix_command_string_spec.rb +0 -17
  276. data/spec/aruba/platforms/windows_command_string_spec.rb +0 -22
  277. data/spec/aruba/rspec_spec.rb +0 -15
  278. data/spec/aruba/runtime_spec.rb +0 -29
  279. data/spec/aruba/spawn_process_spec.rb +0 -96
  280. data/spec/event_bus/name_resolver_spec.rb +0 -68
  281. data/spec/event_bus_spec.rb +0 -158
  282. data/spec/spec_helper.rb +0 -20
  283. data/spec/support/configs/.keep +0 -0
  284. data/spec/support/configs/aruba.rb +0 -5
  285. data/spec/support/configs/pry.rb +0 -3
  286. data/spec/support/configs/rspec.rb +0 -15
  287. data/spec/support/helpers/.keep +0 -0
  288. data/spec/support/helpers/reporting.rb +0 -44
  289. data/spec/support/matchers/.keep +0 -0
  290. data/spec/support/matchers/option.rb +0 -35
  291. data/spec/support/shared_contexts/.keep +0 -0
  292. data/spec/support/shared_contexts/aruba.rb +0 -49
  293. data/spec/support/shared_examples/.keep +0 -0
  294. data/spec/support/shared_examples/configuration.rb +0 -116
  295. data/spec/support/shared_examples/directory.rb +0 -7
  296. data/spec/support/shared_examples/file.rb +0 -7
  297. data/templates/css/console.css +0 -24
  298. data/templates/css/filesystem.css +0 -42
  299. data/templates/css/pygments-autumn.css +0 -59
  300. data/templates/files.erb +0 -14
  301. data/templates/images/LICENSE +0 -22
  302. data/templates/images/folder.png +0 -0
  303. data/templates/images/page_white.png +0 -0
  304. data/templates/images/page_white_gherkin.png +0 -0
  305. data/templates/images/page_white_ruby.png +0 -0
  306. data/templates/index.erb +0 -20
  307. data/templates/js/filesystem.js +0 -5
  308. data/templates/js/jquery-1.11.3.min.js +0 -5
  309. data/templates/main.erb +0 -34
@@ -9,15 +9,7 @@ module Aruba
9
9
  attr_reader :other_env, :block
10
10
 
11
11
  def initialize(other_env, &block)
12
- @other_env = other_env
13
-
14
- @other_env = if RUBY_VERSION <= '1.9.3'
15
- # rubocop:disable Style/EachWithObject
16
- @other_env.to_hash.inject({}) { |a, (k, v)| a[k] = v.to_s; a }
17
- # rubocop:enable Style/EachWithObject
18
- else
19
- @other_env.to_h.each_with_object({}) { |(k, v), a| a[k] = v.to_s }
20
- end
12
+ @other_env = other_env.to_h.each_with_object({}) { |(k, v), a| a[k] = v.to_s }
21
13
 
22
14
  @block = if block_given?
23
15
  block
@@ -60,11 +52,7 @@ module Aruba
60
52
  def initialize(env = ENV)
61
53
  @actions = []
62
54
 
63
- @env = if RUBY_VERSION < '2.0'
64
- env.to_hash
65
- else
66
- env.to_h
67
- end
55
+ @env = env.to_h
68
56
  end
69
57
 
70
58
  # Update environment with other en
@@ -77,7 +65,7 @@ module Aruba
77
65
  def update(other_env)
78
66
  actions << UpdateAction.new(other_env)
79
67
 
80
- UnixEnvironmentVariables.new(to_h)
68
+ self
81
69
  end
82
70
 
83
71
  # Fetch variable from environment
@@ -137,7 +125,7 @@ module Aruba
137
125
  name = name.to_s
138
126
  value = self[name].to_s + value.to_s
139
127
 
140
- actions << UpdateAction.new(name => value )
128
+ actions << UpdateAction.new(name => value)
141
129
 
142
130
  value
143
131
  end
@@ -188,11 +176,7 @@ module Aruba
188
176
  # @return [Hash]
189
177
  # A new hash from environment
190
178
  def to_h
191
- if RUBY_VERSION < '2.0'
192
- Marshal.load(Marshal.dump(prepared_environment.to_hash))
193
- else
194
- Marshal.load(Marshal.dump(prepared_environment.to_h))
195
- end
179
+ actions.inject(hash_from_env.merge(env)) { |a, e| e.call(a) }
196
180
  end
197
181
 
198
182
  # Reset environment
@@ -204,14 +188,21 @@ module Aruba
204
188
  value
205
189
  end
206
190
 
191
+ def nest
192
+ old_actions = @actions.dup
193
+ yield(self)
194
+ ensure
195
+ @actions = old_actions
196
+ end
197
+
198
+ def self.hash_from_env
199
+ ENV.to_hash
200
+ end
201
+
207
202
  private
208
203
 
209
- def prepared_environment
210
- if RUBY_VERSION <= '1.9.3'
211
- actions.inject(ENV.to_hash.merge(env)) { |a, e| e.call(a) }
212
- else
213
- actions.each_with_object(ENV.to_hash.merge(env)) { |e, a| a = e.call(a) }
214
- end
204
+ def hash_from_env
205
+ self.class.hash_from_env
215
206
  end
216
207
  end
217
208
  end
@@ -62,8 +62,8 @@ module Aruba
62
62
  DetermineFileSize.new.call(*args)
63
63
  end
64
64
 
65
- def determine_disk_usage(*args)
66
- DetermineDiskUsage.new.call(*args)
65
+ def determine_disk_usage(paths)
66
+ DetermineDiskUsage.new.call(paths)
67
67
  end
68
68
 
69
69
  def create_file(*args)
@@ -83,7 +83,7 @@ module Aruba
83
83
  end
84
84
 
85
85
  def detect_ruby(cmd)
86
- if cmd =~ /^ruby\s/
86
+ if /^ruby\s/.match?(cmd)
87
87
  cmd.gsub(/^ruby\s/, "#{current_ruby} ")
88
88
  else
89
89
  cmd
@@ -98,20 +98,8 @@ module Aruba
98
98
  ::File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
99
99
  end
100
100
 
101
- # @deprecated
102
- # Add newline at the end
103
- def ensure_newline(str)
104
- deprecated('The use of "#ensure_newline" is deprecated. It will be removed soon')
105
-
106
- str.chomp << "\n"
107
- end
108
-
109
101
  def require_matching_files(pattern, base)
110
- if RUBY_VERSION < '1.9.3'
111
- ::Dir.glob(::File.expand_path(pattern, base)).each { |f| require File.join(File.dirname(f), File.basename(f, '.rb')) }
112
- else
113
- ::Dir.glob(::File.expand_path(pattern, base)).each { |f| require_relative f }
114
- end
102
+ ::Dir.glob(::File.expand_path(pattern, base)).each { |f| require_relative f }
115
103
  end
116
104
 
117
105
  # Create directory and subdirectories
@@ -125,7 +113,7 @@ module Aruba
125
113
  def rm(paths, options = {})
126
114
  paths = Array(paths).map { |p| ::File.expand_path(p) }
127
115
 
128
- FileUtils.rm_r(paths, options)
116
+ FileUtils.rm_r(paths, **options)
129
117
  end
130
118
 
131
119
  # Get current working directory
@@ -144,22 +132,22 @@ module Aruba
144
132
 
145
133
  # Touch file, directory
146
134
  def touch(args, options)
147
- FileUtils.touch(args, options)
135
+ FileUtils.touch(args, **options)
148
136
  end
149
137
 
150
138
  # Copy file/directory
151
- def cp(args, options)
152
- FileUtils.cp_r(args, options)
139
+ def cp(src, dest)
140
+ FileUtils.cp_r(src, dest)
153
141
  end
154
142
 
155
143
  # Move file/directory
156
- def mv(args, options)
157
- FileUtils.mv(args, options)
144
+ def mv(src, dest)
145
+ FileUtils.mv(src, dest)
158
146
  end
159
147
 
160
148
  # Change mode of file/directory
161
149
  def chmod(mode, args, options)
162
- FileUtils.chmod_R(mode, args, options)
150
+ FileUtils.chmod_R(mode, args, **options)
163
151
  end
164
152
 
165
153
  # Exists and is file
@@ -199,7 +187,7 @@ module Aruba
199
187
 
200
188
  # Check if command is relative
201
189
  #
202
- # @return [TrueClass, FalseClass]
190
+ # @return [Boolean]
203
191
  # true
204
192
  # * bin/command.sh
205
193
  #
@@ -207,13 +195,13 @@ module Aruba
207
195
  # * /bin/command.sh
208
196
  # * command.sh
209
197
  def relative_command?(path)
210
- p = ArubaPath.new(path)
211
- p.relative? && p.depth > 1
198
+ p = Pathname.new(path)
199
+ p.relative? && p.basename != p
212
200
  end
213
201
 
214
202
  # Check if command is relative
215
203
  #
216
- # @return [TrueClass, FalseClass]
204
+ # @return [Boolean]
217
205
  # true
218
206
  # * command.sh
219
207
  #
@@ -227,30 +215,7 @@ module Aruba
227
215
 
228
216
  # Write to file
229
217
  def write_file(path, content)
230
- if RUBY_VERSION < '1.9.3'
231
- File.open(path, 'wb') do |f|
232
- f.print content
233
- end
234
- else
235
- File.write(path, content)
236
- end
237
- end
238
-
239
- # Unescape string
240
- #
241
- # @param [String] string
242
- # The string which should be unescaped, e.g. the output of a command
243
- #
244
- # @return
245
- # The string stripped from escape sequences
246
- def unescape(string, keep_ansi = true)
247
- # rubocop:disable Metrics/LineLength
248
- deprecated('The use of "Aruba.platform.unescape" is deprecated. Please use "#unescape_text" and "#sanitize_text" instead. But be aware it uses a different implementation')
249
- # rubocop:enable Metrics/LineLength
250
-
251
- string = string.gsub('\n', "\n").gsub('\"', '"').gsub('\e', "\e")
252
- string = string.gsub(/\e\[\d+(?>(;\d+)*)m/, '') unless keep_ansi
253
- string
218
+ File.write(path, content)
254
219
  end
255
220
 
256
221
  # Transform hash to a string table which can be output on stderr/stdout
@@ -271,6 +236,10 @@ module Aruba
271
236
  def which(program, path = ENV['PATH'])
272
237
  UnixWhich.new.call(program, path)
273
238
  end
239
+
240
+ def builtin_shell_commands
241
+ []
242
+ end
274
243
  end
275
244
  end
276
245
  end
@@ -23,7 +23,7 @@ module Aruba
23
23
  Aruba.platform.absolute_path?(program) || Aruba.platform.relative_command?(program)
24
24
  end
25
25
 
26
- def call(program, path)
26
+ def call(program, _path)
27
27
  return File.expand_path(program) if Aruba.platform.executable?(program)
28
28
 
29
29
  nil
@@ -72,6 +72,7 @@ module Aruba
72
72
  # ENV['PATH']
73
73
  def call(program, path = ENV['PATH'])
74
74
  raise ArgumentError, "ENV['PATH'] cannot be empty" if path.nil? || path.empty?
75
+
75
76
  program = program.to_s
76
77
 
77
78
  whiches.find { |w| w.match? program }.new.call(program, path)
@@ -1,5 +1,3 @@
1
- require 'delegate'
2
-
3
1
  # Aruba
4
2
  module Aruba
5
3
  # Platforms
@@ -9,20 +7,27 @@ module Aruba
9
7
  # This adds `cmd.exec` in front of commmand
10
8
  #
11
9
  # @private
12
- class WindowsCommandString < SimpleDelegator
10
+ class WindowsCommandString
11
+ def initialize(command, *arguments)
12
+ @command = command
13
+ @arguments = arguments
14
+ end
15
+
13
16
  # Convert to array
14
17
  def to_a
15
- [cmd_path, '/c', __getobj__]
18
+ [cmd_path, '/c', [escaped_command, *escaped_arguments].join(' ')]
16
19
  end
17
20
 
18
- if RUBY_VERSION < '1.9'
19
- def to_s
20
- __getobj__.to_s
21
- end
22
- alias inspect to_s
21
+ private
22
+
23
+ def escaped_arguments
24
+ @arguments.map { |arg| arg.gsub(/"/, '"""') }
25
+ .map { |arg| / /.match?(arg) ? "\"#{arg}\"" : arg }
23
26
  end
24
27
 
25
- private
28
+ def escaped_command
29
+ @command.gsub(/ /, '""" """')
30
+ end
26
31
 
27
32
  def cmd_path
28
33
  Aruba.platform.which('cmd.exe')
@@ -5,56 +5,41 @@ 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
- # C:>set Path
11
- # C:>Path=.;.\bin;c:\rubys\ruby-2.1.6-p336\bin;
12
- # C:>set PATH
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
- # If you access environment variables through ENV, you can access values no
16
- # matter the case of the key:
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
- # irb: > ENV["Path"]
19
- # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
20
- # irb: > ENV["Path"]
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
- # irb: > env_copy = ENV.to_hash
26
- # => {"ALLUSERSPROFILE"=>"C:\\ProgramData", "ANSICON"=>"119x1000 (119x58)", "ANSICON_DEF"=>"7", APPDATA"=>"C:\\Users\\blorf\\AppData\\Roaming", ....}
27
- # irb: > env["Path"]
28
- # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
29
- # irb: > env["PATH"]
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
+ # # => {
26
+ # "ALLUSERSPROFILE"=>
27
+ # "C:\\ProgramData",
28
+ # "ANSICON"=>"119x1000 (119x58)",
29
+ # "ANSICON_DEF"=>"7",
30
+ # APPDATA" => "C:\\Users\\blorf\\AppData\\Roaming", ....
31
+ # }
32
+ # env["Path"]
33
+ # # => ".;.\bin;c:\rubys\ruby-2.1.6-p336\bin;"
34
+ # env["PATH"]
35
+ # # => nil
35
36
  class WindowsEnvironmentVariables < UnixEnvironmentVariables
36
- def initialize(env = ENV.to_hash)
37
- @actions = []
38
-
39
- @env = if RUBY_VERSION <= '1.9.3'
40
- # rubocop:disable Style/EachWithObject
41
- env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
42
- # rubocop:enable Style/EachWithObject
43
- else
44
- env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
45
- end
37
+ def initialize(env = ENV)
38
+ super(upcase_env env)
46
39
  end
47
40
 
48
41
  def update(other_env, &block)
49
- other_env = if RUBY_VERSION <= '1.9.3'
50
- # rubocop:disable Style/EachWithObject
51
- other_env.inject({}) { |a, (k,v)| a[k.to_s.upcase] = v; a }
52
- # rubocop:enable Style/EachWithObject
53
- else
54
- other_env.each_with_object({}) { |(k,v), a| a[k.to_s.upcase] = v }
55
- end
56
-
57
- super(other_env, &block)
42
+ super(upcase_env(other_env), &block)
58
43
  end
59
44
 
60
45
  def fetch(name, default = UnixEnvironmentVariables::UNDEFINED)
@@ -81,8 +66,22 @@ module Aruba
81
66
  super(name.upcase, value)
82
67
  end
83
68
 
84
- def delete(name, value)
85
- super(name.upcase, value)
69
+ def delete(name)
70
+ super(name.upcase)
71
+ end
72
+
73
+ def self.hash_from_env
74
+ upcase_env(ENV)
75
+ end
76
+
77
+ def self.upcase_env(env)
78
+ env.each_with_object({}) { |(k, v), a| a[k.to_s.upcase] = v }
79
+ end
80
+
81
+ private
82
+
83
+ def upcase_env(env)
84
+ self.class.upcase_env(env)
86
85
  end
87
86
  end
88
87
  end
@@ -37,6 +37,10 @@ module Aruba
37
37
  def which(program, path = ENV['PATH'])
38
38
  WindowsWhich.new.call(program, path)
39
39
  end
40
+
41
+ def builtin_shell_commands
42
+ %w(cd dir echo exit set type)
43
+ end
40
44
  end
41
45
  end
42
46
  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, path)
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, :io_wait_timeout, :exit_timeout, :startup_wait_time
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, environment = ENV.to_hash.dup, main_class = nil, stop_signal = nil, startup_wait_time = 0)
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
@@ -36,7 +39,7 @@ module Aruba
36
39
 
37
40
  # Output pid of process
38
41
  def pid
39
- 'No implemented'
42
+ raise NotImplementedError
40
43
  end
41
44
 
42
45
  # Output stderr and stdout
@@ -45,39 +48,39 @@ module Aruba
45
48
  end
46
49
 
47
50
  def write(*)
48
- NotImplementedError
51
+ raise NotImplementedError
49
52
  end
50
53
 
51
54
  def stdin(*)
52
- NotImplementedError
55
+ raise NotImplementedError
53
56
  end
54
57
 
55
58
  def stdout(*)
56
- NotImplementedError
59
+ raise NotImplementedError
57
60
  end
58
61
 
59
62
  def stderr(*)
60
- NotImplementedError
63
+ raise NotImplementedError
61
64
  end
62
65
 
63
66
  def close_io(*)
64
- NotImplementedError
67
+ raise NotImplementedError
65
68
  end
66
69
 
67
70
  def send_signal(*)
68
- NotImplementedError
71
+ raise NotImplementedError
69
72
  end
70
73
 
71
74
  def filesystem_status
72
- NotImplementedError
75
+ raise NotImplementedError
73
76
  end
74
77
 
75
78
  def content
76
- NotImplementedError
79
+ raise NotImplementedError
77
80
  end
78
81
 
79
82
  def wait
80
- NotImplementedError
83
+ raise NotImplementedError
81
84
  end
82
85
 
83
86
  # Restart a command
@@ -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
 
@@ -116,19 +111,14 @@ module Aruba
116
111
  def after_run; end
117
112
 
118
113
  def inspect
119
- out = stdout(:wait_for_io => 0) + stderr(:wait_for_io => 0)
114
+ out = truncate(stdout(wait_for_io: 0).inspect, 35)
115
+ err = truncate(stderr(wait_for_io: 0).inspect, 35)
120
116
 
121
- out = if out.length > 76
122
- out[0, 75] + ' ...'
123
- else
124
- out
125
- end
126
-
127
- format '#<%s:%s commandline="%s": output="%s">', self.class, self.object_id, commandline, out
117
+ fmt = '#<%s:%s commandline="%s": stdout=%s stderr=%s>'
118
+ format fmt, self.class, object_id, commandline, out, err
128
119
  end
129
- alias to_s inspect
130
120
 
131
- private
121
+ alias to_s inspect
132
122
 
133
123
  def command
134
124
  Shellwords.split(commandline).first
@@ -139,6 +129,14 @@ module Aruba
139
129
 
140
130
  []
141
131
  end
132
+
133
+ private
134
+
135
+ def truncate(string, max_length)
136
+ return string if string.length <= max_length
137
+
138
+ string[0, max_length - 1] + ' ...'
139
+ end
142
140
  end
143
141
  end
144
142
  end
@@ -4,10 +4,14 @@ require 'aruba/processes/spawn_process'
4
4
  module Aruba
5
5
  # Processes
6
6
  module Processes
7
- # Run your command in `systemd()` to make debugging it easier
7
+ # Run your command in `system()` to make debugging it easier. This will
8
+ # make the process use the default input and output streams so the
9
+ # developer can interact with it directly. This means that part of Aruba's
10
+ # functionality is disabled. I.e., checks for output, and passing input
11
+ # programmatically will not work.
8
12
  #
9
- # `DebugProcess` is not meant for direct use - `InProcess.new` - by
10
- # users. Only it's public methods are part of the public API of aruba, e.g.
13
+ # `DebugProcess` is not meant for direct use - `DebugProcess.new` - by
14
+ # users. Only its public methods are part of the public API of aruba, e.g.
11
15
  # `#stdin`, `#stdout`.
12
16
  #
13
17
  # @private
@@ -18,6 +22,7 @@ module Aruba
18
22
  end
19
23
 
20
24
  def start
25
+ @started = true
21
26
  Dir.chdir @working_directory do
22
27
  Aruba.platform.with_environment(environment) do
23
28
  @exit_status = system(command, *arguments) ? 0 : 1
@@ -64,6 +69,10 @@ module Aruba
64
69
  def terminate(*)
65
70
  stop
66
71
  end
72
+
73
+ def interactive?
74
+ true
75
+ end
67
76
  end
68
77
  end
69
78
  end
@@ -33,19 +33,22 @@ module Aruba
33
33
  end
34
34
 
35
35
  def exit(exitstatus)
36
- @exitstatus = 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, environment = ENV.to_hash.dup, main_class = nil, stop_signal = nil, startup_wait_time = 0)
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 "You need to call aruba.config.main_class = YourMainClass" unless main_class
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