aruba 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -1
  3. data/CONTRIBUTING.md +11 -31
  4. data/README.md +1 -2
  5. data/exe/aruba +2 -2
  6. data/lib/aruba.rb +1 -1
  7. data/lib/aruba/api.rb +11 -12
  8. data/lib/aruba/api/bundler.rb +18 -3
  9. data/lib/aruba/api/commands.rb +19 -22
  10. data/lib/aruba/api/core.rb +65 -48
  11. data/lib/aruba/api/environment.rb +13 -5
  12. data/lib/aruba/api/filesystem.rb +69 -39
  13. data/lib/aruba/api/text.rb +15 -3
  14. data/lib/aruba/aruba_path.rb +3 -4
  15. data/lib/aruba/basic_configuration.rb +52 -71
  16. data/lib/aruba/basic_configuration/option.rb +2 -2
  17. data/lib/aruba/cli.rb +9 -6
  18. data/lib/aruba/command.rb +4 -4
  19. data/lib/aruba/config/jruby.rb +9 -9
  20. data/lib/aruba/config_wrapper.rb +17 -2
  21. data/lib/aruba/configuration.rb +37 -32
  22. data/lib/aruba/console.rb +11 -13
  23. data/lib/aruba/console/help.rb +9 -6
  24. data/lib/aruba/contracts/absolute_path.rb +2 -2
  25. data/lib/aruba/contracts/enum.rb +1 -1
  26. data/lib/aruba/contracts/is_power_of_two.rb +3 -3
  27. data/lib/aruba/contracts/relative_path.rb +2 -2
  28. data/lib/aruba/cucumber.rb +7 -7
  29. data/lib/aruba/cucumber/command.rb +106 -95
  30. data/lib/aruba/cucumber/environment.rb +7 -7
  31. data/lib/aruba/cucumber/file.rb +50 -26
  32. data/lib/aruba/cucumber/hooks.rb +32 -29
  33. data/lib/aruba/cucumber/testing_frameworks.rb +32 -30
  34. data/lib/aruba/event_bus.rb +6 -4
  35. data/lib/aruba/event_bus/name_resolver.rb +12 -11
  36. data/lib/aruba/events.rb +2 -1
  37. data/lib/aruba/file_size.rb +1 -1
  38. data/lib/aruba/generators/script_file.rb +2 -2
  39. data/lib/aruba/hooks.rb +2 -4
  40. data/lib/aruba/in_config_wrapper.rb +8 -5
  41. data/lib/aruba/initializer.rb +14 -12
  42. data/lib/aruba/matchers/base/base_matcher.rb +3 -12
  43. data/lib/aruba/matchers/base/message_indenter.rb +2 -2
  44. data/lib/aruba/matchers/base/object_formatter.rb +2 -5
  45. data/lib/aruba/matchers/collection.rb +1 -1
  46. data/lib/aruba/matchers/collection/all.rb +1 -1
  47. data/lib/aruba/matchers/collection/include_an_object.rb +6 -6
  48. data/lib/aruba/matchers/command.rb +1 -1
  49. data/lib/aruba/matchers/command/be_successfully_executed.rb +6 -4
  50. data/lib/aruba/matchers/command/have_exit_status.rb +3 -1
  51. data/lib/aruba/matchers/command/have_finished_in_time.rb +4 -2
  52. data/lib/aruba/matchers/command/have_output.rb +4 -2
  53. data/lib/aruba/matchers/command/have_output_on_stderr.rb +3 -1
  54. data/lib/aruba/matchers/command/have_output_on_stdout.rb +3 -1
  55. data/lib/aruba/matchers/directory.rb +1 -1
  56. data/lib/aruba/matchers/directory/be_an_existing_directory.rb +2 -2
  57. data/lib/aruba/matchers/directory/have_sub_directory.rb +9 -4
  58. data/lib/aruba/matchers/environment.rb +1 -1
  59. data/lib/aruba/matchers/file.rb +1 -1
  60. data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +1 -1
  61. data/lib/aruba/matchers/file/be_an_existing_executable.rb +2 -2
  62. data/lib/aruba/matchers/file/be_an_existing_file.rb +2 -2
  63. data/lib/aruba/matchers/file/have_file_content.rb +1 -1
  64. data/lib/aruba/matchers/file/have_file_size.rb +5 -3
  65. data/lib/aruba/matchers/file/have_same_file_content.rb +2 -2
  66. data/lib/aruba/matchers/path.rb +1 -1
  67. data/lib/aruba/matchers/path/a_path_matching_pattern.rb +1 -1
  68. data/lib/aruba/matchers/path/be_an_absolute_path.rb +1 -1
  69. data/lib/aruba/matchers/path/be_an_existing_path.rb +1 -1
  70. data/lib/aruba/matchers/path/have_permissions.rb +9 -6
  71. data/lib/aruba/matchers/string.rb +1 -1
  72. data/lib/aruba/matchers/string/include_output_string.rb +1 -1
  73. data/lib/aruba/matchers/string/match_output_string.rb +1 -1
  74. data/lib/aruba/matchers/string/output_string_eq.rb +1 -1
  75. data/lib/aruba/platform.rb +2 -2
  76. data/lib/aruba/platforms/announcer.rb +29 -17
  77. data/lib/aruba/platforms/aruba_file_creator.rb +3 -1
  78. data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +7 -2
  79. data/lib/aruba/platforms/aruba_logger.rb +11 -10
  80. data/lib/aruba/platforms/command_monitor.rb +7 -9
  81. data/lib/aruba/platforms/determine_disk_usage.rb +2 -4
  82. data/lib/aruba/platforms/filesystem_status.rb +20 -14
  83. data/lib/aruba/platforms/simple_table.rb +3 -3
  84. data/lib/aruba/platforms/unix_command_string.rb +2 -2
  85. data/lib/aruba/platforms/unix_environment_variables.rb +2 -4
  86. data/lib/aruba/platforms/unix_platform.rb +23 -23
  87. data/lib/aruba/platforms/unix_which.rb +2 -2
  88. data/lib/aruba/platforms/windows_command_string.rb +2 -2
  89. data/lib/aruba/platforms/windows_environment_variables.rb +3 -2
  90. data/lib/aruba/platforms/windows_platform.rb +7 -7
  91. data/lib/aruba/platforms/windows_which.rb +8 -4
  92. data/lib/aruba/processes/basic_process.rb +4 -4
  93. data/lib/aruba/processes/debug_process.rb +5 -3
  94. data/lib/aruba/processes/in_process.rb +10 -8
  95. data/lib/aruba/processes/spawn_process.rb +28 -25
  96. data/lib/aruba/rspec.rb +30 -20
  97. data/lib/aruba/runtime.rb +16 -9
  98. data/lib/aruba/setup.rb +25 -12
  99. data/lib/aruba/version.rb +1 -1
  100. metadata +77 -88
  101. data/.cucumberproignore +0 -3
  102. data/.document +0 -5
  103. data/.github/ISSUE_TEMPLATE.md +0 -48
  104. data/.github/PULL_REQUEST_TEMPLATE.md +0 -41
  105. data/.gitignore +0 -38
  106. data/.rspec +0 -3
  107. data/.rubocop.yml +0 -31
  108. data/.rubocop_todo.yml +0 -262
  109. data/.simplecov +0 -36
  110. data/.travis.yml +0 -62
  111. data/.yardopts +0 -11
  112. data/Dockerfile +0 -67
  113. data/Gemfile +0 -12
  114. data/Rakefile +0 -80
  115. data/TODO.md +0 -13
  116. data/appveyor.yml +0 -29
  117. data/aruba.gemspec +0 -54
  118. data/bin/console +0 -7
  119. data/bin/test +0 -9
  120. data/config/.gitignore +0 -1
  121. data/cucumber.yml +0 -6
  122. data/docker-compose.yml +0 -26
  123. data/fixtures/cli-app/.gitignore +0 -9
  124. data/fixtures/cli-app/.rspec +0 -2
  125. data/fixtures/cli-app/README.md +0 -39
  126. data/fixtures/cli-app/Rakefile +0 -1
  127. data/fixtures/cli-app/bin/aruba-test-cli +0 -6
  128. data/fixtures/cli-app/cli-app.gemspec +0 -25
  129. data/fixtures/cli-app/features/support/aruba.rb +0 -1
  130. data/fixtures/cli-app/features/support/env.rb +0 -1
  131. data/fixtures/cli-app/lib/cli/app.rb +0 -9
  132. data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +0 -15
  133. data/fixtures/cli-app/lib/cli/app/version.rb +0 -5
  134. data/fixtures/cli-app/script/console +0 -14
  135. data/fixtures/cli-app/spec/spec_helper.rb +0 -7
  136. data/fixtures/cli-app/spec/support/aruba.rb +0 -1
  137. data/fixtures/copy/file.txt +0 -1
  138. data/fixtures/empty-app/.gitignore +0 -9
  139. data/fixtures/empty-app/.rspec +0 -2
  140. data/fixtures/empty-app/README.md +0 -24
  141. data/fixtures/empty-app/Rakefile +0 -1
  142. data/fixtures/empty-app/cli-app.gemspec +0 -25
  143. data/fixtures/empty-app/lib/cli/app.rb +0 -7
  144. data/fixtures/empty-app/lib/cli/app/version.rb +0 -5
  145. data/fixtures/getting-started-app/.gitignore +0 -4
  146. data/fixtures/getting-started-app/Gemfile +0 -4
  147. data/fixtures/getting-started-app/README.md +0 -3
  148. data/fixtures/getting-started-app/features/support/env.rb +0 -1
  149. data/lib/aruba/extensions/string/strip.rb +0 -25
  150. data/lib/aruba/tasks/docker_helpers.rb +0 -154
