stable 1.1.0 → 1.2.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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/stable/spec.rb +58 -1
  3. data/lib/stable.rb +1 -31
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6eaeeb526166f78e5d039f97e943f3dae2541b869728ce3888778e0d72be922
4
- data.tar.gz: b7edd805344ecd2eead6e6cbef78abacdde918eef4c9219a252f24d0aa76f9b8
3
+ metadata.gz: d4375cbe65cd2bf8c245d6415fbf69f7a3d52089e625f9c5d60d776db18bb8e7
4
+ data.tar.gz: 73a10041d5fcd9d1c156b62081f477aada4bc8a61fa1fc3fe4b50a102358dba1
5
5
  SHA512:
6
- metadata.gz: 0c0197b7316ed87668a74ce881317454924cfee6467976fd662901dea25daf8ee338cfe455c0a8133c96ab2d8639d2109223d8de20fc699b4b09c6e8e45e65df
7
- data.tar.gz: 95bba0dd950234f2f1115b25cfd0197b0bec71474930d0302d113a7e2113d260c09578e1d66f2c7b59e5f6db51bd3f6b2bd48bffcb98b60d16829a0912a63e1f
6
+ metadata.gz: d19ad046cd24e28cbb20ef92e23406dff44cc0f798d09a5c1b921d98d48f5edcb7c3dce7180484e535b32ff46ce14e5dddd68e3306d18dc15641069cca39786a
7
+ data.tar.gz: 4e05508756de9a0cca55277846f630a54a638504594de3ddd9b024da4f6cd78815407918a610f8800c623552f5b7cbb642fda714176ac680e952ecbda39d91b5
data/lib/stable/spec.rb CHANGED
@@ -6,7 +6,7 @@ module Stable
6
6
  # outputs. it's a self-contained, serializable representation of a method's
7
7
  # behavior at a specific point in time.
8
8
  class Spec
9
- attr_reader :class_name, :method_name, :args, :result, :error, :timestamp
9
+ attr_reader :class_name, :method_name, :args, :result, :error, :timestamp, :actual_result, :actual_error, :status
10
10
 
11
11
  def initialize(class_name:, method_name:, args:, result: nil, error: nil, timestamp: Time.now.iso8601)
12
12
  @class_name = class_name
@@ -15,6 +15,63 @@ module Stable
15
15
  @result = result
16
16
  @error = error
17
17
  @timestamp = timestamp
18
+ @status = :pending
19
+ end
20
+
21
+ def run!
22
+ klass = Object.const_get(class_name)
23
+ instance = klass.new
24
+
25
+ begin
26
+ @actual_result = instance.public_send(method_name, *args)
27
+ if error
28
+ @status = :failed
29
+ elsif actual_result == result
30
+ @status = :passed
31
+ else
32
+ @status = :failed
33
+ end
34
+ rescue => e
35
+ @actual_error = e
36
+ if error && e.class.name == error["class"]
37
+ @status = :passed_with_error
38
+ else
39
+ @status = :failed
40
+ end
41
+ end
42
+ self
43
+ end
44
+
45
+ def to_s
46
+ description = "#{class_name}##{method_name}(#{args.join(', ')})"
47
+ case status
48
+ when :passed
49
+ "PASSED: #{description}"
50
+ when :passed_with_error
51
+ "PASSED: #{description} (error)"
52
+ when :failed
53
+ lines = ["FAILED: #{description}"]
54
+ if actual_error
55
+ if error
56
+ lines << " Expected error: #{error['class']}"
57
+ lines << " Actual error: #{actual_error.class.name}: #{actual_error.message}"
58
+ else
59
+ lines << " Expected result: #{result.inspect}"
60
+ lines << " Actual error: #{actual_error.class.name}: #{actual_error.message}"
61
+ end
62
+ else
63
+ if error
64
+ lines << " Expected error: #{error['class']}"
65
+ lines << " Actual result: #{actual_result.inspect}"
66
+ else
67
+ lines << " Expected: #{result.inspect}"
68
+ lines << " Actual: #{actual_result.inspect}"
69
+ end
70
+ end
71
+ lines.join("\n")
72
+ else
73
+ "PENDING: #{description}"
74
+ end
18
75
  end
19
76
 
20
77
  def to_jsonl
data/lib/stable.rb CHANGED
@@ -62,37 +62,7 @@ module Stable
62
62
  end
63
63
 
64
64
  def verify(record_hash)
65
- spec = Spec.from_jsonl(record_hash.to_json)
66
- klass = Object.const_get(spec.class_name)
67
- instance = klass.new
68
- description = "#{spec.class_name}##{spec.method_name}(#{spec.args.join(', ')})"
69
-
70
- begin
71
- actual_result = instance.public_send(spec.method_name, *spec.args)
72
- if spec.error
73
- puts "FAILED: #{description}"
74
- puts " Expected error: #{spec.error['class']}"
75
- puts " Actual result: #{actual_result.inspect}"
76
- elsif actual_result == spec.result
77
- puts "PASSED: #{description}"
78
- else
79
- puts "FAILED: #{description}"
80
- puts " Expected: #{spec.result.inspect}"
81
- puts " Actual: #{actual_result.inspect}"
82
- end
83
- rescue => e
84
- if spec.error && e.class.name == spec.error["class"]
85
- puts "PASSED: #{description} (error)"
86
- elsif spec.error
87
- puts "FAILED: #{description}"
88
- puts " Expected error: #{spec.error['class']}"
89
- puts " Actual error: #{e.class.name}: #{e.message}"
90
- else
91
- puts "FAILED: #{description}"
92
- puts " Expected result: #{spec.result.inspect}"
93
- puts " Actual error: #{e.class.name}: #{e.message}"
94
- end
95
- end
65
+ Spec.from_jsonl(record_hash.to_json).run!
96
66
  end
97
67
  end
98
68
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Lunt
@@ -29,7 +29,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '0'
32
+ version: '3.4'
33
33
  required_rubygems_version: !ruby/object:Gem::Requirement
34
34
  requirements:
35
35
  - - ">="