aruba-win-fix 0.14.2

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 (324) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +37 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +188 -0
  6. data/.simplecov +34 -0
  7. data/.travis.yml +47 -0
  8. data/.yardopts +8 -0
  9. data/CONTRIBUTING.md +71 -0
  10. data/Gemfile +83 -0
  11. data/History.md +579 -0
  12. data/LICENSE +20 -0
  13. data/README.md +226 -0
  14. data/Rakefile +49 -0
  15. data/TODO.md +13 -0
  16. data/appveyor.yml +32 -0
  17. data/aruba.gemspec +48 -0
  18. data/bin/aruba +7 -0
  19. data/config/.gitignore +1 -0
  20. data/cucumber.yml +26 -0
  21. data/features/.nav +72 -0
  22. data/features/api/command/find_command.feature +83 -0
  23. data/features/api/command/last_command_started.feature +50 -0
  24. data/features/api/command/last_command_stopped.feature +89 -0
  25. data/features/api/command/run.feature +414 -0
  26. data/features/api/command/run_simple.feature +242 -0
  27. data/features/api/command/send_signal.feature +53 -0
  28. data/features/api/command/stderr.feature +46 -0
  29. data/features/api/command/stdout.feature +46 -0
  30. data/features/api/command/stop.feature +131 -0
  31. data/features/api/command/stop_all_commands.feature +53 -0
  32. data/features/api/command/terminate_all_commands.feature +53 -0
  33. data/features/api/command/which.feature +37 -0
  34. data/features/api/core/expand_path.feature +88 -0
  35. data/features/api/environment/append_environment_variable.feature +128 -0
  36. data/features/api/environment/delete_environment_variable.feature +63 -0
  37. data/features/api/environment/prepend_environment_variable.feature +128 -0
  38. data/features/api/environment/set_environment_variable.feature +376 -0
  39. data/features/api/filesystem/cd.feature +184 -0
  40. data/features/api/filesystem/create_directory.feature +57 -0
  41. data/features/api/filesystem/disk_usage.feature +152 -0
  42. data/features/api/filesystem/does_exist.feature +62 -0
  43. data/features/api/filesystem/fixtures.feature +104 -0
  44. data/features/api/filesystem/is_absolute.feature +48 -0
  45. data/features/api/filesystem/is_directory.feature +53 -0
  46. data/features/api/filesystem/is_file.feature +54 -0
  47. data/features/api/filesystem/is_relative.feature +48 -0
  48. data/features/api/filesystem/move.feature +119 -0
  49. data/features/api/text/extract_text.feature +87 -0
  50. data/features/api/text/replace_variables.feature +45 -0
  51. data/features/api/text/sanitize_text.feature +228 -0
  52. data/features/api/text/unescape_text.feature +127 -0
  53. data/features/cli/console.feature +52 -0
  54. data/features/cli/init.feature +79 -0
  55. data/features/configuration/activate_announcer_on_command_failure.feature +38 -0
  56. data/features/configuration/command_runtime_environment.feature +129 -0
  57. data/features/configuration/console_history_file.feature +38 -0
  58. data/features/configuration/exit_timeout.feature +52 -0
  59. data/features/configuration/fixtures_directories.feature +38 -0
  60. data/features/configuration/fixtures_path_prefix.feature +23 -0
  61. data/features/configuration/home_directory.feature +80 -0
  62. data/features/configuration/io_timeout.feature +30 -0
  63. data/features/configuration/keep_ansi.feature +30 -0
  64. data/features/configuration/log_level.feature +38 -0
  65. data/features/configuration/physical_block_size.feature +53 -0
  66. data/features/configuration/remove_ansi_escape_sequences.feature +38 -0
  67. data/features/configuration/root_directory.feature +30 -0
  68. data/features/configuration/startup_wait_time.feature +48 -0
  69. data/features/configuration/usage.feature +159 -0
  70. data/features/configuration/working_directory.feature +33 -0
  71. data/features/development/build.feature +15 -0
  72. data/features/development/test.feature +24 -0
  73. data/features/getting_started/cleanup.feature +67 -0
  74. data/features/getting_started/install.feature +8 -0
  75. data/features/getting_started/run_commands.feature +177 -0
  76. data/features/getting_started/supported_testing_frameworks.feature +104 -0
  77. data/features/getting_started/writing_good_feature_tests.feature +38 -0
  78. data/features/hooks/after/command.feature +44 -0
  79. data/features/hooks/before/command.feature +71 -0
  80. data/features/matchers/collection/include_an_object.feature +72 -0
  81. data/features/matchers/directory/have_sub_directory.feature +110 -0
  82. data/features/matchers/file/be_a_command_found_in_path.feature +115 -0
  83. data/features/matchers/file/be_existing_executable.feature +88 -0
  84. data/features/matchers/file/be_existing_file.feature +82 -0
  85. data/features/matchers/file/have_file_content.feature +123 -0
  86. data/features/matchers/file/have_file_size.feature +107 -0
  87. data/features/matchers/path/be_an_absolute_path.feature +74 -0
  88. data/features/matchers/path/be_an_existing_path.feature +97 -0
  89. data/features/matchers/path/have_permissions.feature +118 -0
  90. data/features/matchers/timeouts.feature +48 -0
  91. data/features/platforms/jruby.feature +14 -0
  92. data/features/rspec/integration.feature +179 -0
  93. data/features/step_definitions/aruba_dev_steps.rb +56 -0
  94. data/features/step_definitions/hooks.rb +96 -0
  95. data/features/steps/command/debug.feature +92 -0
  96. data/features/steps/command/exit_statuses.feature +136 -0
  97. data/features/steps/command/in_process.feature +485 -0
  98. data/features/steps/command/interactive.feature +90 -0
  99. data/features/steps/command/output.feature +588 -0
  100. data/features/steps/command/run.feature +66 -0
  101. data/features/steps/command/send_signal.feature +104 -0
  102. data/features/steps/command/shell.feature +155 -0
  103. data/features/steps/command/stderr.feature +68 -0
  104. data/features/steps/command/stdout.feature +109 -0
  105. data/features/steps/command/stop.feature +313 -0
  106. data/features/steps/core/announce.feature +283 -0
  107. data/features/steps/environment/append_environment_variable.feature +52 -0
  108. data/features/steps/environment/home_variable.feature +62 -0
  109. data/features/steps/environment/prepend_environment_variable.feature +52 -0
  110. data/features/steps/environment/set_environment_variable.feature +49 -0
  111. data/features/steps/filesystem/append_to_file.feature +45 -0
  112. data/features/steps/filesystem/cd_to_directory.feature +33 -0
  113. data/features/steps/filesystem/check_file_content.feature +61 -0
  114. data/features/steps/filesystem/check_permissions_of_file.feature +39 -0
  115. data/features/steps/filesystem/compare_files.feature +42 -0
  116. data/features/steps/filesystem/copy.feature +45 -0
  117. data/features/steps/filesystem/create_directory.feature +57 -0
  118. data/features/steps/filesystem/create_file.feature +76 -0
  119. data/features/steps/filesystem/existence_of_directory.feature +57 -0
  120. data/features/steps/filesystem/existence_of_file.feature +43 -0
  121. data/features/steps/filesystem/file_content.feature +86 -0
  122. data/features/steps/filesystem/fixtures.feature +64 -0
  123. data/features/steps/filesystem/move.feature +45 -0
  124. data/features/steps/filesystem/non_existence_of_directory.feature +69 -0
  125. data/features/steps/filesystem/non_existence_of_file.feature +80 -0
  126. data/features/steps/filesystem/overwrite_file.feature +72 -0
  127. data/features/steps/filesystem/remove_directory.feature +38 -0
  128. data/features/steps/filesystem/remove_file.feature +38 -0
  129. data/features/steps/filesystem/use_fixture.feature +77 -0
  130. data/features/steps/overview.feature +60 -0
  131. data/features/support/aruba.rb +7 -0
  132. data/features/support/env.rb +33 -0
  133. data/features/support/jruby.rb +5 -0
  134. data/features/support/simplecov_setup.rb +8 -0
  135. data/fixtures/cli-app/.gitignore +9 -0
  136. data/fixtures/cli-app/.rspec +2 -0
  137. data/fixtures/cli-app/README.md +39 -0
  138. data/fixtures/cli-app/Rakefile +1 -0
  139. data/fixtures/cli-app/bin/cli +6 -0
  140. data/fixtures/cli-app/cli-app.gemspec +26 -0
  141. data/fixtures/cli-app/features/support/env.rb +1 -0
  142. data/fixtures/cli-app/lib/cli/app.rb +13 -0
  143. data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +15 -0
  144. data/fixtures/cli-app/lib/cli/app/version.rb +5 -0
  145. data/fixtures/cli-app/script/console +14 -0
  146. data/fixtures/cli-app/spec/spec_helper.rb +9 -0
  147. data/fixtures/cli-app/spec/support/aruba.rb +1 -0
  148. data/fixtures/copy/file.txt +1 -0
  149. data/fixtures/empty-app/.gitignore +9 -0
  150. data/fixtures/empty-app/.rspec +2 -0
  151. data/fixtures/empty-app/README.md +24 -0
  152. data/fixtures/empty-app/Rakefile +1 -0
  153. data/fixtures/empty-app/cli-app.gemspec +26 -0
  154. data/fixtures/empty-app/lib/cli/app.rb +13 -0
  155. data/fixtures/empty-app/lib/cli/app/version.rb +5 -0
  156. data/fixtures/getting-started-app/.gitignore +4 -0
  157. data/fixtures/getting-started-app/Gemfile +4 -0
  158. data/fixtures/getting-started-app/README.md +3 -0
  159. data/fixtures/getting-started-app/features/support/env.rb +1 -0
  160. data/fixtures/spawn_process/stderr.sh +3 -0
  161. data/lib/aruba.rb +1 -0
  162. data/lib/aruba/api.rb +34 -0
  163. data/lib/aruba/api/command.rb +307 -0
  164. data/lib/aruba/api/core.rb +191 -0
  165. data/lib/aruba/api/deprecated.rb +897 -0
  166. data/lib/aruba/api/environment.rb +89 -0
  167. data/lib/aruba/api/filesystem.rb +392 -0
  168. data/lib/aruba/api/rvm.rb +44 -0
  169. data/lib/aruba/api/text.rb +56 -0
  170. data/lib/aruba/aruba_path.rb +133 -0
  171. data/lib/aruba/basic_configuration.rb +240 -0
  172. data/lib/aruba/basic_configuration/option.rb +32 -0
  173. data/lib/aruba/cli.rb +26 -0
  174. data/lib/aruba/colorizer.rb +108 -0
  175. data/lib/aruba/command.rb +74 -0
  176. data/lib/aruba/config.rb +108 -0
  177. data/lib/aruba/config/jruby.rb +17 -0
  178. data/lib/aruba/config_wrapper.rb +58 -0
  179. data/lib/aruba/console.rb +70 -0
  180. data/lib/aruba/console/help.rb +35 -0
  181. data/lib/aruba/contracts/absolute_path.rb +20 -0
  182. data/lib/aruba/contracts/enum.rb +26 -0
  183. data/lib/aruba/contracts/is_power_of_two.rb +22 -0
  184. data/lib/aruba/contracts/relative_path.rb +20 -0
  185. data/lib/aruba/cucumber.rb +13 -0
  186. data/lib/aruba/cucumber/command.rb +422 -0
  187. data/lib/aruba/cucumber/core.rb +5 -0
  188. data/lib/aruba/cucumber/environment.rb +42 -0
  189. data/lib/aruba/cucumber/file.rb +201 -0
  190. data/lib/aruba/cucumber/hooks.rb +160 -0
  191. data/lib/aruba/cucumber/rvm.rb +3 -0
  192. data/lib/aruba/cucumber/testing_frameworks.rb +95 -0
  193. data/lib/aruba/errors.rb +37 -0
  194. data/lib/aruba/event_bus.rb +59 -0
  195. data/lib/aruba/event_bus/name_resolver.rb +168 -0
  196. data/lib/aruba/events.rb +39 -0
  197. data/lib/aruba/extensions/string/strip.rb +25 -0
  198. data/lib/aruba/file_size.rb +63 -0
  199. data/lib/aruba/generators/script_file.rb +46 -0
  200. data/lib/aruba/hooks.rb +56 -0
  201. data/lib/aruba/in_config_wrapper.rb +24 -0
  202. data/lib/aruba/in_process.rb +14 -0
  203. data/lib/aruba/initializer.rb +222 -0
  204. data/lib/aruba/jruby.rb +4 -0
  205. data/lib/aruba/matchers/base/base_matcher.rb +96 -0
  206. data/lib/aruba/matchers/base/object_formatter.rb +114 -0
  207. data/lib/aruba/matchers/collection.rb +1 -0
  208. data/lib/aruba/matchers/collection/all.rb +11 -0
  209. data/lib/aruba/matchers/collection/include_an_object.rb +122 -0
  210. data/lib/aruba/matchers/command.rb +1 -0
  211. data/lib/aruba/matchers/command/be_successfully_executed.rb +34 -0
  212. data/lib/aruba/matchers/command/have_exit_status.rb +38 -0
  213. data/lib/aruba/matchers/command/have_finished_in_time.rb +37 -0
  214. data/lib/aruba/matchers/command/have_output.rb +36 -0
  215. data/lib/aruba/matchers/command/have_output_on_stderr.rb +32 -0
  216. data/lib/aruba/matchers/command/have_output_on_stdout.rb +32 -0
  217. data/lib/aruba/matchers/command/have_output_size.rb +28 -0
  218. data/lib/aruba/matchers/directory.rb +1 -0
  219. data/lib/aruba/matchers/directory/be_an_existing_directory.rb +38 -0
  220. data/lib/aruba/matchers/directory/have_sub_directory.rb +53 -0
  221. data/lib/aruba/matchers/environment.rb +1 -0
  222. data/lib/aruba/matchers/file.rb +1 -0
  223. data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +36 -0
  224. data/lib/aruba/matchers/file/be_an_existing_executable.rb +37 -0
  225. data/lib/aruba/matchers/file/be_an_existing_file.rb +38 -0
  226. data/lib/aruba/matchers/file/have_file_content.rb +62 -0
  227. data/lib/aruba/matchers/file/have_file_size.rb +47 -0
  228. data/lib/aruba/matchers/file/have_same_file_content.rb +48 -0
  229. data/lib/aruba/matchers/path.rb +1 -0
  230. data/lib/aruba/matchers/path/a_path_matching_pattern.rb +25 -0
  231. data/lib/aruba/matchers/path/be_an_absolute_path.rb +36 -0
  232. data/lib/aruba/matchers/path/be_an_existing_path.rb +37 -0
  233. data/lib/aruba/matchers/path/have_permissions.rb +64 -0
  234. data/lib/aruba/matchers/path/match_path_pattern.rb +41 -0
  235. data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +25 -0
  236. data/lib/aruba/matchers/string.rb +1 -0
  237. data/lib/aruba/matchers/string/include_output_string.rb +36 -0
  238. data/lib/aruba/matchers/string/match_output_string.rb +37 -0
  239. data/lib/aruba/matchers/string/output_string_eq.rb +35 -0
  240. data/lib/aruba/platform.rb +25 -0
  241. data/lib/aruba/platforms/announcer.rb +232 -0
  242. data/lib/aruba/platforms/aruba_file_creator.rb +35 -0
  243. data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +35 -0
  244. data/lib/aruba/platforms/aruba_logger.rb +81 -0
  245. data/lib/aruba/platforms/command_monitor.rb +229 -0
  246. data/lib/aruba/platforms/determine_disk_usage.rb +28 -0
  247. data/lib/aruba/platforms/determine_file_size.rb +22 -0
  248. data/lib/aruba/platforms/disk_usage_calculator.rb +20 -0
  249. data/lib/aruba/platforms/filesystem_status.rb +68 -0
  250. data/lib/aruba/platforms/local_environment.rb +29 -0
  251. data/lib/aruba/platforms/simple_table.rb +54 -0
  252. data/lib/aruba/platforms/unix_command_string.rb +27 -0
  253. data/lib/aruba/platforms/unix_environment_variables.rb +220 -0
  254. data/lib/aruba/platforms/unix_platform.rb +276 -0
  255. data/lib/aruba/platforms/unix_which.rb +85 -0
  256. data/lib/aruba/platforms/windows_command_string.rb +31 -0
  257. data/lib/aruba/platforms/windows_environment_variables.rb +89 -0
  258. data/lib/aruba/platforms/windows_platform.rb +42 -0
  259. data/lib/aruba/platforms/windows_which.rb +106 -0
  260. data/lib/aruba/processes/basic_process.rb +143 -0
  261. data/lib/aruba/processes/debug_process.rb +69 -0
  262. data/lib/aruba/processes/in_process.rb +125 -0
  263. data/lib/aruba/processes/spawn_process.rb +278 -0
  264. data/lib/aruba/reporting.rb +126 -0
  265. data/lib/aruba/rspec.rb +107 -0
  266. data/lib/aruba/runtime.rb +96 -0
  267. data/lib/aruba/setup.rb +90 -0
  268. data/lib/aruba/spawn_process.rb +11 -0
  269. data/lib/aruba/version.rb +3 -0
  270. data/script/bootstrap +28 -0
  271. data/script/console +16 -0
  272. data/script/test +3 -0
  273. data/spec/aruba/api/environment/restore_env_spec.rb +65 -0
  274. data/spec/aruba/api/environment/set_env_spec.rb +42 -0
  275. data/spec/aruba/api/filesystem/file_size_spec.rb +28 -0
  276. data/spec/aruba/api/runtime_spec.rb +28 -0
  277. data/spec/aruba/api_spec.rb +1209 -0
  278. data/spec/aruba/aruba_path_spec.rb +103 -0
  279. data/spec/aruba/basic_configuration_spec.rb +5 -0
  280. data/spec/aruba/configuration_spec.rb +5 -0
  281. data/spec/aruba/hooks_spec.rb +17 -0
  282. data/spec/aruba/in_config_wrapper_spec.rb +25 -0
  283. data/spec/aruba/jruby_spec.rb +55 -0
  284. data/spec/aruba/matchers/command/have_output_size_spec.rb +25 -0
  285. data/spec/aruba/matchers/command_spec.rb +174 -0
  286. data/spec/aruba/matchers/directory_spec.rb +57 -0
  287. data/spec/aruba/matchers/file_spec.rb +127 -0
  288. data/spec/aruba/matchers/path_spec.rb +88 -0
  289. data/spec/aruba/platform/simple_table_spec.rb +23 -0
  290. data/spec/aruba/platform/windows_environment_variables_spec.rb +500 -0
  291. data/spec/aruba/rspec_spec.rb +15 -0
  292. data/spec/aruba/runtime_spec.rb +29 -0
  293. data/spec/aruba/spawn_process_spec.rb +60 -0
  294. data/spec/event_bus/name_resolver_spec.rb +68 -0
  295. data/spec/event_bus_spec.rb +160 -0
  296. data/spec/spec_helper.rb +23 -0
  297. data/spec/support/configs/.keep +0 -0
  298. data/spec/support/configs/aruba.rb +5 -0
  299. data/spec/support/configs/pry.rb +3 -0
  300. data/spec/support/configs/rspec.rb +15 -0
  301. data/spec/support/helpers/.keep +0 -0
  302. data/spec/support/helpers/reporting.rb +44 -0
  303. data/spec/support/matchers/.keep +0 -0
  304. data/spec/support/matchers/option.rb +35 -0
  305. data/spec/support/shared_contexts/.keep +0 -0
  306. data/spec/support/shared_contexts/aruba.rb +48 -0
  307. data/spec/support/shared_examples/.keep +0 -0
  308. data/spec/support/shared_examples/configuration.rb +116 -0
  309. data/spec/support/shared_examples/directory.rb +7 -0
  310. data/spec/support/shared_examples/file.rb +7 -0
  311. data/templates/css/console.css +24 -0
  312. data/templates/css/filesystem.css +42 -0
  313. data/templates/css/pygments-autumn.css +59 -0
  314. data/templates/files.erb +14 -0
  315. data/templates/images/LICENSE +22 -0
  316. data/templates/images/folder.png +0 -0
  317. data/templates/images/page_white.png +0 -0
  318. data/templates/images/page_white_gherkin.png +0 -0
  319. data/templates/images/page_white_ruby.png +0 -0
  320. data/templates/index.erb +20 -0
  321. data/templates/js/filesystem.js +5 -0
  322. data/templates/js/jquery-1.11.3.min.js +5 -0
  323. data/templates/main.erb +34 -0
  324. metadata +629 -0