@@ -1,4 +1,4 @@
1
- require 'aruba/platform'
1
+ require "aruba/platform"
2
2
 
3
3
  # Aruba
4
4
  module Aruba
@@ -23,7 +23,9 @@ module Aruba
23
23
  aruba.environment[name] = value
24
24
  new_environment = aruba.environment.to_h
25
25
 
26
- environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: value } }
26
+ environment_change = { old: old_environment,
27
+ new: new_environment,
28
+ changed: { name: name, value: value } }
27
29
  aruba.event_bus.notify Events::AddedEnvironmentVariable.new(environment_change)
28
30
 
29
31
  self
@@ -46,7 +48,9 @@ module Aruba
46
48
  aruba.environment.append name, value
47
49
  new_environment = aruba.environment.to_h
48
50
 
49
- environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: value } }
51
+ environment_change = { old: old_environment,
52
+ new: new_environment,
53
+ changed: { name: name, value: value } }
50
54
  aruba.event_bus.notify Events::ChangedEnvironmentVariable.new(environment_change)
51
55
 
52
56
  self
@@ -69,7 +73,9 @@ module Aruba
69
73
  aruba.environment.prepend name, value
70
74
  new_environment = aruba.environment.to_h
71
75
 
72
- environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: value } }
76
+ environment_change = { old: old_environment,
77
+ new: new_environment,
78
+ changed: { name: name, value: value } }
73
79
  aruba.event_bus.notify Events::ChangedEnvironmentVariable.new(environment_change)
