aruba 1.1.2 → 2.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +115 -37
  3. data/CONTRIBUTING.md +0 -1
  4. data/README.md +17 -13
  5. data/lib/aruba/api/commands.rb +0 -2
  6. data/lib/aruba/api/core.rb +15 -11
  7. data/lib/aruba/api/filesystem.rb +1 -7
  8. data/lib/aruba/api/text.rb +0 -12
  9. data/lib/aruba/console.rb +1 -1
  10. data/lib/aruba/contracts/enum.rb +1 -0
  11. data/lib/aruba/cucumber/command.rb +175 -119
  12. data/lib/aruba/cucumber/file.rb +2 -2
  13. data/lib/aruba/cucumber/parameter_types.rb +1 -0
  14. data/lib/aruba/cucumber.rb +1 -0
  15. data/lib/aruba/event_bus/name_resolver.rb +1 -1
  16. data/lib/aruba/matchers/command/be_successfully_executed.rb +0 -2
  17. data/lib/aruba/matchers/command/have_exit_status.rb +7 -13
  18. data/lib/aruba/matchers/command/have_finished_in_time.rb +0 -2
  19. data/lib/aruba/matchers/directory/be_an_existing_directory.rb +0 -2
  20. data/lib/aruba/matchers/directory/have_sub_directory.rb +0 -2
  21. data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +0 -2
  22. data/lib/aruba/matchers/file/be_an_existing_executable.rb +0 -1
  23. data/lib/aruba/matchers/file/be_an_existing_file.rb +0 -2
  24. data/lib/aruba/matchers/file/have_file_content.rb +0 -2
  25. data/lib/aruba/matchers/file/have_file_size.rb +0 -2
  26. data/lib/aruba/matchers/file/have_same_file_content.rb +0 -1
  27. data/lib/aruba/matchers/path/a_path_matching_pattern.rb +0 -2
  28. data/lib/aruba/matchers/path/be_an_absolute_path.rb +0 -2
  29. data/lib/aruba/matchers/path/be_an_existing_path.rb +0 -2
  30. data/lib/aruba/matchers/path/have_permissions.rb +0 -2
  31. data/lib/aruba/platform.rb +2 -2
  32. data/lib/aruba/platforms/announcer.rb +0 -2
  33. data/lib/aruba/platforms/command_monitor.rb +2 -2
  34. data/lib/aruba/platforms/unix_environment_variables.rb +0 -2
  35. data/lib/aruba/platforms/unix_platform.rb +3 -2
  36. data/lib/aruba/platforms/windows_environment_variables.rb +1 -1
  37. data/lib/aruba/platforms/windows_platform.rb +1 -3
  38. data/lib/aruba/platforms/windows_which.rb +1 -1
  39. data/lib/aruba/processes/basic_process.rb +4 -0
  40. data/lib/aruba/version.rb +1 -1
  41. metadata +44 -22
  42. data/lib/aruba/matchers/base/base_matcher.rb +0 -87
  43. data/lib/aruba/matchers/base/object_formatter.rb +0 -104
  44. data/lib/aruba/matchers/collection/all.rb +0 -11
  45. data/lib/aruba/matchers/collection/include_an_object.rb +0 -120
  46. data/lib/aruba/matchers/collection.rb +0 -1
@@ -15,7 +15,7 @@ module Aruba
15
15
  attr_reader :registered_commands, :last_command_started, :last_command_stopped
16
16
 
17
17
  class DefaultLastCommandStopped
18
- def nil?
18
+ def empty?
19
19
  true
20
20
  end
21
21
 
@@ -29,7 +29,7 @@ module Aruba
29
29
  end
30
30
 
31
31
  class DefaultLastCommandStarted
32
- def nil?
32
+ def empty?
33
33
  true
34
34
  end
35
35
 
@@ -108,8 +108,6 @@ module Aruba
108
108
  value = value.to_s
109
109
 
110
110
  actions << UpdateAction.new(name.to_s => value)
111
-
112
- value
113
111
  end
114
112
 
115
113
  # Append value to variable
@@ -1,4 +1,5 @@
1
1
  require "rbconfig"
2
+ require "rubygems"
2
3
  require "pathname"
3
4
 
4
5
  require "aruba/aruba_path"
@@ -31,7 +32,7 @@ module Aruba
31
32
  # @private
32
33
  class UnixPlatform
33
34
  def self.match?
34
- !Cucumber::WINDOWS
35
+ !Gem.win_platform?
35
36
  end
36
37
 
37
38
  def environment_variables
@@ -99,7 +100,7 @@ module Aruba
99
100
  end
