assert_generator 0.1.3 → 0.1.4
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 +4 -4
- data/lib/assert_generator.rb +31 -9
- metadata +20 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccd94537b7e844452c6b6cedd7322dce6dbe867566f4e7a6cb61c6bf489b451a
|
4
|
+
data.tar.gz: d776744f117e30458eb37e417f7d88c102772fb21776c2051df539fef379a560
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92de98db446541f10e121582584635776dbb059a30ce51160455ad593840ffcc4745ac8a62a54c4eb5e5993e14cf7a0e381ad9a1ca95f2d5d8e88a8520a66ffd
|
7
|
+
data.tar.gz: 459757fe20cd990c11db825ae5e821e75c6172d2cde093f4dd994a94e4cb69b33a19552dc02fdd4e5852117b31a9bb07f14f008604c57df5c19530530264daa1
|
data/lib/assert_generator.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'date'
|
4
|
+
require 'binding_of_caller'
|
4
5
|
|
5
6
|
module AssertGenerator
|
6
7
|
# Generate asserts based on some actual output from an object under test
|
@@ -19,16 +20,18 @@ module AssertGenerator
|
|
19
20
|
# to access the object
|
20
21
|
# @param relative_dates [String] adjust dates to be relative to the supplied date as a string expression
|
21
22
|
# - use with date dependent fixtures
|
23
|
+
# @param numeric_precision [Integer] compare BigDecimal and Float using this level of precision
|
24
|
+
# in `assert_in_delta, set to nil for an `assert_equal` compare
|
22
25
|
# @yield a block which when evaluated returns the source object
|
23
26
|
#
|
24
|
-
def self.generate_asserts(source = nil, source_expr = nil, relative_dates: nil, &block)
|
25
|
-
AssertGenerator::Klass.new.send(:generate_asserts, source, source_expr, relative_dates, block)
|
27
|
+
def self.generate_asserts(source = nil, source_expr = nil, relative_dates: nil, numeric_precision: 2, &block)
|
28
|
+
AssertGenerator::Klass.new.send(:generate_asserts, source, source_expr, relative_dates, numeric_precision, block)
|
26
29
|
end
|
27
30
|
|
28
31
|
class Klass
|
29
|
-
attr_accessor :relative_dates, :relative_date_today
|
32
|
+
attr_accessor :relative_dates, :relative_date_today, :numeric_precision
|
30
33
|
|
31
|
-
def generate_asserts(source, source_expr, relative_dates, block)
|
34
|
+
def generate_asserts(source, source_expr, relative_dates, numeric_precision, block)
|
32
35
|
if block
|
33
36
|
unless !defined?(Rails) || Rails.env.test?
|
34
37
|
raise 'AssertGenerator must only be used in the test context'
|
@@ -45,14 +48,14 @@ module AssertGenerator
|
|
45
48
|
end
|
46
49
|
|
47
50
|
if relative_dates
|
48
|
-
raise 'relative_dates needs block syntax' unless block
|
49
|
-
|
50
51
|
self.relative_dates = relative_dates
|
51
52
|
# rubocop:disable Security/Eval
|
52
|
-
self.relative_date_today = eval(relative_dates, block.
|
53
|
+
self.relative_date_today = eval(relative_dates, block&.binding || binding.of_caller(1))
|
53
54
|
# rubocop:enable Security/Eval
|
54
55
|
end
|
55
56
|
|
57
|
+
self.numeric_precision = numeric_precision
|
58
|
+
|
56
59
|
if source.is_a?(Hash)
|
57
60
|
generate_asserts_hash(source, source_expr)
|
58
61
|
return self
|
@@ -111,7 +114,7 @@ module AssertGenerator
|
|
111
114
|
accessor = make_accessor.call(*accessor_params)
|
112
115
|
|
113
116
|
if drillable_object(v)
|
114
|
-
return generate_asserts(v, accessor,
|
117
|
+
return generate_asserts(v, accessor, relative_dates, numeric_precision, nil)
|
115
118
|
end
|
116
119
|
|
117
120
|
if v.nil?
|
@@ -121,10 +124,12 @@ module AssertGenerator
|
|
121
124
|
elsif v.is_a?(false.class)
|
122
125
|
out "refute #{accessor}"
|
123
126
|
|
124
|
-
elsif
|
127
|
+
elsif is_timey?(v)
|
125
128
|
generate_date_time_assert(v, accessor)
|
126
129
|
elsif v.is_a?(Date)
|
127
130
|
generate_date_assert(v, accessor)
|
131
|
+
elsif v.is_a?(Float) || v.is_a?(BigDecimal)
|
132
|
+
generate_numeric_assert(v, accessor)
|
128
133
|
else
|
129
134
|
out "assert_equal #{v.inspect}, #{make_accessor.call(*accessor_params)}"
|
130
135
|
end
|
@@ -155,5 +160,22 @@ module AssertGenerator
|
|
155
160
|
out "assert_equal DateTime.new(#{v.year}, #{v.month}, #{v.day}, " \
|
156
161
|
+ "#{v.hour}, #{v.min}, #{v.sec}, '#{v.zone}'), #{accessor}"
|
157
162
|
end
|
163
|
+
|
164
|
+
def generate_numeric_assert(v, accessor)
|
165
|
+
if numeric_precision
|
166
|
+
delta = 10.0 ** -numeric_precision
|
167
|
+
assert_code = "assert_in_delta #{v.to_f.round(numeric_precision)}, #{accessor}, #{delta}"
|
168
|
+
else
|
169
|
+
assert_code = "assert_equal #{v}, #{accessor}"
|
170
|
+
end
|
171
|
+
|
172
|
+
out assert_code
|
173
|
+
end
|
174
|
+
|
175
|
+
private
|
176
|
+
|
177
|
+
def is_timey?(v)
|
178
|
+
v.is_a?(DateTime) || (defined?(ActiveSupport::TimeWithZone) && v.is_a?(ActiveSupport::TimeWithZone))
|
179
|
+
end
|
158
180
|
end
|
159
181
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Parratt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '13.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '13.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: shoulda
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.6'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: binding_of_caller
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rubocop
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|