74
80
 
75
81
  self
@@ -88,7 +94,9 @@ module Aruba
88
94
  aruba.environment.delete name
89
95
  new_environment = aruba.environment.to_h
90
96
 
91
- environment_change = { old: old_environment, new: new_environment, changed: { name: name, value: '' } }
97
+ environment_change = { old: old_environment,
98
+ new: new_environment,
99
+ changed: { name: name, value: "" } }
92
100
  aruba.event_bus.notify Events::ChangedEnvironmentVariable.new(environment_change)
93
101
 
94
102
  self
@@ -1,11 +1,10 @@
1
- require 'pathname'
1
+ require "pathname"
2
2
 
3
- require 'aruba/platform'
4
- require 'aruba/extensions/string/strip'
3
+ require "aruba/platform"
5
4
 
6
- Aruba.platform.require_matching_files('../matchers/file/*.rb', __FILE__)
7
- Aruba.platform.require_matching_files('../matchers/directory/*.rb', __FILE__)
8
- Aruba.platform.require_matching_files('../matchers/path/*.rb', __FILE__)
5
+ Aruba.platform.require_matching_files("../matchers/file/*.rb", __FILE__)
6
+ Aruba.platform.require_matching_files("../matchers/directory/*.rb", __FILE__)
7
+ Aruba.platform.require_matching_files("../matchers/path/*.rb", __FILE__)
9
8
 
