spectre-core 2.1.0 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f4f326a4af327d079fbf3ec5d7dc1e249432b975c4192246d214430c99a3b03
4
- data.tar.gz: 01cd31db52a056f496111ddae40fbb8ceb0fcd6728e3aec26f29306b83c49d7f
3
+ metadata.gz: 2343f54b9e9837df93c730210d5652256643d8514b0456670292b492dc7f770e
4
+ data.tar.gz: 6d934a08ecee932b5346a3d9e98fcd96bc27384f5b9f17cd01b9c08b430c0ff2
5
5
  SHA512:
6
- metadata.gz: 96f973c643e9e670ec791b433834fa394ee5814acc0534b52ddd09b47f9ddc46b4c50900a66ab7ba453ab3fb64c97ffa4e0a7f202fd53640eb51b6cb229ca463
7
- data.tar.gz: 3d68d5b96ee5e93bdc67e646498b606ab78dbe359faa3729993c6a13ee95e240688a5a89586f279a593d5b908b4c8db80472bcf5438432a3658dc7b4f3160483
6
+ metadata.gz: 137d6c2c7012d535ba7a93072b67f0cd471ca6b9c5b83225ccb9eb06a433645f078a9928a21c61598059e299c476fe2cbad9f6a4112fd5a0d2d86ed7c2f392e2
7
+ data.tar.gz: ab497f00a4ef0a3ca453f304a6a7e2ac30e0ecdd4910bc27c14c533079638866a2e609e6f618641cdd0ffa337e9575a340a658b1079f2fb18b38cf9cf6adadf4
data/exe/spectre CHANGED
@@ -121,7 +121,7 @@ options = OptionParser.new do |opts|
121
121
  'Override config option. Use `spectre show` to get list of available options') do |option|
122
122
  index = option.index('=')
123
123
  key = option[0...index]
124
- val = option[index + 1..]
124
+ val = option[(index + 1)..]
125
125
 
126
126
  val = val.split(',') if Spectre::CONFIG[key].is_a? Array
127
127
  val = ['true', '1'].include? val if [true, false].include?(Spectre::CONFIG[key])
@@ -11,7 +11,7 @@ module Spectre
11
11
  @val = val
12
12
  end
13
13
 
14
- def evaluate predicate, actual, negate
14
+ def evaluate? predicate, actual, negate
15
15
  !(!negate ^ predicate.call(@val, actual))
16
16
  end
17
17
 
@@ -31,8 +31,8 @@ module Spectre
31
31
  @second = ValueWrapper.wrap(second)
32
32
  end
33
33
 
34
- def evaluate predicate, actual, negate
35
- @first.evaluate(predicate, actual, negate) or @second.evaluate(predicate, actual, negate)
34
+ def evaluate? predicate, actual, negate
35
+ @first.evaluate?(predicate, actual, negate) or @second.evaluate?(predicate, actual, negate)
36
36
  end
37
37
 
38
38
  # :nodoc:
@@ -48,8 +48,8 @@ module Spectre
48
48
  @second = ValueWrapper.wrap(second)
49
49
  end
50
50
 
51
- def evaluate predicate, actual, negate
52
- @first.evaluate(predicate, actual, negate) and @second.evaluate(predicate, actual, negate)
51
+ def evaluate? predicate, actual, negate
52
+ @first.evaluate?(predicate, actual, negate) and @second.evaluate?(predicate, actual, negate)
53
53
  end
54
54
 
55
55
  # :nodoc:
@@ -88,7 +88,7 @@ module Spectre
88
88
  @var_name = file_content
89
89
  .lines[location.lineno - 1]
90
90
  .strip
