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,44 @@
1
+ require 'aruba/api/environment'
2
+ require 'aruba/api/command'
3
+
4
+ # Aruba
5
+ module Aruba
6
+ # Api
7
+ module Api
8
+ # RVM
9
+ #
10
+ # @deprecated
11
+ module Rvm
12
+ # Use a clean rvm gemset
13
+ #
14
+ # Please make sure that you've got [rvm](http://rvm.io/) installed.
15
+ #
16
+ # @param [String] gemset
17
+ # The name of the gemset to be used
18
+ def use_clean_gemset(gemset)
19
+ run_simple(%{rvm gemset create "#{gemset}"}, true)
20
+ if all_stdout =~ /'#{gemset}' gemset created \((.*)\)\./
21
+ gem_home = Regexp.last_match[1]
22
+ set_environment_variable('GEM_HOME', gem_home)
23
+ set_environment_variable('GEM_PATH', gem_home)
24
+ set_environment_variable('BUNDLE_PATH', gem_home)
25
+
26
+ paths = (ENV['PATH'] || "").split(File::PATH_SEPARATOR)
27
+ paths.unshift(File.join(gem_home, 'bin'))
28
+ set_environment_variable('PATH', paths.uniq.join(File::PATH_SEPARATOR))
29
+
30
+ run_simple("gem install bundler", true)
31
+ else
32
+ raise "I didn't understand rvm's output: #{all_stdout}"
33
+ end
34
+ end
35
+
36
+ # Unset variables used by bundler
37
+ def unset_bundler_env_vars
38
+ %w[RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE].each do |key|
39
+ set_environment_variable(key, nil)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,56 @@
1
+ # Aruba
2
+ module Aruba
3
+ # Api
4
+ module Api
5
+ # Text manipulation
6
+ module Text
7
+ # Unescape text
8
+ #
9
+ # '\n' => "\n"
10
+ # '\e' => "\e"
11
+ # '\033' => "\e"
12
+ # '\"' => '"'
13
+ #
14
+ # @param [#to_s] text
15
+ # Input
16
+ def unescape_text(text)
17
+ text.gsub('\n', "\n").gsub('\"', '"').gsub('\e', "\e").gsub('\033', "\e").gsub('\016', "\016").gsub('\017', "\017").gsub('\t', "\t")
18
+ end
19
+
20
+ # Remove ansi characters from text
21
+ #
22
+ # @param [#to_s] text
23
+ # Input
24
+ def extract_text(text)
25
+ if Aruba::VERSION < '1'
26
+ text.gsub(/(?:\e|\033)\[\d+(?>(;\d+)*)m/, '')
27
+ else
28
+ text.gsub(/(?:\e|\033)\[\d+(?>(;\d+)*)m/, '').gsub(/\\\[|\\\]/, '').gsub(/\007|\016|\017/, '')
29
+ end
30
+ end
31
+
32
+ # Unescape special characters and remove ANSI characters
33
+ #
34
+ # @param [#to_s] text
35
+ # The text to sanitize
36
+ def sanitize_text(text)
37
+ text = unescape_text(text)
38
+ text = extract_text(text) if !aruba.config.keep_ansi || aruba.config.remove_ansi_escape_sequences
39
+
40
+ text.chomp
41
+ end
42
+
43
+ # @experimental
44
+ #
45
+ # Replace variables in command string
46
+ #
47
+ # @param [#to_s] text
48
+ # The text to parse
49
+ def replace_variables(text)
50
+ text = text.gsub(/<pid-last-command-started>/, last_command_started.pid.to_s) if text.include? '<pid-last-command-started>'
51
+
52
+ text
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,133 @@
1
+ require 'pathname'
2
+ require 'delegate'
3
+
4
+ require 'aruba/file_size'
5
+
6
+ # Aruba
7
+ module Aruba
8
+ # Pathname for aruba files and directories
9
+ #
10
+ # @private
11
+ class ArubaPath < Delegator
12
+ def initialize(path)
13
+ obj = [path.to_s].flatten
14
+
15
+ super obj
16
+
17
+ @delegate_sd_obj = obj
18
+ end
19
+
20
+ # Get path
21
+ def __getobj__
22
+ ::Pathname.new(::File.join(*@delegate_sd_obj))
23
+ end
24
+
25
+ # Set path
26
+ def __setobj__(obj)
27
+ @delegate_sd_obj = [obj.to_s].flatten
28
+ end
29
+
30
+ # Add directory/file to path
31
+ #
32
+ # @param [String] p
33
+ # The path to be added
34
+ #
35
+ # @example
36
+ # path = ArubaPath.new 'path/to/dir.d'
37
+ # path << 'subdir.d
38
+ # # or path.push 'subdir.d
39
+ # puts path
40
+ # # => path/to/dir.d/subdir.d
41
+ def push(p)
42
+ @delegate_sd_obj << p
43
+ end
44
+ alias << push
45
+
46
+ # Remove last component of path
47
+ #
48
+ # @example
49
+ # path = ArubaPath.new 'path/to/dir.d'
50
+ # path.pop
51
+ # puts path
52
+ # # => path/to
53
+ def pop
54
+ @delegate_sd_obj.pop
55
+ end
56
+
57
+ if RUBY_VERSION < '1.9'
58
+ def to_s
59
+ __getobj__.to_s
60
+ end
61
+
62
+ def relative?
63
+ !(%r{\A/} === to_s)
64
+ end
65
+
66
+ def absolute?
67
+ (%r{\A/} === to_s)
68
+ end
69
+
70
+ def to_ary
71
+ to_a
72
+ end
73
+ end
74
+
75
+ # How many parts has the file name
76
+ #
77
+ # @return [Integer]
78
+ # The count of file name parts
79
+ #
80
+ # @example
81
+ #
82
+ # path = ArubaPath.new('path/to/file.txt')
83
+ # path.depth # => 3
84
+ #
85
+ def depth
86
+ if RUBY_VERSION < '1.9'
87
+ items = []
88
+ __getobj__.each_filename { |f| items << f }
89
+
90
+ items.size
91
+ else
92
+ __getobj__.each_filename.to_a.size
93
+ end
94
+ end
95
+
96
+ # Path ends with string
97
+ #
98
+ # @param [String] string
99
+ # The string to check
100
+ def end_with?(string)
101
+ to_s.end_with? string
102
+ end
103
+
104
+ # Path starts with string
105
+ #
106
+ # @param [String] string
107
+ # The string to check
108
+ def start_with?(string)
109
+ to_s.start_with? string
110
+ end
111
+
112
+ # Return string at index
113
+ #
114
+ # @param [Integer, Range] index
115
+ def [](index)
116
+ if RUBY_VERSION < '1.9'
117
+ to_s.chars.to_a[index].to_a.join('')
118
+ else
119
+ to_s[index]
120
+ end
121
+ end
122
+
123
+ # Report count of blocks allocated on disk
124
+ #
125
+ # This reports the amount of blocks which are allocated by the path.
126
+ #
127
+ # @return [Integer]
128
+ # The count of blocks on disk
129
+ def blocks
130
+ File::Stat.new(to_s).blocks
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,240 @@
1
+ require 'contracts'
2
+ require 'aruba/basic_configuration/option'
3
+ require 'aruba/in_config_wrapper'
4
+
5
+ # Aruba
6
+ module Aruba
7
+ # Basic configuration for Aruba
8
+ #
9
+ # @private
10
+ class BasicConfiguration
11
+ include Contracts
12
+
13
+ class << self
14
+ def known_options
15
+ @known_options ||= {}
16
+ end
17
+
18
+ # Define an option reader
19
+ #
20
+ # @param [Symbol] name
21
+ # The name of the reader
22
+ #
23
+ # @param [Hash] opts
24
+ # Options
25
+ #
26
+ # @option [Class, Module] contract
27
+ # The contract for the option
28
+ #
29
+ # @option [Object] default
30
+ # The default value
31
+ def option_reader(name, opts = {})
32
+ contract = opts[:contract]
33
+ default = opts[:default]
34
+
35
+ fail ArgumentError, 'Either use block or default value' if block_given? && default
36
+ fail ArgumentError, 'contract-options is required' if contract.nil?
37
+
38
+ Contract contract
39
+ add_option(name, block_given? ? yield(InConfigWrapper.new(known_options)) : default)
40
+
41
+ define_method(name) { find_option(name).value }
42
+
43
+ self
44
+ end
45
+
46
+ # Define an option reader and writer
47
+ #
48
+ # @param [Symbol] name
49
+ # The name of the reader
50
+ #
51
+ # @param [Hash] opts
52
+ # Options
53
+ #
54
+ # @option [Class, Module] contract
55
+ # The contract for the option
56
+ #
57
+ # @option [Object] default
58
+ # The default value
59
+ #
60
+ # rubocop:disable Metrics/CyclomaticComplexity
61
+ def option_accessor(name, opts = {})
62
+ contract = opts[:contract]
63
+ default = opts[:default]
64
+
65
+ fail ArgumentError, 'Either use block or default value' if block_given? && default
66
+ # fail ArgumentError, 'Either use block or default value' if !block_given? && default.nil? && default.to_s.empty?
67
+ fail ArgumentError, 'contract-options is required' if contract.nil?
68
+
69
+ # Add writer
70
+ add_option(name, block_given? ? yield(InConfigWrapper.new(known_options)) : default)
71
+
72
+ Contract contract
73
+ define_method("#{name}=") { |v| find_option(name).value = v }
74
+
75
+ # Add reader
76
+ option_reader name, :contract => { None => contract.values.first }
77
+ end
78
+ # rubocop:enable Metrics/CyclomaticComplexity
79
+
80
+ private
81
+
82
+ def add_option(name, value = nil)
83
+ return if known_options.key?(name)
84
+
85
+ known_options[name] = Option.new(:name => name, :value => value)
86
+
87
+ self
88
+ end
89
+ end
90
+
91
+ protected
92
+
93
+ attr_accessor :local_options
94
+ attr_writer :hooks
95
+
96
+ # attr_reader :hooks
97
+
98
+ public
99
+
100
+ # Create configuration
101
+ def initialize
102
+ initialize_configuration
103
+ end
104
+
105
+ # @yield [Configuration]
106
+ #
107
+ # Yields self
108
+ def configure
109
+ yield self if block_given?
110
+ end
111
+
112
+ # Reset configuration
113
+ def reset
114
+ initialize_configuration
115
+ end
116
+
117
+ # Make deep dup copy of configuration
118
+ def make_copy
119
+ obj = self.dup
120
+ obj.local_options = Marshal.load(Marshal.dump(local_options))
121
+ obj.hooks = @hooks
122
+
123
+ obj
124
+ end
125
+
126
+ # Get access to hooks
127
+ def hooks
128
+ # rubocop:disable Metrics/LineLength
129
+ Aruba.platform.deprecated 'The use of the "#aruba.config.hooks" is deprecated. Please use "#aruba.config.before(:name) {}" to define and "#aruba.config.before(:name, *args)" to run a hook. This method will become private in the next major version.'
130
+ # rubocop:enable Metrics/LineLength
131
+
132
+ @hooks
133
+ end
134
+
135
+ # @deprecated
136
+ def before_cmd(&block)
137
+ Aruba.platform.deprecated 'The use of the "#before_cmd"-hook is deprecated. Please define with "#before(:command) {}" instead'
138
+
139
+ before(:command, &block)
140
+ end
141
+
142
+ # Define or run before-hook
143
+ #
144
+ # @param [Symbol, String] name
145
+ # The name of the hook
146
+ #
147
+ # @param [Proc] context
148
+ # The context a hook should run in. This is a runtime only option.
149
+ #
150
+ # @param [Array] args
151
+ # Arguments for the run of hook. This is a runtime only option.
152
+ #
153
+ # @yield
154
+ # The code block which should be run. This is a configure time only option
155
+ def before(name, context = proc {}, *args, &block)
156
+ name = format('%s_%s', 'before_', name.to_s).to_sym
157
+
158
+ if block_given?
159
+ @hooks.append(name, block)
160
+
161
+ self
162
+ else
163
+ @hooks.execute(name, context, *args)
164
+ end
165
+ end
166
+
167
+ # Define or run after-hook
168
+ #
169
+ # @param [Symbol, String] name
170
+ # The name of the hook
171
+ #
172
+ # @param [Proc] context
173
+ # The context a hook should run in. This is a runtime only option.
174
+ #
175
+ # @param [Array] args
176
+ # Arguments for the run of hook. This is a runtime only option.
177
+ #
178
+ # @yield
179
+ # The code block which should be run. This is a configure time only option
180
+ def after(name, context = proc {}, *args, &block)
181
+ name = format('%s_%s', 'after_', name.to_s).to_sym
182
+
183
+ if block_given?
184
+ @hooks.append(name, block)
185
+
186
+ self
187
+ else
188
+ @hooks.execute(name, context, *args)
189
+ end
190
+ end
191
+
192
+ # Check if before-hook <name> is defined
193
+ def before?(name)
194
+ name = format('%s_%s', 'before_', name.to_s).to_sym
195
+
196
+ @hooks.exist? name
197
+ end
198
+
199
+ # Check if after-hook <name> is defined
200
+ def after?(name)
201
+ name = format('%s_%s', 'after_', name.to_s).to_sym
202
+
203
+ @hooks.exist? name
204
+ end
205
+
206
+ # Check if <name> is option
207
+ #
208
+ # @param [String, Symbol] name
209
+ # The name of the option
210
+ def option?(name)
211
+ local_options.any? { |_, v| v.name == name.to_sym }
212
+ end
213
+
214
+ def ==(other)
215
+ local_options.values.map(&:value) == other.local_options.values.map(&:value)
216
+ end
217
+
218
+ # Set if name is option
219
+ def set_if_option(name, *args)
220
+ if RUBY_VERSION < '1.9'
221
+ send("#{name}=".to_sym, *args) if option? name
222
+ else
223
+ public_send("#{name}=".to_sym, *args) if option? name
224
+ end
225
+ end
226
+
227
+ private
228
+
229
+ def initialize_configuration
230
+ @local_options = Marshal.load(Marshal.dump(self.class.known_options))
231
+ @hooks = Hooks.new
232
+ end
233
+
234
+ def find_option(name)
235
+ fail NotImplementedError, %(Unknown option "#{name}") unless option? name
236
+
237
+ local_options[name]
238
+ end
239
+ end
240
+ end