10
9
  # Aruba
11
10
  module Aruba
@@ -68,7 +67,7 @@ module Aruba
68
67
  # @return [Array]
69
68
  # List of files and directories
70
69
  def all_paths
71
- list('.').map { |path| expand_path(path) }
70
+ list(".").map { |path| expand_path(path) }
72
71
  end
73
72
 
74
73
  # Return all existing files in current directory
@@ -76,7 +75,7 @@ module Aruba
76
75
  # @return [Array]
77
76
  # List of files
78
77
  def all_files
79
- list('.').select { |p| file? p }.map { |p| expand_path(p) }
78
+ list(".").select { |p| file? p }.map { |p| expand_path(p) }
80
79
  end
81
80
 
82
81
  # Return all existing directories in current directory
@@ -84,7 +83,7 @@ module Aruba
84
83
  # @return [Array]
85
84
  # List of files
86
85
  def all_directories
87
- list('.').select { |p| directory? p }.map { |p| expand_path(p) }
86
+ list(".").select { |p| directory? p }.map { |p| expand_path(p) }
88
87
  end
89
88
 
90
89
  # Create directory object
@@ -92,7 +91,7 @@ module Aruba
92
91
  # @return [Dir]
93
92
  # The directory object
94
93
  def directory(path)
95
- fail ArgumentError, %(Path "#{name}" does not exist.) unless exist? name
94
+ raise ArgumentError, %(Path "#{name}" does not exist.) unless exist? name
96
95
 
97
96
  Dir.new(expand_path(path))
98
97
  end
@@ -102,22 +101,31 @@ module Aruba
102
101
  # @return [Array]
103
102
  # The content of directory
104
103
  def list(name)
105
- fail ArgumentError, %(Path "#{name}" does not exist.) unless exist? name
106
- fail ArgumentError, %(Only directories are supported. Path "#{name}" is not a directory.) unless directory? name
104
+ raise ArgumentError, %(Path "#{name}" does not exist.) unless exist? name
107
105
 
108
- existing_files = Dir.glob(expand_path(File.join(name, '**', '*')))
109
- current_working_directory = Pathname.new(expand_path('.'))
106
+ unless directory? name
107
+ raise ArgumentError,
108
+ %(Only directories are supported. Path "#{name}" is not a directory.)
109
+ end
110
+
111
+ existing_files = Dir.glob(expand_path(File.join(name, "**", "*")))
112
+ current_working_directory = Pathname.new(expand_path("."))
110
113
 
111
- existing_files.map { |d| Pathname.new(d).relative_path_from(current_working_directory).to_s }
114
+ existing_files.map do |d|
115
+ Pathname.new(d).relative_path_from(current_working_directory).to_s
116
+ end
112
117
  end
113
118
 
114
119
  # Return content of file
115
120
  #
116
121
  # @return [Array]
117
- # The content of file, without "\n" or "\r\n" at the end. To rebuild the file use `content.join("\n")`
122
+ # The content of file, without "\n" or "\r\n" at the end.
123
+ # To rebuild the file use `content.join("\n")`
118
124
  def read(name)