100
101
 
101
102
  def require_matching_files(pattern, base)
102
- ::Dir.glob(::File.expand_path(pattern, base)).each { |f| require_relative f }
103
+ ::Dir.glob(::File.expand_path(pattern, base)).sort.each { |f| require_relative f }
103
104
  end
104
105
 
105
106
  # Create directory and subdirectories
@@ -76,7 +76,7 @@ module Aruba
76
76
  end
77
77
 
78
78
  def self.upcase_env(env)
79
- env.each_with_object({}) { |(k, v), a| a[k.to_s.upcase] = v }
79
+ env.to_h.transform_keys { |k| k.to_s.upcase }
80
80
  end
81
81
 
82
82
  private
@@ -1,5 +1,3 @@
1
- require "cucumber/platform"
2
-
3
1
  require "aruba/platforms/unix_platform"
4
2
  require "aruba/platforms/windows_command_string"
5
3
  require "aruba/platforms/windows_environment_variables"
@@ -20,7 +18,7 @@ module Aruba
20
18
  # @private
21
19
  class WindowsPlatform < UnixPlatform
22
20
  def self.match?
23
- Cucumber::WINDOWS
21
+ Gem.win_platform?
24
22
  end
25
23
 
26
24
  # @see UnixPlatform#command_string
@@ -49,7 +49,7 @@ module Aruba
49
49
  file = File.join(dir, program)
50
50
  # Dir[] doesn't handle backslashes properly, so convert them. Also, if
51
51
  # the program name doesn't have an extension, try them all.
52
- file = file.tr('\\', "/")
52
+ file = file.tr("\\", "/")
53
53
 
54
54
  found = Dir[file].first
55
55
 
@@ -130,6 +130,10 @@ module Aruba
130
130
  []
131
131
  end
132
132
 
133
+ def empty?
134
+ false
135
+ end
136
+
133
137
  private
134
138
 
135
139
  def truncate(string, max_length)
data/lib/aruba/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Aruba
2
- VERSION = "1.1.2".freeze
2
+ VERSION = "2.1.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aruba
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy, Matt Wynne and other Aruba Contributors
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-20 00:00:00.000000000 Z
11
+ date: 2022-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -76,20 +76,20 @@ dependencies:
76
76
  requirements:
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: '2.4'
79
+ version: '4.0'
80
80
  - - "<"
81
81
  - !ruby/object:Gem::Version
82
- version: '7.0'
82
+ version: '9.0'
83
83
  type: :runtime
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '2.4'
89
+ version: '4.0'
90
90
  - - "<"
91
91
  - !ruby/object:Gem::Version
92
- version: '7.0'
92
+ version: '9.0'
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: rspec-expectations
95
95
  requirement: !ruby/object:Gem::Requirement
@@ -174,6 +174,26 @@ dependencies:
174
174
  - - "~>"
175
175
  - !ruby/object:Gem::Version
176
176
  version: '5.10'
177
+ - !ruby/object:Gem::Dependency
178
+ name: pry
179
+ requirement: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: 0.13.0
184
+ - - "<"
185
+ - !ruby/object:Gem::Version
186
+ version: 0.15.0
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: 0.13.0
194
+ - - "<"
195
+ - !ruby/object:Gem::Version
196
+ version: 0.15.0
177
197
  - !ruby/object:Gem::Dependency
178
198
  name: pry-doc
179
199
  requirement: !ruby/object:Gem::Requirement
@@ -228,28 +248,34 @@ dependencies:
228
248
  requirements:
229
249
  - - "~>"
230
250
  - !ruby/object:Gem::Version
231
- version: 3.10.0
251
+ version: '3.11'
232
252
  type: :development
233
253
  prerelease: false
234
254
  version_requirements: !ruby/object:Gem::Requirement
235
255
  requirements:
236
256
  - - "~>"
237
257
  - !ruby/object:Gem::Version
238
- version: 3.10.0
258
+ version: '3.11'
239
259
  - !ruby/object:Gem::Dependency
240
260
  name: rubocop
241
261
  requirement: !ruby/object:Gem::Requirement
242
262
  requirements:
243
263
  - - "~>"
244
264
  - !ruby/object:Gem::Version
245
- version: 1.12.0
265
+ version: '1.28'
266
+ - - "!="
267
+ - !ruby/object:Gem::Version
268
+ version: 1.29.0
246
269
  type: :development
247
270
  prerelease: false
248
271
  version_requirements: !ruby/object:Gem::Requirement
249
272
  requirements:
250
273
  - - "~>"
