aruba 1.1.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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__)