119
- fail ArgumentError, %(Path "#{name}" does not exist.) unless exist? name
120
- fail ArgumentError, %(Only files are supported. Path "#{name}" is not a file.) unless file? name
125
+ raise ArgumentError, %(Path "#{name}" does not exist.) unless exist? name
126
+ unless file? name
127
+ raise ArgumentError, %(Only files are supported. Path "#{name}" is not a file.)
128
+ end
121
129
 
122
130
  File.readlines(expand_path(name)).map(&:chomp)
123
131
  end
@@ -145,7 +153,7 @@ module Aruba
145
153
  def touch(*args)
146
154
  args = args.flatten
147
155
 
148
- options = if args.last.kind_of? Hash
156
+ options = if args.last.is_a? Hash
149
157
  args.pop
150
158
  else
151
159
  {}
@@ -168,9 +176,6 @@ module Aruba
168
176
  # @param [String] destination
169
177
  # A file or directory name. If multiple sources are given the destination
170
178
  # needs to be a directory
171
- #
172
- # rubocop:disable Metrics/CyclomaticComplexity
173
- # def copy(*source, destination)
174
179
  def copy(*args)
175
180
  args = args.flatten
176
181
  destination = args.pop
@@ -181,11 +186,12 @@ module Aruba
181
186
  end
182
187
 
183
188
  if destination.start_with? aruba.config.fixtures_path_prefix
184
- raise ArgumentError, "Using a fixture as destination (#{destination}) is not supported"
189
+ raise ArgumentError,
190
+ "Using a fixture as destination (#{destination}) is not supported"
185
191
  end
186
192
 
187
193
  if source.count > 1 && exist?(destination) && !directory?(destination)
188
- raise ArgumentError, 'Multiples sources can only be copied to a directory'
194
+ raise ArgumentError, "Multiples sources can only be copied to a directory"
189
195
  end
190
196
 
191
197
  source_paths = source.map { |f| expand_path(f) }
@@ -202,7 +208,6 @@ module Aruba
202
208
 
203
209
  self
204
210
  end
205
- # rubocop:enable Metrics/CyclomaticComplexity
206
211
 
207
212
  # Move a file and/or directory
208
213
  #
@@ -214,20 +219,20 @@ module Aruba
214
219
  # @param [String] destination
215
220
  # A file or directory name. If multiple sources are given the destination
216
221
  # needs to be a directory
217
- #
218
- # rubocop:disable Metrics/CyclomaticComplexity
219
- # rubocop:disable Metrics/MethodLength
220
222
  def move(*args)
221
223
  args = args.flatten
222
224
  destination = args.pop
223
225
  source = args
224
226
 
225
227
  source.each do |s|
226
- raise ArgumentError, "Using a fixture as source (#{source}) is not supported" if s.start_with? aruba.config.fixtures_path_prefix
228
+ if s.start_with? aruba.config.fixtures_path_prefix
229
+ raise ArgumentError, "Using a fixture as source (#{source}) is not supported"
230
+ end
227
231
  end
228
232
 
229
233
  if destination.start_with? aruba.config.fixtures_path_prefix
230
- raise ArgumentError, "Using a fixture as destination (#{destination}) is not supported"
234
+ raise ArgumentError,
235
+ "Using a fixture as destination (#{destination}) is not supported"
231
236
  end
232
237
 
233
238
  source.each do |s|
@@ -235,7 +240,7 @@ module Aruba
235
240
  end
236
241
 
237
242
  if source.count > 1 && exist?(destination) && !directory?(destination)
238
- raise ArgumentError, 'Multiple sources can only be copied to a directory'
243
+ raise ArgumentError, "Multiple sources can only be copied to a directory"
239
244
  end
240
245
 
241
246
  source_paths = source.map { |f| expand_path(f) }
@@ -252,8 +257,6 @@ module Aruba
252
257
 
253
258
  self
254
259
  end