251
274
  - !ruby/object:Gem::Version
252
- version: 1.12.0
275
+ version: '1.28'
276
+ - - "!="
277
+ - !ruby/object:Gem::Version
278
+ version: 1.29.0
253
279
  - !ruby/object:Gem::Dependency
254
280
  name: rubocop-packaging
255
281
  requirement: !ruby/object:Gem::Requirement
@@ -270,28 +296,28 @@ dependencies:
270
296
  requirements:
271
297
  - - "~>"
272
298
  - !ruby/object:Gem::Version
273
- version: 1.10.1
299
+ version: '1.13'
274
300
  type: :development
275
301
  prerelease: false
276
302
  version_requirements: !ruby/object:Gem::Requirement
277
303
  requirements:
278
304
  - - "~>"
279
305
  - !ruby/object:Gem::Version
280
- version: 1.10.1
306
+ version: '1.13'
281
307
  - !ruby/object:Gem::Dependency
282
308
  name: rubocop-rspec
283
309
  requirement: !ruby/object:Gem::Requirement
284
310
  requirements:
285
311
  - - "~>"
286
312
  - !ruby/object:Gem::Version
287
- version: 2.2.0
313
+ version: '2.8'
288
314
  type: :development
289
315
  prerelease: false
290
316
  version_requirements: !ruby/object:Gem::Requirement
291
317
  requirements:
292
318
  - - "~>"
293
319
  - !ruby/object:Gem::Version
294
- version: 2.2.0
320
+ version: '2.8'
295
321
  - !ruby/object:Gem::Dependency
296
322
  name: simplecov
297
323
  requirement: !ruby/object:Gem::Requirement
@@ -372,6 +398,7 @@ files:
372
398
  - lib/aruba/cucumber/environment.rb
373
399
  - lib/aruba/cucumber/file.rb
374
400
  - lib/aruba/cucumber/hooks.rb
401
+ - lib/aruba/cucumber/parameter_types.rb
375
402
  - lib/aruba/cucumber/testing_frameworks.rb
376
403
  - lib/aruba/errors.rb
377
404
  - lib/aruba/event_bus.rb
@@ -382,12 +409,7 @@ files:
382
409
  - lib/aruba/hooks.rb
383
410
  - lib/aruba/in_config_wrapper.rb
384
411
  - lib/aruba/initializer.rb
385
- - lib/aruba/matchers/base/base_matcher.rb
386
412
  - lib/aruba/matchers/base/message_indenter.rb
387
- - lib/aruba/matchers/base/object_formatter.rb
388
- - lib/aruba/matchers/collection.rb
389
- - lib/aruba/matchers/collection/all.rb
390
- - lib/aruba/matchers/collection/include_an_object.rb
391
413
  - lib/aruba/matchers/command.rb
392
414
  - lib/aruba/matchers/command/be_successfully_executed.rb
393
415
  - lib/aruba/matchers/command/have_exit_status.rb
@@ -464,15 +486,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
464
486
  requirements:
465
487
  - - ">="
466
488
  - !ruby/object:Gem::Version
467
- version: '2.4'
489
+ version: '2.5'
468
490
  required_rubygems_version: !ruby/object:Gem::Requirement
469
491
  requirements:
470
492
  - - ">="
471
493
  - !ruby/object:Gem::Version
472
494
  version: '0'
473
495
  requirements: []
474
- rubygems_version: 3.2.15
496
+ rubygems_version: 3.3.7
475
497
  signing_key:
476
498
  specification_version: 4
477
- summary: aruba-1.1.2
499
+ summary: aruba-2.1.0
478
500
  test_files: []