91
- .match(/[\s\(]([^\s]+|\[.*\]|{.*})\.(to|not_to)[\s\(]/)
91
+ .match(/[\s(]([^\s]+|\[.*\]|{.*})\.(to|not_to)[\s(]/)
92
92
  .captures
93
93
  .first
94
94
  .strip
@@ -98,7 +98,7 @@ module Spectre
98
98
  @repr += " to #{method}"
99
99
  @repr += expected.nil? ? ' empty' : " #{@expected}"
100
100
 
101
- success = @expected.evaluate(@predicate, @actual, @negate)
101
+ success = @expected.evaluate?(@predicate, @actual, @negate)
102
102
 
103
103
  return if success
104
104
 
@@ -10,7 +10,7 @@ module Spectre
10
10
  def should_be value
11
11
  predicate = proc { |expected, actual| expected.to_s == actual.to_s }
12
12
  value = Spectre::Assertion::ValueWrapper.wrap(value)
13
- success = value.evaluate(predicate, self, false)
13
+ success = value.evaluate?(predicate, self, false)
14
14
 
15
15
  return if success
16
16
 
@@ -20,7 +20,7 @@ module Spectre
20
20
  def should_be_empty
21
21
  predicate = proc { |_, actual| actual.nil? or (actual.respond_to?(:empty?) and actual.empty?) }
22
22
  value = Spectre::Assertion::ValueWrapper.wrap(nil)
23
- success = value.evaluate(predicate, self, false)
23
+ success = value.evaluate?(predicate, self, false)
24
24
 
25
25
  return if success
26
26
 
@@ -30,7 +30,7 @@ module Spectre
30
30
  def should_not_be(value)
31
31
  predicate = proc { |expected, actual| expected.to_s == actual.to_s }
32
32
  value = Spectre::Assertion::ValueWrapper.wrap(value)
33
- success = value.evaluate(predicate, self, true)
33
+ success = value.evaluate?(predicate, self, true)
34
34
 
35
35
  return if success
36
36
 
@@ -40,7 +40,7 @@ module Spectre
40
40
  def should_not_exist
41
41
  predicate = proc { |expected, _| expected.respond_to? :nil? and expected.nil? }
42
42
  value = Spectre::Assertion::ValueWrapper.wrap(value)
43
- success = value.evaluate(predicate, self, true)
43
+ success = value.evaluate?(predicate, self, true)
44
44
 
45
45
  return if success
46
46
 
@@ -50,7 +50,7 @@ module Spectre
50
50
  def should_not_be_empty
51
51
  predicate = proc { |_, actual| actual.nil? or (actual.respond_to?(:empty?) and actual.empty?) }
52
52
  value = Spectre::Assertion::ValueWrapper.wrap(nil)
53
- success = value.evaluate(predicate, self, true)
53
+ success = value.evaluate?(predicate, self, true)
54
54
 
55
55
  return if success
56
56
 
@@ -64,7 +64,7 @@ module Spectre
64
64
  end
65
65
 
66
66
  value = Spectre::Assertion::ValueWrapper.wrap(value)
67
- success = value.evaluate(predicate, self, false)
67
+ success = value.evaluate?(predicate, self, false)
68
68
 
69
69
  return if success
70
70
 
@@ -78,7 +78,7 @@ module Spectre
78
78
  end
79
79
 
80
80
  value = Spectre::Assertion::ValueWrapper.wrap(value)
81
- success = value.evaluate(predicate, self, true)
81
+ success = value.evaluate?(predicate, self, true)
82
82
 
83
83
  return if success
84
84
 
@@ -43,7 +43,7 @@ class ::String
43
43
  ##
44
44
  # Trims the string to the given length and adds +...+ at the end
45
45
  def trim size = 50
46
- return "#{self[0..size - 4]}..." if (length + 3) > size
46
+ return "#{self[0..(size - 4)]}..." if (length + 3) > size
47
47
 
48
48
  self
49
49
  end
@@ -122,7 +122,7 @@ end
122
122
  module Spectre
123
123
  module Helpers
124
124
  class << self
125
- def uuid length = niL
125
+ def uuid length = nil
126
126
  return SecureRandom.hex(length / 2) if length
127
127
 
128
128
  SecureRandom.uuid
@@ -1,3 +1,3 @@
1
1
  module Spectre
2
- VERSION = '2.1.0'.freeze
2
+ VERSION = '2.1.2'.freeze
3
3
  end
data/lib/spectre.rb CHANGED
@@ -20,7 +20,7 @@ def get_call_location call_stack
20
20
  .find { |x| x.label.include? 'Spectre::Engine#load_files' or x.base_label == '<top (required)>' }
21
21
 
22
22
  [
23
- loc.path.sub(Dir.pwd, '.'),
23
+ loc.path.sub(Spectre.pwd, '.'),
24
24
  loc.lineno
25
25
  ]
26
26
  end
@@ -78,6 +78,13 @@ end
78
78
  # The main module containing all logic for the framework
79
79
  #
80
80
  module Spectre
81
+ # Cache Dir.pwd to avoid repeated system calls
82
+ @pwd = Dir.pwd
83
+
84
+ def self.pwd
85
+ @pwd
86
+ end
87
+
81
88
  ##
82
89
  # Exception to throw in order to abort a spec run
83
90
  #
@@ -320,7 +327,7 @@ module Spectre
320
327
  mixins.each_value do |mixin|
321
328
  output = "#{mixin.desc.yellow}\n"
322
329
  output += " params.....: #{mixin.params.join ', '}\n" if mixin.params.any?
323
- output += " location...: #{mixin.file.sub(Dir.pwd, '.')}:#{mixin.line}"
330
+ output += " location...: #{mixin.file.sub(Spectre.pwd, '.')}:#{mixin.line}"
324
331
  paragraphs << output
325
332
  end
326
333
 
@@ -496,19 +503,19 @@ module Spectre
496
503
  .select { |x| x.failures.any? }
497
504
 
498
505
  failed.each_with_index do |eval, eval_idx|
499
- output += if failed.count == 1
506
+ output += if failed.one?
500
507
  " #{eval.desc}, but"
501
508
  else
502
509
  " #{index}.#{eval_idx + 1}) #{eval.desc}, but"
503
510
  end
504
511
 
505
- if eval.failures.count == 1
512
+ if eval.failures.one?
506
513
  output += " #{eval.failures.first.message}\n"
507
514
  else
508
515
  output += " #{eval.failures.count} failures occured\n"
509
516
 
510
517
  eval.failures.each_with_index do |fail, fail_idx|
511
- output += if failed.count == 1
518
+ output += if failed.one?
512
519
  " #{index}.#{fail_idx + 1}) #{fail.message}\n"
513
520
  else
514
521
  " #{index}.#{eval_idx + 1}.#{fail_idx + 1}) #{fail.message}\n"
@@ -802,7 +809,6 @@ module Spectre
802
809
  DEFAULT_ASYNC_NAME = 'default'
803
810
 
804
811
  @@current = nil
805
- @@location_cache = {}
806
812
  @@skip_count = 0
807
813
 
808
814
  ##
@@ -981,20 +987,22 @@ module Spectre
981
987
  define_method(method) do |evaluation, &block|
982
988
  desc = "#{method} #{evaluation}"
983
989
 
984
- @evaluations << if block
985
- EvaluationContext.new(@engine, desc, &block)
986
- else
987
- EvaluationContext.new(@engine, desc) do
988
- unless evaluation.failure.nil?
989
- @failures << Failure.new(
990
- evaluation.failure,
991
- evaluation.call_location
992
- )
993
- end
994
- end
995
- end
990
+ evaluation = if block
991
+ EvaluationContext.new(@engine, desc, &block)
992
+ else
993
+ EvaluationContext.new(@engine, desc) do
994
+ unless evaluation.failure.nil?
995
+ @failures << Failure.new(
996
+ evaluation.failure,
997
+ evaluation.call_location
998
+ )
999
+ end
1000
+ end
1001
+ end
1002
+
1003
+ @evaluations << evaluation
996
1004
 
997
- raise AbortException if method == :assert and @evaluations.any? { |x| x.failures.any? }
1005
+ raise AbortException if method == :assert and evaluation.failures.any?
998
1006
  end
999
1007
  end
1000
1008
 
@@ -1069,10 +1077,7 @@ module Spectre
1069
1077
  def await name = DEFAULT_ASYNC_NAME
1070
1078
  return unless @threads.key? name
1071
1079
 
1072
- threads = @threads[name].map(&:join)
1073
-
1074
- @threads.delete(name)
1075
-
1080
+ threads = @threads.delete(name)
1076
1081
  threads.map(&:join)
1077
1082
  end
1078
1083
 
@@ -1257,7 +1262,7 @@ module Spectre
1257
1262
  file = caller
1258
1263
  .first
1259
1264
  .gsub(/:in .*/, '')
1260
- .gsub(Dir.pwd, '.')
1265
+ .gsub(Spectre.pwd, '.')
1261
1266
 
1262
1267
  context = DefinitionContext.new(desc, file, self)
1263
1268
  @children << context
@@ -1307,7 +1312,7 @@ module Spectre
1307
1312
  file = caller
1308
1313
  .first
1309
1314
  .gsub(/:in .*/, '')
1310
- .gsub(Dir.pwd, '.')
1315
+ .gsub(Spectre.pwd, '.')
1311
1316
 
1312
1317
  with ||= [nil]
1313
1318
 
@@ -1552,9 +1557,11 @@ module Spectre
1552
1557
  resource_files = Dir.glob File.join(resource_path, '**/*')
1553
1558
 
1554
1559
  resource_files.each do |file|
1555
- file.slice! resource_path
1556
- file = file[1..]
1557
- @resources[file] = File.expand_path File.join(resource_path, file)
1560
+ relative_file = file
1561
+ .delete_prefix(resource_path)
1562
+ .delete_prefix('/')
1563
+
1564
+ @resources[relative_file] = File.expand_path(file)
1558
1565
  end
1559
1566
  end
1560
1567
 
@@ -1574,6 +1581,9 @@ module Spectre
1574
1581
  require module_name
1575
1582
  end
1576
1583
  end
1584
+ ensure
1585
+ # return to the previous working directory
1586
+ Dir.chdir(Spectre.pwd)
1577
1587
  end
1578
1588
 
1579
1589
  # :nodoc:
@@ -1663,15 +1673,10 @@ module Spectre
1663
1673
  file = caller
1664
1674
  .first
1665
1675
  .gsub(/:in .*/, '')
1666
- .gsub(Dir.pwd, '.')
1667
-
1668
- main_context = @contexts.find { |x| x.desc == name }
1669
-
1670
- if main_context.nil?
1671
- main_context = DefinitionContext.new(name, file)
1672
- @contexts << main_context
1673
- end
1676
+ .gsub(Spectre.pwd, '.')
1674
1677
 
1678
+ main_context = DefinitionContext.new(name, file)
1679
+ @contexts << main_context
1675
1680
  main_context.instance_eval(&)
1676
1681
  end
1677
1682
 
@@ -1690,8 +1695,9 @@ module Spectre
1690
1695
 
1691
1696
  patterns.each do |pattern|
1692
1697
  Dir.glob(pattern).each do |file|
1693
- content = File.read File.absolute_path(file)
1694
- instance_eval(content, file, 1)
1698
+ abs_path = File.absolute_path(file)
1699
+ content = File.read abs_path
1700
+ instance_eval(content, abs_path, 1)
1695
1701
  end
1696
1702
  end
1697
1703
 
metadata CHANGED
@@ -1,84 +1,98 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spectre-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Neubauer
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-27 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: debug
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - "~>"
16
+ - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '1.0'
18
+ version: '0'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - "~>"
23
+ - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: '1.0'
25
+ version: '0'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: ectoplasm
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "~>"
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '1.4'
32
+ version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '1.4'
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: fiddle
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
40
54
  - !ruby/object:Gem::Dependency
41
55
  name: logger
42
56
  requirement: !ruby/object:Gem::Requirement
43
57
  requirements:
44
- - - "~>"
58
+ - - ">="
45
59
  - !ruby/object:Gem::Version
46
- version: '1.0'
60
+ version: '0'
47
61
  type: :runtime
48
62
  prerelease: false
49
63
  version_requirements: !ruby/object:Gem::Requirement
50
64
  requirements:
51
- - - "~>"
65
+ - - ">="
52
66
  - !ruby/object:Gem::Version
53
- version: '1.0'
67
+ version: '0'
54
68
  - !ruby/object:Gem::Dependency
55
69
  name: ostruct
56
70
  requirement: !ruby/object:Gem::Requirement
57
71
  requirements:
58
- - - "~>"
72
+ - - ">="
59
73
  - !ruby/object:Gem::Version
60
- version: '0.1'
74
+ version: '0'
61
75
  type: :runtime
62
76
  prerelease: false
63
77
  version_requirements: !ruby/object:Gem::Requirement
64
78
  requirements:
65
- - - "~>"
79
+ - - ">="
66
80
  - !ruby/object:Gem::Version
67
- version: '0.1'
81
+ version: '0'
68
82
  - !ruby/object:Gem::Dependency
69
83
  name: stringio
70
84
  requirement: !ruby/object:Gem::Requirement
71
85
  requirements:
72
- - - "~>"
86
+ - - ">="
73
87
  - !ruby/object:Gem::Version
74
- version: '3.0'
88
+ version: '0'
75
89
  type: :runtime
76
90
  prerelease: false
77
91
  version_requirements: !ruby/object:Gem::Requirement
78
92
  requirements:
79
- - - "~>"
93
+ - - ">="
80
94
  - !ruby/object:Gem::Version
81
- version: '3.0'
95
+ version: '0'
82
96
  description: A DSL and command line tool to describe and run automated tests
83
97
  email:
84
98
  - christian.neubauer@ionos.com
@@ -113,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
127
  - !ruby/object:Gem::Version
114
128
  version: '0'
115
129
  requirements: []
116
- rubygems_version: 3.6.2
130
+ rubygems_version: 3.6.9
117
131
  specification_version: 4
118
132
  summary: Describe and run automated tests
119
133
  test_files: []