255
- # rubocop:enable Metrics/MethodLength
256
- # rubocop:enable Metrics/CyclomaticComplexity
257
260
 
258
261
  # Create a file with the given size
259
262
  #
@@ -285,21 +288,21 @@ module Aruba
285
288
  # Change file system permissions of file
286
289
  #
287
290
  # @param [Octal] mode
288
- # File system mode, eg. 0755
291
+ # File system mode, eg. 0o755
289
292
  #
290
293
  # @param [String] file_name
291
294
  # Name of file to be modified. This file needs to be present to succeed
292
295
  def chmod(*args)
293
296
  args = args.flatten
294
297
 
295
- options = if args.last.kind_of? Hash
298
+ options = if args.last.is_a? Hash
296
299
  args.pop
297
300
  else
298
301
  {}
299
302
  end
300
303
 
301
304
  mode = args.shift
302
- mode = if mode.kind_of? String
305
+ mode = if mode.is_a? String
303
306
  mode.to_i(8)
304
307
  else
305
308
  mode
@@ -323,8 +326,35 @@ module Aruba
323
326
  def append_to_file(file_name, file_content)
324
327
  file_name = expand_path(file_name)
325
328
 
326
- Aruba.platform.mkdir(File.dirname(file_name))
327
- File.open(file_name, 'a') { |f| f << file_content }
329
+ unless File.exist? file_name
330
+ Aruba.platform.deprecated("The ability to call #append_to_file with a file that" \
331
+ " does not exist is deprecated and will be removed in" \
332
+ " Aruba 2.0.")
333
+ Aruba.platform.mkdir(File.dirname(file_name))
334
+ end
335
+ File.open(file_name, "a") { |f| f << file_content }
336
+ end
337
+
338
+ # Append lines to a (text) file. This will make sure a newline is present
339
+ # between the old content and the new.
340
+ #
341
+ # @param [String] file_name
342
+ # The name of the file to be used
343
+ #
344
+ # @param [String] file_content
345
+ # The lines which should be appended to file
346
+ def append_lines_to_file(file_name, file_content)
347
+ file_name = expand_path(file_name)
348
+
349
+ last = File.open(file_name) do |f|
350
+ f.seek(-3, IO::SEEK_END)
351
+ f.read
352
+ end
353
+
354
+ File.open(file_name, "a") do |f|
355
+ f << "\n" unless last.end_with? "\n"
356
+ f << file_content
357
+ end
328
358
  end
329
359
 
330
360
  # Create a directory in current directory
@@ -344,7 +374,7 @@ module Aruba
344
374
  def remove(*args)
345
375
  args = args.flatten
346
376
 
347
- options = if args.last.kind_of? Hash
377
+ options = if args.last.is_a? Hash
348
378
  args.pop
349
379
  else
350
380
  {}
@@ -14,7 +14,14 @@ module Aruba
14
14
  # @param [#to_s] text
15
15
  # Input
16
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")
17
+ text
18
+ .gsub('\n', "\n")
19
+ .gsub('\"', '"')
20
+ .gsub('\e', "\e")
21
+ .gsub('\033', "\e")
22
+ .gsub('\016', "\016")
23
+ .gsub('\017', "\017")
24
+ .gsub('\t', "\t")
18
25
  end
19
26
 
20
27
  # Remove ansi characters from text
@@ -22,7 +29,10 @@ module Aruba
22
29
  # @param [#to_s] text
23
30
  # Input
24
31
  def extract_text(text)