@@ -1,87 +0,0 @@
1
- require "aruba/matchers/base/object_formatter"
2
-
3
- # Aruba
4
- module Aruba
5
- # Matchers
6
- module Matchers
7
- # Base Matcher
8
- class BaseMatcher
9
- # @api private
10
- # Used to detect when no arg is passed to `initialize`.
11
- # `nil` cannot be used because it's a valid value to pass.
12
- UNDEFINED = Object.new.freeze
13
-
14
- # @private
15
- attr_reader :actual, :expected, :rescued_exception
16
-
17
- def initialize(expected = UNDEFINED)
18
- @expected = expected unless UNDEFINED.equal?(expected)
19
- end
20
-
21
- # @api private
22
- # Indicates if the match is successful. Delegates to `match`, which
23
- # should be defined on a subclass. Takes care of consistently
24
- # initializing the `actual` attribute.
25
- def matches?(actual)
26
- @actual = actual
27
- match(expected, actual)
28
- end
29
-
30
- def iterable?
31
- @actual.respond_to?(:each_with_index)
32
- end
33
-
34
- # @private
35
- module HashFormatting
36
- module_function
37
-
38
- # `{ :a => 5, :b => 2 }.inspect` produces:
39
- #
40
- # {:a=>5, :b=>2}
41
- #
42
- # ...but it looks much better as:
43
- #
44
- # {:a => 5, :b => 2}
45
- #
46
- # This is idempotent and safe to run on a string multiple times.
47
- def improve_hash_formatting(inspect_string)
48
- inspect_string.gsub(/(\S)=>(\S)/, '\1 => \2')
49
- end
50
- end
51
-
52
- include HashFormatting
53
-
54
- # @api private
55
- # Provides default implementations of failure messages, based on the `description`.
56
- module DefaultFailureMessages
57
- # @api private
58
- # Provides a good generic failure message. Based on `description`.
59
- # When subclassing, if you are not satisfied with this failure message
60
- # you often only need to override `description`.
61
- # @return [String]
62
- def failure_message
63
- "expected #{description_of @actual} to #{description}"
64
- end
65
-
66
- # @api private
67
- # Provides a good generic negative failure message. Based on `description`.
68
- # When subclassing, if you are not satisfied with this failure message
69
- # you often only need to override `description`.
70
- # @return [String]
71
- def failure_message_when_negated
72
- "expected #{description_of @actual} not to #{description}"
73
- end
74
- end
75
-
76
- include DefaultFailureMessages
77
-
78
- # Returns the description of the given object in a way that is
79
- # aware of composed matchers. If the object is a matcher with
80
- # a `description` method, returns the description; otherwise
81
- # returns `object.inspect`.
82
- def description_of(object)
83
- Aruba::Matchers::ObjectFormatter.format(object)
84
- end
85
- end
86
- end
87
- end
@@ -1,104 +0,0 @@
1
- # Aruba
2
- module Aruba
3
- # Matchers
4
- module Matchers
5
- # Provide additional output details beyond what `inspect` provides when
6
- # printing Time, DateTime, or BigDecimal
7
- #
8
- # @private
9
- module ObjectFormatter
10
- # @api private
11
- def self.format(object)
12
- prepare_for_inspection(object).inspect
13
- end
14
-
15
- # @private
16
- # Prepares the provided object to be formatted by wrapping it as needed
17
- # in something that, when `inspect` is called on it, will produce the
18
- # desired output.
19
- #
20
- # This allows us to apply the desired formatting to hash/array data structures
21
- # at any level of nesting, simply by walking that structure and replacing items
22
- # with custom items that have `inspect` defined to return the desired output
23
- # for that item. Then we can just use `Array#inspect` or `Hash#inspect` to
24
- # format the entire thing.
25
- def self.prepare_for_inspection(object)
26
- case object
27
- when Array
28
- return object.map { |o| prepare_for_inspection(o) }
29
- when Hash
30
- return prepare_hash(object)
31
- when Time
32
- inspection = format_time(object)
33
- else
34
- if defined?(DateTime) && DateTime === object
35
- inspection = format_date_time(object)
36
- elsif defined?(BigDecimal) && BigDecimal === object
37
- inspection = "#{object.to_s 'F'} (#{object.inspect})"
38
- elsif RSpec::Support.is_a_matcher?(object) && object.respond_to?(:description)
39
- inspection = object.description
40
- else
41
- return DelegatingInspector.new(object)
42
- end
43
- end
44
-
45
- InspectableItem.new(inspection)
46
- end
47
-
48
- # @private
49
- def self.prepare_hash(input)
50
- input.each_with_object({}) do |(k, v), hash|
51
- hash[prepare_for_inspection(k)] = prepare_for_inspection(v)
52
- end
53
- end
54
-
55
- TIME_FORMAT = "%Y-%m-%d %H:%M:%S".freeze
56
-
57
- if Time.method_defined?(:nsec)
58
- # @private
59
- def self.format_time(time)
60
- time.strftime("#{TIME_FORMAT}.#{format('%09d', time.nsec)} %z")
61
- end
62
- end
63
-
64
- DATE_TIME_FORMAT = "%a, %d %b %Y %H:%M:%S.%N %z".freeze
65
-
66
- # ActiveSupport sometimes overrides inspect. If `ActiveSupport` is
67
- # defined use a custom format string that includes more time precision.
68
- # @private
69
- def self.format_date_time(date_time)
70
- if defined?(ActiveSupport)
71
- date_time.strftime(DATE_TIME_FORMAT)
72
- else
73
- date_time.inspect
74
- end
75
- end
76
-
77
- # @private
78
- InspectableItem = Struct.new(:inspection) do
79
- def inspect
80
- inspection
81
- end
82
-
83
- def pretty_print(pp)
84
- pp.text inspection
85
- end
86
- end
87
-
88
- # @private
89
- DelegatingInspector = Struct.new(:object) do
90
- def inspect
91
- if defined?(::Delegator) && ::Delegator === object
92
- "#<#{object.class}(#{ObjectFormatter.format(object.__getobj__)})>"
93
- else
94
- object.inspect
95
- end
96
- end
97
-
98
- def pretty_print(pp)
99
- pp.text inspect
100
- end
101
- end
102
- end
103
- end
104
- end
@@ -1,11 +0,0 @@
1
- require "rspec/expectations"
2
-
3
- # Aruba
4
- module Aruba
5
- # Matchers
6
- module Matchers
7
- include ::RSpec::Matchers
8
-
9
- module_function :all
10
- end
11
- end
@@ -1,120 +0,0 @@
1
- require "aruba/matchers/base/base_matcher"
2
- require "aruba/matchers/base/message_indenter"
3
-
4
- # Aruba
5
- module Aruba
6
- # Matchers
7
- module Matchers
8
- # @api private
9
- # Provides the implementation for `include_an_object`.
10
- # Not intended to be instantiated directly.
11
- class IncludeAnObject < BaseMatcher
12
- include Base::MessageIndenter
13
-
14
- protected
15
-
16
- # @private
17
- attr_reader :matcher, :failed_objects
18
- # @private
19
- attr_accessor :any_succeeded_object
20
-
21
- public
22
-
23
- def initialize(matcher)
24
- @matcher = matcher
25
- @failed_objects = []
26
- @any_succeeded_object = false
27
- end
28
-
29
- # @api private
30
- # @return [String]
31
- def failure_message
32
- return "#{improve_hash_formatting(super)}, but was not iterable" unless iterable?
33
-
34
- return failed_objects.first if failed_objects.size == 1
35
-
36
- all_messages = [improve_hash_formatting(super)]
37
- failed_objects.each_with_index do |matcher_failure_message, index|
38
- all_messages << failure_message_for_item(index, matcher_failure_message)
39
- end
40
- all_messages.join("\n\n")
41
- end
42
-
43
- # @api private
44
- # @return [String]
45
- def description
46
- improve_hash_formatting "include an object #{description_of matcher}"
47
- end
48
-
49
- def does_not_match?(actual)
50
- @actual = actual
51
-
52
- return false unless iterable?
53
-
54
- index_objects
55
-
56
- any_succeeded_object == false
57
- end
58
-
59
- private
60
-
61
- def match(expected, actual)
62
- @actual = actual
63
- @expected = expected
64
-
65
- return false unless iterable?
66
-
67
- index_objects
68
-
69
- any_succeeded_object == true
70
- end
71
-
72
- def index_objects
73
- actual.each_with_index do |actual_item, index|
74
- cloned_matcher = matcher.clone
75
- begin
76
- matches = cloned_matcher.matches?(actual_item)
77
- rescue StandardError
78
- matches = nil
79
- end
80
-
81
- if matches
82
- self.any_succeeded_object = true
83
- break
84
- else
85
- failed_objects[index] = cloned_matcher.failure_message
86
- end
87
- end
88
- end
89
-
90
- def failure_message_for_item(index, failure_message)
91
- failure_message = indent_multiline_message(add_new_line_if_needed(failure_message))
92
- indent_multiline_message(
93
- "object at index #{index} failed to match:#{failure_message}"
94
- )
95
- end
96
-
97
- def add_new_line_if_needed(message)
98
- message.start_with?("\n") ? message : "\n#{message}"
99
- end
100
- end
101
- end
102
- end
103
-
104
- module RSpec
105
- module Matchers
106
- # Passes if the provided matcher passes when checked against any
107
- # element of the collection.
108
- #
109
- # @example
110
- # expect([1, 4, 5]).to include_an_object be_odd
111
- #
112
- # @note You can also use this with compound matchers as well.
113
- #
114
- # @example
115
- # expect([1, 4, 'a']).to include_an_object( be_odd.and be_an(Integer) )
116
- def include_an_object(expected)
117
- ::Aruba::Matchers::IncludeAnObject.new(expected)
118
- end
119
- end
120
- end
@@ -1 +0,0 @@
1
- Aruba.platform.require_matching_files("../collection/**/*.rb", __FILE__)