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,37 @@
1
+ module Aruba
2
+ # Standard error
3
+ class Error < StandardError; end
4
+
5
+ # An error because a user of the API did something wrong
6
+ class UserError < StandardError; end
7
+
8
+ # Raised on launch error
9
+ class LaunchError < Error; end
10
+
11
+ # Raised if one tries to use an unknown configuration option
12
+ class UnknownOptionError < ArgumentError; end
13
+
14
+ # Raised if command already died
15
+ class CommandAlreadyStoppedError < Error; end
16
+
17
+ # Raised if one tries to access last command started, but no command
18
+ # has been started
19
+ class NoCommandHasBeenStartedError < Error; end
20
+
21
+ # Raised if one tries to access last command stopped, but no command
22
+ # has been stopped
23
+ class NoCommandHasBeenStoppedError < Error; end
24
+
25
+ # Raised if one looked for a command, but no matching was found
26
+ class CommandNotFoundError < ArgumentError; end
27
+
28
+ # Raised if command was already started, otherwise aruba forgets about the
29
+ # previous pid and you've got hidden commands run
30
+ class CommandAlreadyStartedError < Error; end
31
+
32
+ # Raised if an event name cannot be resolved
33
+ class EventNameResolveError < StandardError; end
34
+
35
+ # Raised if given object is not an event
36
+ class NoEventError < StandardError; end
37
+ end
@@ -0,0 +1,59 @@
1
+ require 'aruba/event_bus/name_resolver'
2
+ require 'aruba/errors'
3
+
4
+ module Aruba
5
+ # Event bus
6
+ #
7
+ # Implements and in-process pub-sub events broadcaster allowing multiple observers
8
+ # to subscribe to different events that fire as your tests are executed.
9
+ #
10
+ class EventBus
11
+ # Create EventBus
12
+ #
13
+ # @param [#transform] resolver
14
+ # A resolver which transforms Symbol, String, Class into an event Class.
15
+ def initialize(resolver)
16
+ @resolver = resolver
17
+ @handlers = Hash.new { |h, k| h[k] = [] }
18
+ end
19
+
20
+ # Register for an event
21
+ #
22
+ # @param [String, Symbol, Class, Array] event_ids
23
+ # If Array, register multiple events witht the same handler. If String,
24
+ # Symbol, Class register handler for given event.
25
+ #
26
+ # @param [#call] handler_object
27
+ # The handler object, needs to have method `#call`. Either
28
+ # `handler_object` or `block` can be defined. The handler object gets the
29
+ # event passed to `#call`.
30
+ #
31
+ # @yield
32
+ # Handler block which gets the event passed as parameter.
33
+ def register(event_ids, handler_object = nil, &handler_proc)
34
+ handler = handler_proc || handler_object
35
+
36
+ fail ArgumentError, 'Please pass either an object#call or a handler block' if handler.nil? || !handler.respond_to?(:call)
37
+
38
+ Array(event_ids).flatten.each do |id|
39
+ @handlers[
40
+ @resolver.transform(id).to_s
41
+ ] << handler
42
+ end
43
+
44
+ nil
45
+ end
46
+
47
+ # Broadcast an event
48
+ #
49
+ # @param [Object] event
50
+ # An object of registered event class. This object is passed to the event
51
+ # handler.
52
+ #
53
+ def notify(event)
54
+ fail NoEventError, 'Please pass an event object, not a class' if event.is_a?(Class)
55
+
56
+ @handlers[event.class.to_s].each { |handler| handler.call(event) }
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,168 @@
1
+ require 'aruba/errors'
2
+
3
+ # Event notification library
4
+ module Aruba
5
+ # EventBus
6
+ class EventBus
7
+ # Resolve name to Event name
8
+ class NameResolver
9
+ # @private
10
+ # Helpers for Resolvers
11
+ module ResolveHelpers
12
+ def camel_case(underscored_name)
13
+ if RUBY_VERSION < '1.9.3'
14
+ underscored_name.to_s.split('_').map { |word| word.upcase.chars.to_a[0] + word.chars.to_a[1..-1].join }.join
15
+ else
16
+ underscored_name.to_s.split('_').map { |word| word.upcase[0] + word[1..-1] }.join
17
+ end
18
+ end
19
+
20
+ # Thanks ActiveSupport
21
+ # (Only needed to support Ruby 1.9.3 and JRuby)
22
+ # rubocop:disable Metrics/CyclomaticComplexity
23
+ # rubocop:disable Metrics/MethodLength
24
+ def constantize(camel_cased_word)
25
+ names = camel_cased_word.split('::')
26
+
27
+ # Trigger a built-in NameError exception including the ill-formed constant in the message.
28
+ Object.const_get(camel_cased_word) if names.empty?
29
+
30
+ # Remove the first blank element in case of '::ClassName' notation.
31
+ names.shift if names.size > 1 && names.first.empty?
32
+
33
+ names.inject(Object) do |constant, name|
34
+ if constant == Object
35
+ constant.const_get(name)
36
+ else
37
+ candidate = constant.const_get(name)
38
+
39
+ if RUBY_VERSION < '1.9.3'
40
+ next candidate if constant.const_defined?(name)
41
+ else
42
+ next candidate if constant.const_defined?(name, false)
43
+ end
44
+
45
+ next candidate unless Object.const_defined?(name)
46
+
47
+ # Go down the ancestors to check if it is owned directly. The check
48
+ # stops when we reach Object or the end of ancestors tree.
49
+ # rubocop:disable Style/EachWithObject
50
+ constant = constant.ancestors.inject do |const, ancestor|
51
+ break const if ancestor == Object
52
+ break ancestor if ancestor.const_defined?(name, false)
53
+ const
54
+ end
55
+ # rubocop:enable Style/EachWithObject
56
+
57
+ # owner is in Object, so raise
58
+ constant.const_get(name, false)
59
+ end
60
+ end
61
+ end
62
+ # rubocop:enable Metrics/CyclomaticComplexity
63
+ # rubocop:enable Metrics/MethodLength
64
+ end
65
+
66
+ # @private
67
+ # Convert a class in to an event class
68
+ class ClassResolver
69
+ class << self
70
+ def match?(event_id)
71
+ event_id.is_a? Class
72
+ end
73
+
74
+ # Which types are supported
75
+ def supports
76
+ [Class]
77
+ end
78
+ end
79
+
80
+ def transform(_, event_id)
81
+ event_id
82
+ end
83
+ end
84
+
85
+ # @private
86
+ # Convert a string in to an event class
87
+ class StringResolver
88
+ include ResolveHelpers
89
+
90
+ class << self
91
+ def match?(event_id)
92
+ event_id.is_a? String
93
+ end
94
+
95
+ # Which types are supported
96
+ def supports
97
+ [String]
98
+ end
99
+ end
100
+
101
+ def transform(_, event_id)
102
+ constantize(event_id)
103
+ end
104
+ end
105
+
106
+ # @private
107
+ # Convert a symbol in to an event class
108
+ class SymbolResolver
109
+ include ResolveHelpers
110
+
111
+ class << self
112
+ def match?(event_id)
113
+ event_id.is_a? Symbol
114
+ end
115
+
116
+ # Which types are supported
117
+ def supports
118
+ [Symbol]
119
+ end
120
+ end
121
+
122
+ def transform(default_namespace, event_id)
123
+ constantize("#{default_namespace}::#{camel_case(event_id)}")
124
+ end
125
+ end
126
+
127
+ # @private
128
+ # Default failing resolver
129
+ #
130
+ # This comes into play if the user passes an invalid event type
131
+ class FailingResolver
132
+ class << self
133
+ def match?(event_id)
134
+ fail ArgumentError, %(Input type "#{event_id.class}" of event_id "#{event_id}" is invalid)
135
+ end
136
+
137
+ def supports
138
+ []
139
+ end
140
+ end
141
+ end
142
+
143
+ protected
144
+
145
+ attr_reader :resolvers, :default_namespace
146
+
147
+ public
148
+
149
+ def initialize(default_namespace)
150
+ @default_namespace = default_namespace
151
+
152
+ @resolvers = []
153
+ @resolvers << ClassResolver
154
+ @resolvers << StringResolver
155
+ @resolvers << SymbolResolver
156
+ @resolvers << FailingResolver
157
+ end
158
+
159
+ def transform(event_id)
160
+ resolvers.find { |r| r.match? event_id }.new.transform(default_namespace, event_id)
161
+ rescue => e
162
+ # rubocop:disable Metrics/LineLength
163
+ raise EventNameResolveError, %(Transforming "#{event_id}" into an event class failed. Supported types are: #{@resolvers.map(&:supports).flatten.join(', ')}. #{e.message}.\n\n#{e.backtrace.join("\n")})
164
+ # rubocop:enable Metrics/LineLength
165
+ end
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,39 @@
1
+ # Aruba
2
+ module Aruba
3
+ # Events
4
+ module Events
5
+ # Basic event
6
+ #
7
+ # This is not meant for direct use - BasicEvent.new - by users. It is inherited by normal events
8
+ #
9
+ # @private
10
+ class BasicEvent
11
+ attr_reader :entity
12
+
13
+ def initialize(entity)
14
+ @entity = entity
15
+ end
16
+ end
17
+
18
+ # Command was stopped
19
+ class CommandStopped < BasicEvent; end
20
+
21
+ # Command was started
22
+ class CommandStarted < BasicEvent; end
23
+
24
+ # An environment variable was changed
25
+ class ChangedEnvironmentVariable < BasicEvent; end
26
+
27
+ # An environment variable was added
28
+ class AddedEnvironmentVariable < BasicEvent; end
29
+
30
+ # An environment variable was deleted
31
+ class DeletedEnvironmentVariable < BasicEvent; end
32
+
33
+ # The working directory has changed
34
+ class ChangedWorkingDirectory < BasicEvent; end
35
+
36
+ # The configuration was changed
37
+ class ChangedConfiguration < BasicEvent; end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ # String
2
+ class String
3
+ # Strips indentation in heredocs.
4
+ #
5
+ # For example in
6
+ #
7
+ # if options[:usage]
8
+ # puts <<-USAGE.strip_heredoc
9
+ # This command does such and such.
10
+ #
11
+ # Supported options are:
12
+ # -h This message
13
+ # ...
14
+ # USAGE
15
+ # end
16
+ #
17
+ # the user would see the usage message aligned against the left margin.
18
+ #
19
+ # Technically, it looks for the least indented line in the whole string, and removes
20
+ # that amount of leading whitespace.
21
+ def strip_heredoc
22
+ indent = scan(/^[ \t]*(?=\S)/).min.to_s.size
23
+ gsub(/^[ \t]{#{indent}}/, '')
24
+ end
25
+ end
@@ -0,0 +1,63 @@
1
+ require 'delegate'
2
+
3
+ # Aruba
4
+ module Aruba
5
+ # File Size
6
+ class FileSize
7
+ include Comparable
8
+
9
+ private
10
+
11
+ attr_reader :bytes, :divisor
12
+
13
+ public
14
+
15
+ # Create file size object
16
+ def initialize(bytes)
17
+ @bytes = bytes
18
+ @divisor = 1024
19
+ end
20
+
21
+ # Convert to bytes
22
+ def to_byte
23
+ bytes
24
+ end
25
+ alias to_i to_byte
26
+
27
+ # Convert to float
28
+ def to_f
29
+ to_i.to_f
30
+ end
31
+
32
+ # Convert to string
33
+ def to_s
34
+ to_i.to_s
35
+ end
36
+ alias inspect to_s
37
+
38
+ # Move to other
39
+ def coerce(other)
40
+ [bytes, other]
41
+ end
42
+
43
+ # Convert to kibi byte
44
+ def to_kibi_byte
45
+ to_byte.to_f / divisor
46
+ end
47
+
48
+ # Convert to mebi byte
49
+ def to_mebi_byte
50
+ to_kibi_byte.to_f / divisor
51
+ end
52
+
53
+ # Convert to gibi byte
54
+ def to_gibi_byte
55
+ to_mebi_byte.to_f / divisor
56
+ end
57
+
58
+ # Compare size with other size
59
+ def <=>(other)
60
+ to_i <=> other.to_i
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,46 @@
1
+ # Aruba
2
+ module Aruba
3
+ # Generate script files on command line
4
+ class ScriptFile
5
+ private
6
+
7
+ attr_reader :path, :content, :interpreter
8
+
9
+ public
10
+
11
+ def initialize(opts = {})
12
+ @path = opts[:path]
13
+ @content = opts[:content]
14
+ @interpreter = opts[:interpreter]
15
+ end
16
+
17
+ def call
18
+ Aruba.platform.write_file(path, "#{header}#{content}")
19
+ Aruba.platform.chmod(0755, path, {})
20
+ end
21
+
22
+ private
23
+
24
+ def header
25
+ if script_starts_with_shebang?
26
+ ''
27
+ elsif interpreter_is_absolute_path?
28
+ format("#!%s\n", interpreter)
29
+ elsif interpreter_is_just_the_name_of_shell?
30
+ format("#!/usr/bin/env %s\n", interpreter)
31
+ end
32
+ end
33
+
34
+ def interpreter_is_absolute_path?
35
+ Aruba.platform.absolute_path? interpreter
36
+ end
37
+
38
+ def interpreter_is_just_the_name_of_shell?
39
+ interpreter =~ /^[-_a-zA-Z.]+$/
40
+ end
41
+
42
+ def script_starts_with_shebang?
43
+ content.start_with? '#!'
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,56 @@
1
+ # Aruba
2
+ module Aruba
3
+ # Aruba Hooks
4
+ class Hooks
5
+ private
6
+
7
+ attr_reader :store
8
+
9
+ public
10
+
11
+ # Create store
12
+ def initialize
13
+ @store = {}
14
+ end
15
+
16
+ # Add new hook
17
+ #
18
+ # @param [String, Symbol] label
19
+ # The name of the hook
20
+ #
21
+ # @para [Proc] block
22
+ # The block which should be run for the hook
23
+ def append(label, block)
24
+ if store.key?(label.to_sym) && store[label.to_sym].respond_to?(:<<)
25
+ store[label.to_sym] << block
26
+ else
27
+ store[label.to_sym] = []
28
+ store[label.to_sym] << block
29
+ end
30
+ end
31
+
32
+ # Run hook
33
+ #
34
+ # @param [String, Symbol] label
35
+ # The name of the hook
36
+ #
37
+ # @param [Object] context
38
+ # The context in which the hook is run
39
+ #
40
+ # @param [Array] args
41
+ # Other arguments
42
+ def execute(label, context, *args)
43
+ Array(store[label.to_sym]).each do |block|
44
+ context.instance_exec(*args, &block)
45
+ end
46
+ end
47
+
48
+ # Check if hook exist
49
+ #
50
+ # @param [String, Symbol] label
51
+ # The name of the hook
52
+ def exist?(label)
53
+ store.key? label.to_sym
54
+ end
55
+ end
56
+ end