25
- text.gsub(/(?:\e|\033)\[\d+(?>(;\d+)*)m/, '').gsub(/\\\[|\\\]/, '').gsub(/\007|\016|\017/, '')
32
+ text
33
+ .gsub(/(?:\e|\033)\[\d+(?>(;\d+)*)m/, "")
34
+ .gsub(/\\\[|\\\]/, "")
35
+ .gsub(/\007|\016|\017/, "")
26
36
  end
27
37
 
28
38
  # Unescape special characters and remove ANSI characters
@@ -41,7 +51,9 @@ module Aruba
41
51
  # @param [#to_s] text
42
52
  # The text to parse
43
53
  def replace_variables(text)
44
- text = text.gsub(/<pid-last-command-started>/, last_command_started.pid.to_s) if text.include? '<pid-last-command-started>'
54
+ if text.include? "<pid-last-command-started>"
55
+ text = text.gsub(/<pid-last-command-started>/, last_command_started.pid.to_s)
56
+ end
45
57
 
46
58
  text
47
59
  end
@@ -1,4 +1,4 @@
1
- require 'pathname'
1
+ require "pathname"
2
2
 
3
3
  # Aruba
4
4
  module Aruba
@@ -57,9 +57,8 @@ module Aruba
57
57
  # Get path
58
58
  def to_pathname
59
59
  current_path = @obj.inject do |path, element|
60
- if element.start_with? '~'
61
- element
62
- elsif Aruba.platform.absolute_path? element
60
+ if element.start_with?("~") ||
61
+ Aruba.platform.absolute_path?(element)
63
62
  element
64
63
  else
65
64
  File.join(path, element)
@@ -1,6 +1,6 @@
1
- require 'contracts'
2
- require 'aruba/basic_configuration/option'
3
- require 'aruba/in_config_wrapper'
1
+ require "contracts"
2
+ require "aruba/basic_configuration/option"
3
+ require "aruba/in_config_wrapper"
4
4
 
5
5
  # Aruba
6
6
  module Aruba
@@ -20,27 +20,18 @@ module Aruba
20
20
  # @param [Symbol] name
21
21
  # The name of the reader
22
22
  #
23
- # @param [Hash] opts
24
- # Options
25
- #
26
- # @option [Class, Module] contract
27
- # The contract for the option
23
+ # @option [Class, Module] type
24
+ # The type contract for the option
28
25
  #
29
26
  # @option [Object] default
30
27
  # 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?
28
+ def option_reader(name, type:, default: nil)
29
+ raise ArgumentError, "Either use block or default value" if block_given? && default
37
30
 
38
- Contract contract
39
31
  add_option(name, block_given? ? yield(InConfigWrapper.new(known_options)) : default)
40
32
 
33
+ Contract None => type
41
34
  define_method(name) { find_option(name).value }
42
-
43
- self
44
35
  end
45
36
 
46
37
  # Define an option reader and writer
@@ -48,31 +39,23 @@ module Aruba
48
39
  # @param [Symbol] name
49
40
  # The name of the reader
50
41
  #
51
- # @param [Hash] opts
52
- # Options
53
- #
54
- # @option [Class, Module] contract
55
- # The contract for the option
42
+ # @option [Class, Module] type
43
+ # The type contract for the option
56
44
  #
57
45
  # @option [Object] default
58
46
  # The default value
59
47
  #
60
- def option_accessor(name, opts = {})
61
- contract = opts[:contract]
62
- default = opts[:default]
63
-
64
- fail ArgumentError, 'Either use block or default value' if block_given? && default
65
- # fail ArgumentError, 'Either use block or default value' if !block_given? && default.nil? && default.to_s.empty?
66
- fail ArgumentError, 'contract-options is required' if contract.nil?
48
+ def option_accessor(name, type:, default: nil)
49
+ raise ArgumentError, "Either use block or default value" if block_given? && default
67
50
 
68
51
  # Add writer
69
52
  add_option(name, block_given? ? yield(InConfigWrapper.new(known_options)) : default)
70
53
 
71
- Contract contract
54
+ Contract type => type
72
55
  define_method("#{name}=") { |v| find_option(name).value = v }
73
56
 
74
57
  # Add reader
75
- option_reader name, contract: { None => contract.values.first }
58
+ option_reader name, type: type
76
59
  end
77
60
 
78
61
  private
@@ -91,8 +74,6 @@ module Aruba
91
74
  attr_accessor :local_options
92
75
  attr_writer :hooks
93
76
 
94
- # attr_reader :hooks
95
-
96
77
  public
97
78
 
98
79
  # Create configuration
@@ -121,68 +102,68 @@ module Aruba
121
102
  obj
122
103
  end
123
104
 
124
- # Define or run before-hook
105
+ # Define before-hook
125
106
  #
126
107
  # @param [Symbol, String] name
127
108
  # The name of the hook
128
109
  #
129
- # @param [Proc] context
130
- # The context a hook should run in. This is a runtime only option.
131
- #
132
- # @param [Array] args
133
- # Arguments for the run of hook. This is a runtime only option.
134
- #
135
110
  # @yield
136
111
  # The code block which should be run. This is a configure time only option
137
- def before(name, context = proc {}, *args, &block)
138
- name = format('%s_%s', 'before_', name.to_s).to_sym
112
+ def before(name, &block)
113
+ name = format("%s_%s", "before_", name.to_s).to_sym
114
+ raise ArgumentError, "A block is required" unless block
139
115
 
140
- if block_given?
141
- @hooks.append(name, block)
116
+ @hooks.append(name, block)
142
117
 
143
- self
144
- else
145
- @hooks.execute(name, context, *args)
146
- end
118
+ self
147
119
  end
148
120
 
149
- # Define or run after-hook
121
+ # Run before-hook
150
122
  #
151
123
  # @param [Symbol, String] name
152
124
  # The name of the hook
153
125
  #
154
126
  # @param [Proc] context
155
- # The context a hook should run in. This is a runtime only option.
127
+ # The context a hook should run in
156
128
  #
157
129
  # @param [Array] args
158
- # Arguments for the run of hook. This is a runtime only option.
130
+ # Arguments for the run of hook
131
+ def run_before_hook(name, context, *args)
132
+ name = format("%s_%s", "before_", name.to_s).to_sym
133
+
134
+ @hooks.execute(name, context, *args)
135
+ end
136
+
137
+ # Define after-hook
138
+ #
139
+ # @param [Symbol, String] name
140
+ # The name of the hook
159
141
  #
160
142
  # @yield
161
143
  # The code block which should be run. This is a configure time only option
162
- def after(name, context = proc {}, *args, &block)
163
- name = format('%s_%s', 'after_', name.to_s).to_sym
164
-
165
- if block_given?
166
- @hooks.append(name, block)
167
-
168
- self
169
- else
170
- @hooks.execute(name, context, *args)
171
- end
172
- end
144
+ def after(name, &block)
145
+ name = format("%s_%s", "after_", name.to_s).to_sym
146
+ raise ArgumentError, "A block is required" unless block
173
147
 
174
- # Check if before-hook <name> is defined
175
- def before?(name)
176
- name = format('%s_%s', 'before_', name.to_s).to_sym
148
+ @hooks.append(name, block)
177
149
 
178
- @hooks.exist? name
150
+ self
179
151
  end
180
152
 
181
- # Check if after-hook <name> is defined
182
- def after?(name)
183
- name = format('%s_%s', 'after_', name.to_s).to_sym
153
+ # Run after-hook
154
+ #
155
+ # @param [Symbol, String] name
156
+ # The name of the hook
157
+ #
158
+ # @param [Proc] context
159
+ # The context a hook should run in
160
+ #
161
+ # @param [Array] args
162
+ # Arguments for the run of hook
163
+ def run_after_hook(name, context, *args)
164
+ name = format("%s_%s", "after_", name.to_s).to_sym
184
165
 
185
- @hooks.exist? name
166
+ @hooks.execute(name, context, *args)
186
167
  end
187
168
 
188
169
  # Check if <name> is option
@@ -210,7 +191,7 @@ module Aruba
210
191
  end
211
192
 
212
193
  def find_option(name)
213
- fail NotImplementedError, %(Unknown option "#{name}") unless option? name
194
+ raise NotImplementedError, %(Unknown option "#{name}") unless option? name
214
195
 
215
196
  local_options[name]
216
197
  end