@@ -0,0 +1,29 @@
1
+ # Aruba
2
+ module Aruba
3
+ # Platforms
4
+ module Platforms
5
+ # Local environemnt
6
+ #
7
+ # Wraps logic to make enviroment local and restorable
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
16
+ def call(env, &block)
17
+ old_env = ENV.to_hash.dup
18
+
19
+ ENV.clear
20
+ ENV.update env
21
+
22
+ yield if block_given?
23
+ ensure
24
+ ENV.clear
25
+ ENV.update old_env
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,54 @@
1
+ # Aruba
2
+ module Aruba
3
+ # Platforms
4
+ module Platforms
5
+ # Generate simple table
6
+ class SimpleTable
7
+ private
8
+
9
+ attr_reader :hash, :opts
10
+
11
+ public
12
+
13
+ # Create
14
+ #
15
+ # @param [Hash] hash
16
+ # Input
17
+ def initialize(hash, opts)
18
+ @hash = hash
19
+ @opts = {
20
+ :sort => true
21
+ }.merge opts
22
+ end
23
+
24
+ # Generate table
25
+ #
26
+ # @return [String]
27
+ # The table
28
+ def to_s
29
+ longest_key = hash.keys.map(&:to_s).max_by(&:length)
30
+ return '' if longest_key.nil?
31
+
32
+ name_size = longest_key.length
33
+
34
+ if RUBY_VERSION < '2'
35
+ rows = []
36
+
37
+ hash.each do |k,v|
38
+ rows << format("# %-#{name_size}s => %s", k, v)
39
+ end
40
+ else
41
+ rows = hash.each_with_object([]) do |(k,v), a|
42
+ a << format("# %-#{name_size}s => %s", k, v)
43
+ end
44
+ end
45
+
46
+ if opts[:sort] == true
47
+ rows.sort.join("\n")
48
+ else
49
+ rows.join("\n")
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,27 @@
1
+ require 'delegate'
2
+ require 'shellwords'
3
+
4
+ # Aruba
5
+ module Aruba
6
+ # Platforms
7
+ module Platforms
8
+ # This is a command which should be run
9
+ class UnixCommandString < SimpleDelegator
10
+ def initialize(cmd)
11
+ __setobj__ cmd
12
+ end
13
+
14
+ # Convert to array
15
+ def to_a
16
+ Shellwords.split __getobj__
17
+ end
18
+
19
+ if RUBY_VERSION < '1.9'
20
+ def to_s
21
+ __getobj__.to_s
22
+ end
23
+ alias inspect to_s
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,220 @@
1
+ # Aruba
2
+ module Aruba
3
+ # Platforms
4
+ module Platforms
5
+ # Abstract environment variables
6
+ class UnixEnvironmentVariables
7
+ # Update environment
8
+ class UpdateAction
9
+ attr_reader :other_env, :block
10
+
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
21
+
22
+ @block = if block_given?
23
+ block
24
+ end
25
+ end
26
+
27
+ def call(env)
28
+ if block
29
+ env.update(other_env, &block)
30
+ else
31
+ env.update(other_env)
32
+ end
33
+ end
34
+ end
35
+
36
+ # Remove variables from environment
37
+ class RemoveAction
38
+ attr_reader :variables
39
+
40
+ def initialize(variables)
41
+ @variables = Array(variables)
42
+ end
43
+
44
+ def call(env)
45
+ variables.each { |v| env.delete v }
46
+
47
+ env
48
+ end
49
+ end
50
+
51
+ # We need to use this, because `nil` is a valid value as default
52
+ UNDEFINED = Object.new.freeze
53
+
54
+ private
55
+
56
+ attr_reader :actions, :env
57
+
58
+ public
59
+
60
+ def initialize(env = ENV)
61
+ @actions = []
62
+
63
+ @env = if RUBY_VERSION < '2.0'
64
+ env.to_hash
65
+ else
66
+ env.to_h
67
+ end
68
+ end
69
+
70
+ # Update environment with other en
71
+ #
72
+ # @param [#to_hash, #to_h] other_env
73
+ # Another environment object or hash
74
+ #
75
+ # @yield
76
+ # Pass block to env
77
+ def update(other_env)
78
+ actions << UpdateAction.new(other_env)
79
+
80
+ UnixEnvironmentVariables.new(to_h)
81
+ end
82
+
83
+ # Fetch variable from environment
84
+ #
85
+ # @param [#to_s] name
86
+ # The name of the variable
87
+ #
88
+ # @param [Object] default
89
+ # The default value used, if the variable is not defined
90
+ def fetch(name, default = UNDEFINED)
91
+ if default == UNDEFINED
92
+ to_h.fetch name.to_s
93
+ else
94
+ to_h.fetch name.to_s, default
95
+ end
96
+ end
97
+
98
+ # Check if variable exist
99
+ #
100
+ # @param [#to_s] name
101
+ # The name of the variable
102
+ def key?(name)
103
+ to_h.key? name.to_s
104
+ end
105
+
106
+ # Get value of variable
107
+ #
108
+ # @param [#to_s] name
109
+ # The name of the variable
110
+ def [](name)
111
+ to_h[name.to_s]
112
+ end
113
+
114
+ # Set value of variable
115
+ #
116
+ # @param [#to_s] name
117
+ # The name of the variable
118
+ #
119
+ # @param [#to_s] value
120
+ # The value of the variable
121
+ def []=(name, value)
122
+ value = value.to_s
123
+
124
+ actions << UpdateAction.new(name.to_s => value)
125
+
126
+ value
127
+ end
128
+
129
+ # Append value to variable
130
+ #
131
+ # @param [#to_s] name
132
+ # The name of the variable
133
+ #
134
+ # @param [#to_s] value
135
+ # The value of the variable
136
+ def append(name, value)
137
+ name = name.to_s
138
+ value = self[name].to_s + value.to_s
139
+
140
+ actions << UpdateAction.new(name => value )
141
+
142
+ value
143
+ end
144
+
145
+ # Prepend value to variable
146
+ #
147
+ # @param [#to_s] name
148
+ # The name of the variable
149
+ #
150
+ # @param [#to_s] value
151
+ # The value of the variable
152
+ def prepend(name, value)
153
+ name = name.to_s
154
+ value = value.to_s + self[name].to_s
155
+
156
+ actions << UpdateAction.new(name => value)
157
+
158
+ value
159
+ end
160
+
161
+ # Delete variable
162
+ #
163
+ # @param [#to_s] name
164
+ # The name of the variable
165
+ def delete(name)
166
+ # Rescue value, before it is deleted
167
+ value = to_h[name.to_s]
168
+
169
+ actions << RemoveAction.new(name.to_s)
170
+
171
+ value
172
+ end
173
+
174
+ # Pass on checks
175
+ def method_missing(name, *args, &block)
176
+ super unless to_h.respond_to? name
177
+
178
+ to_h.send name, *args, &block
179
+ end
180
+
181
+ # Check for respond_to
182
+ def respond_to_missing?(name, _private)
183
+ to_h.respond_to? name
184
+ end
185
+
186
+ # Convert to hash
187
+ #
188
+ # @return [Hash]
189
+ # A new hash from environment
190
+ 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
196
+ end
197
+
198
+ # Reset environment
199
+ def clear
200
+ value = to_h
201
+
202
+ actions.clear
203
+
204
+ value
205
+ end
206
+
207
+ private
208
+
209
+ def prepared_environment
210
+ if RUBY_VERSION <= '1.9.3'
211
+ # rubocop:disable Style/EachWithObject
212
+ actions.inject(ENV.to_hash.merge(env)) { |a, e| e.call(a) }
213
+ # rubocop:enable Style/EachWithObject
214
+ else
215
+ actions.each_with_object(ENV.to_hash.merge(env)) { |e, a| a = e.call(a) }
216
+ end
217
+ end
218
+ end
219
+ end
220
+ end
@@ -0,0 +1,276 @@
1
+ require 'rbconfig'
2
+ require 'pathname'
3
+
4
+ require 'aruba/aruba_path'
5
+
6
+ require 'aruba/platforms/simple_table'
7
+ require 'aruba/platforms/unix_command_string'
8
+ require 'aruba/platforms/unix_which'
9
+ require 'aruba/platforms/determine_file_size'
10
+ require 'aruba/platforms/determine_disk_usage'
11
+ require 'aruba/platforms/aruba_file_creator'
12
+ require 'aruba/platforms/aruba_fixed_size_file_creator'
13
+ require 'aruba/platforms/local_environment'
14
+ require 'aruba/platforms/aruba_logger'
15
+ require 'aruba/platforms/announcer'
16
+ require 'aruba/platforms/command_monitor'
17
+ require 'aruba/platforms/filesystem_status'
18
+
19
+ # Aruba
20
+ module Aruba
21
+ # This abstracts OS-specific things
22
+ module Platforms
23
+ # WARNING:
24
+ # All methods found here are not considered part of the public API of aruba.
25
+ #
26
+ # Those methods can be changed at any time in the feature or removed without
27
+ # any further notice.
28
+ #
29
+ # This includes all methods for the UNIX platform
30
+ #
31
+ # @private
32
+ class UnixPlatform
33
+ def self.match?
34
+ !FFI::Platform.windows?
35
+ end
36
+
37
+ def environment_variables
38
+ UnixEnvironmentVariables
39
+ end
40
+
41
+ def command_string
42
+ UnixCommandString
43
+ end
44
+
45
+ def filesystem_status
46
+ FilesystemStatus
47
+ end
48
+
49
+ def announcer
50
+ Announcer
51
+ end
52
+
53
+ def command_monitor
54
+ CommandMonitor
55
+ end
56
+
57
+ def logger
58
+ ArubaLogger
59
+ end
60
+
61
+ def determine_file_size(*args)
62
+ DetermineFileSize.new.call(*args)
63
+ end
64
+
65
+ def determine_disk_usage(*args)
66
+ DetermineDiskUsage.new.call(*args)
67
+ end
68
+
69
+ def create_file(*args)
70
+ ArubaFileCreator.new.call(*args)
71
+ end
72
+
73
+ def create_fixed_size_file(*args)
74
+ ArubaFixedSizeFileCreator.new.call(*args)
75
+ end
76
+
77
+ def with_environment(env = {}, &block)
78
+ LocalEnvironment.new.call(env, &block)
79
+ end
80
+
81
+ def default_shell
82
+ 'bash'
83
+ end
84
+
85
+ def detect_ruby(cmd)
86
+ if cmd =~ /^ruby\s/
87
+ cmd.gsub(/^ruby\s/, "#{current_ruby} ")
88
+ else
89
+ cmd
90
+ end
91
+ end
92
+
93
+ def deprecated(msg)
94
+ warn(format('%s. Called by %s', msg, caller[1]))
95
+ end
96
+
97
+ def current_ruby
98
+ ::File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
99
+ end
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
+ 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
115
+ end
116
+
117
+ # Create directory and subdirectories
118
+ def mkdir(dir_name)
119
+ dir_name = ::File.expand_path(dir_name)
120
+
121
+ ::FileUtils.mkdir_p(dir_name) unless ::File.directory?(dir_name)
122
+ end
123
+
124
+ # Remove file, directory + sub-directories
125
+ def rm(paths, options = {})
126
+ paths = Array(paths).map { |p| ::File.expand_path(p) }
127
+
128
+ FileUtils.rm_r(paths, options)
129
+ end
130
+
131
+ # Get current working directory
132
+ def getwd
133
+ Dir.getwd
134
+ end
135
+
136
+ # Change to directory
137
+ def chdir(dir_name, &block)
138
+ dir_name = ::File.expand_path(dir_name.to_s)
139
+
140
+ with_environment 'OLDPWD' => getwd, 'PWD' => dir_name do
141
+ ::Dir.chdir(dir_name, &block)
142
+ end
143
+ end
144
+
145
+ # Touch file, directory
146
+ def touch(args, options)
147
+ FileUtils.touch(args, options)
148
+ end
149
+
150
+ # Copy file/directory
151
+ def cp(args, options)
152
+ FileUtils.cp_r(args, options)
153
+ end
154
+
155
+ # Move file/directory
156
+ def mv(args, options)
157
+ FileUtils.mv(args, options)
158
+ end
159
+
160
+ # Change mode of file/directory
161
+ def chmod(mode, args, options)
162
+ FileUtils.chmod_R(mode, args, options)
163
+ end
164
+
165
+ # Exists and is file
166
+ def file?(f)
167
+ File.file? f
168
+ end
169
+
170
+ # Exists and is directory
171
+ def directory?(f)
172
+ File.directory? f
173
+ end
174
+
175
+ # Path Exists
176
+ def exist?(f)
177
+ File.exist? f
178
+ end
179
+
180
+ # Path is executable
181
+ def executable?(f)
182
+ File.executable?(f)
183
+ end
184
+
185
+ # Expand path
186
+ def expand_path(path, base)
187
+ File.expand_path(path, base)
188
+ end
189
+
190
+ # Is absolute path
191
+ def absolute_path?(path)
192
+ Pathname.new(path).absolute?
193
+ end
194
+
195
+ # Is relative path
196
+ def relative_path?(path)
197
+ Pathname.new(path).relative?
198
+ end
199
+
200
+ # Check if command is relative
201
+ #
202
+ # @return [TrueClass, FalseClass]
203
+ # true
204
+ # * bin/command.sh
205
+ #
206
+ # false
207
+ # * /bin/command.sh
208
+ # * command.sh
209
+ def relative_command?(path)
210
+ p = ArubaPath.new(path)
211
+ p.relative? && p.depth > 1
212
+ end
213
+
214
+ # Check if command is relative
215
+ #
216
+ # @return [TrueClass, FalseClass]
217
+ # true
218
+ # * command.sh
219
+ #
220
+ # false
221
+ # * /bin/command.sh
222
+ # * bin/command.sh
223
+ def command?(path)
224
+ p = Pathname.new(path)
225
+ p.relative? && p.basename == p
226
+ end
227
+
228
+ # Write to file
229
+ 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
254
+ end
255
+
256
+ # Transform hash to a string table which can be output on stderr/stdout
257
+ def simple_table(hash, opts = {})
258
+ SimpleTable.new(hash, opts).to_s
259
+ end
260
+
261
+ # Resolve path for command using the PATH-environment variable
262
+ #
263
+ # Mostly taken from here: https://github.com/djberg96/ptools
264
+ #
265
+ # @param [#to_s] program
266
+ # The name of the program which should be resolved
267
+ #
268
+ # @param [String] path
269
+ # The PATH, a string concatenated with ":", e.g. /usr/bin/:/bin on a
270
+ # UNIX-system
271
+ def which(program, path = ENV['PATH'])
272
+ UnixWhich.new.call(program, path)
273
+ end
274
+ end
275
+ end
276
+ end