rspec-be_valid_when_matcher 0.1.2 → 0.1.3

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
  SHA1:
3
- metadata.gz: daaf9a8e2a9e2980705757223f7074e1e809b339
4
- data.tar.gz: 9a0de5b1ca937079b3b30f0597e470de8c2a6b78
3
+ metadata.gz: ab47d9add56592d481664f6e96727661aa0a4527
4
+ data.tar.gz: b6bd06a6c889d7c0fb65446dbad909ed97acede9
5
5
  SHA512:
6
- metadata.gz: 85fa1f8a87ec1afcc5049621596db2f3855861a45a92a3f7553fea2405746d7c40780fbfa85e255af71a6044c1ed9084bf506b692e2dcf89e2be06a8d9465243
7
- data.tar.gz: dcffd949fdd5edd0ba4a19902e254102cc0cccb4840e62d32ce6f98add4fd8ab7d2b8fd1a37cfed369e6119f82da2fb53d593270343cdcdc894c834c5009f9fe
6
+ metadata.gz: 4201ba70381cf1f992d01e518c0155f5cc009f54bca1ff6ab1a8c1475fec1daaa55c534a1163e782763df39d24519649a65dfba5c6d0493cb11343cfbe9e14a3
7
+ data.tar.gz: 6a761ae1d4e7facb22d59b339efaa48d48614edbdf6f76ea9bf6961ab26f86e51da2091517d0fd714f22f2dd287a01b214b530854298ceabf42389473e8b043a
data/README.md CHANGED
@@ -90,6 +90,9 @@ Test field validity with specific type values:
90
90
  be_valid_when(:field).is_number 2 # Defaults to 42
91
91
  be_valid_when(:field).is_fixnum 2 # Defaults to 42
92
92
  be_valid_when(:field).is_bignum 1024**32 # Defaults to 42**13
93
+ be_valid_when(:field).is_float 0.1 # Defaults to 3.14
94
+ be_valid_when(:field).is_complex 2.to_c # Defaults to 42+0i
95
+ be_valid_when(:field).is_rational 2.to_r # Defaults to 42/1
93
96
  ```
94
97
 
95
98
  ## MIT Licensed
@@ -124,25 +124,18 @@ module RSpec
124
124
  is(nil, 'not present')
125
125
  end
126
126
 
127
- # Used to setup matcher for checking for numeric values.
128
- def is_number(number = 42)
129
- fail ArgumentError, 'should be number' unless number.is_a? Numeric
130
-
131
- is(number, 'number')
132
- end
133
-
134
- # Used to setup matcher for checking for fixnum values.
135
- def is_fixnum(number = 42)
136
- fail ArgumentError, 'should be a fixnum' unless number.is_a? Fixnum
137
-
138
- is(number, 'a fixnum')
139
- end
140
-
141
- # Used to setup matcher for checking for bignum values.
142
- def is_bignum(number = 42**13)
143
- fail ArgumentError, 'should be a bignum' unless number.is_a? Bignum
144
-
145
- is(number, 'a bignum')
127
+ # Generate #is_* numeric methods.
128
+ { number: { value: 42, type: Numeric },
129
+ fixnum: { value: 42, type: Fixnum },
130
+ bignum: { value: 42**13, type: Bignum },
131
+ float: { value: Math::PI, type: Float },
132
+ complex: { value: 42.to_c, type: Complex },
133
+ rational: { value: 42.to_r, type: Rational } }.each do |name, properties|
134
+ define_method "is_#{name}" do |number = properties[:value]|
135
+ fail ArgumentError, "should be #{name}" unless number.is_a? properties[:type]
136
+
137
+ is(number, "a #{name}")
138
+ end
146
139
  end
147
140
 
148
141
  private
@@ -171,10 +164,18 @@ module RSpec
171
164
  end
172
165
 
173
166
  def format_message
174
- value = @value.inspect
167
+ value = value_to_string
175
168
  message = @message.nil? ? "is #{value}" : "is #{@message} (#{value})"
176
169
  "##{@field} #{message}"
177
170
  end
171
+
172
+ def value_to_string
173
+ if [Complex, Rational].any? { |type| @value.is_a? type }
174
+ @value.to_s
175
+ else
176
+ @value.inspect
177
+ end
178
+ end
178
179
  end
179
180
 
180
181
  # Model validity assertion.
data/spec/examples.cache CHANGED
@@ -1,59 +1,74 @@
1
1
  example_id | status | run_time |
2
2
  ------------------------------------------------------ | ------ | --------------- |
3
- ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:1:1] | passed | 0.00026 seconds |
4
- ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:1:2] | passed | 0.0123 seconds |
5
- ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:2:1] | passed | 0.00012 seconds |
6
- ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:2:2] | passed | 0.01276 seconds |
7
- ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:2:3] | passed | 0.00017 seconds |
8
- ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:1:1] | passed | 0.0005 seconds |
9
- ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:1:2] | passed | 0.06739 seconds |
10
- ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:2:1] | passed | 0.00014 seconds |
11
- ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:2:2] | passed | 0.0176 seconds |
12
- ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:2:3] | passed | 0.00139 seconds |
13
- ./spec/rspec/be_valid_when/is_not_present_spec.rb[1:1] | passed | 0.00011 seconds |
14
- ./spec/rspec/be_valid_when/is_not_present_spec.rb[1:2] | passed | 0.01358 seconds |
15
- ./spec/rspec/be_valid_when/is_number_spec.rb[1:1:1] | passed | 0.00013 seconds |
16
- ./spec/rspec/be_valid_when/is_number_spec.rb[1:1:2] | passed | 0.01096 seconds |
3
+ ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:1:1] | passed | 0.0002 seconds |
4
+ ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:1:2] | passed | 0.01275 seconds |
5
+ ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:2:1] | passed | 0.00014 seconds |
6
+ ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:2:2] | passed | 0.01394 seconds |
7
+ ./spec/rspec/be_valid_when/is_bignum_spec.rb[1:2:3] | passed | 0.00021 seconds |
8
+ ./spec/rspec/be_valid_when/is_complex_spec.rb[1:1:1] | passed | 0.00047 seconds |
9
+ ./spec/rspec/be_valid_when/is_complex_spec.rb[1:1:2] | passed | 0.05202 seconds |
10
+ ./spec/rspec/be_valid_when/is_complex_spec.rb[1:2:1] | passed | 0.00014 seconds |
11
+ ./spec/rspec/be_valid_when/is_complex_spec.rb[1:2:2] | passed | 0.01636 seconds |
12
+ ./spec/rspec/be_valid_when/is_complex_spec.rb[1:2:3] | passed | 0.00144 seconds |
13
+ ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:1:1] | passed | 0.00013 seconds |
14
+ ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:1:2] | passed | 0.01288 seconds |
15
+ ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:2:1] | passed | 0.00012 seconds |
16
+ ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:2:2] | passed | 0.01389 seconds |
17
+ ./spec/rspec/be_valid_when/is_fixnum_spec.rb[1:2:3] | passed | 0.00017 seconds |
18
+ ./spec/rspec/be_valid_when/is_float_spec.rb[1:1:1] | passed | 0.00013 seconds |
19
+ ./spec/rspec/be_valid_when/is_float_spec.rb[1:1:2] | passed | 0.01217 seconds |
20
+ ./spec/rspec/be_valid_when/is_float_spec.rb[1:2:1] | passed | 0.00012 seconds |
21
+ ./spec/rspec/be_valid_when/is_float_spec.rb[1:2:2] | passed | 0.01362 seconds |
22
+ ./spec/rspec/be_valid_when/is_float_spec.rb[1:2:3] | passed | 0.00024 seconds |
23
+ ./spec/rspec/be_valid_when/is_not_present_spec.rb[1:1] | passed | 0.00015 seconds |
24
+ ./spec/rspec/be_valid_when/is_not_present_spec.rb[1:2] | passed | 0.01367 seconds |
25
+ ./spec/rspec/be_valid_when/is_number_spec.rb[1:1:1] | passed | 0.0001 seconds |
26
+ ./spec/rspec/be_valid_when/is_number_spec.rb[1:1:2] | passed | 0.01251 seconds |
17
27
  ./spec/rspec/be_valid_when/is_number_spec.rb[1:2:1] | passed | 0.00012 seconds |
18
- ./spec/rspec/be_valid_when/is_number_spec.rb[1:2:2] | passed | 0.01177 seconds |
19
- ./spec/rspec/be_valid_when/is_number_spec.rb[1:2:3] | passed | 0.00013 seconds |
20
- ./spec/rspec/be_valid_when/is_spec.rb[1:1] | passed | 0.00015 seconds |
21
- ./spec/rspec/be_valid_when/is_spec.rb[1:2:1] | passed | 0.01055 seconds |
22
- ./spec/rspec/be_valid_when/is_spec.rb[1:3:1] | passed | 0.01142 seconds |
23
- ./spec/rspec/be_valid_when/is_spec.rb[1:3:2] | passed | 0.00298 seconds |
24
- ./spec/rspec/be_valid_when/is_spec.rb[1:4] | passed | 0.00011 seconds |
25
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:1] | passed | 0.00031 seconds |
26
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:2] | passed | 0.00008 seconds |
27
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:3] | passed | 0.00008 seconds |
28
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:4] | passed | 0.0001 seconds |
29
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:5] | passed | 0.00009 seconds |
28
+ ./spec/rspec/be_valid_when/is_number_spec.rb[1:2:2] | passed | 0.01285 seconds |
29
+ ./spec/rspec/be_valid_when/is_number_spec.rb[1:2:3] | passed | 0.00017 seconds |
30
+ ./spec/rspec/be_valid_when/is_rational_spec.rb[1:1:1] | passed | 0.00015 seconds |
31
+ ./spec/rspec/be_valid_when/is_rational_spec.rb[1:1:2] | passed | 0.01233 seconds |
32
+ ./spec/rspec/be_valid_when/is_rational_spec.rb[1:2:1] | passed | 0.00014 seconds |
33
+ ./spec/rspec/be_valid_when/is_rational_spec.rb[1:2:2] | passed | 0.01475 seconds |
34
+ ./spec/rspec/be_valid_when/is_rational_spec.rb[1:2:3] | passed | 0.00018 seconds |
35
+ ./spec/rspec/be_valid_when/is_spec.rb[1:1] | passed | 0.00011 seconds |
36
+ ./spec/rspec/be_valid_when/is_spec.rb[1:2:1] | passed | 0.01223 seconds |
37
+ ./spec/rspec/be_valid_when/is_spec.rb[1:3:1] | passed | 0.01304 seconds |
38
+ ./spec/rspec/be_valid_when/is_spec.rb[1:3:2] | passed | 0.00452 seconds |
39
+ ./spec/rspec/be_valid_when/is_spec.rb[1:4] | passed | 0.00014 seconds |
40
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:1] | passed | 0.00044 seconds |
41
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:2] | passed | 0.00011 seconds |
42
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:3] | passed | 0.00016 seconds |
43
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:4] | passed | 0.00009 seconds |
44
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:5] | passed | 0.00014 seconds |
30
45
  ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:6] | passed | 0.00067 seconds |
31
46
  ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:7] | passed | 0.00009 seconds |
32
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:8] | passed | 0.0001 seconds |
33
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:9] | passed | 0.00008 seconds |
34
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:10] | passed | 0.00011 seconds |
35
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:1] | passed | 0.00012 seconds |
36
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:2] | passed | 0.0001 seconds |
37
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:1] | passed | 0.0001 seconds |
38
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:2] | passed | 0.00011 seconds |
39
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:3] | passed | 0.0001 seconds |
40
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:4] | passed | 0.00011 seconds |
41
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:5] | passed | 0.00011 seconds |
47
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:8] | passed | 0.00008 seconds |
48
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:9] | passed | 0.00013 seconds |
49
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:1:10] | passed | 0.00007 seconds |
50
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:1] | passed | 0.00009 seconds |
51
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:2] | passed | 0.00011 seconds |
52
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:1] | passed | 0.00016 seconds |
53
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:2] | passed | 0.00014 seconds |
54
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:3] | passed | 0.00015 seconds |
55
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:4] | passed | 0.0002 seconds |
56
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:2:3:5] | passed | 0.00014 seconds |
42
57
  ./spec/rspec/be_valid_when_matcher_spec.rb[1:3:1] | passed | 0.00009 seconds |
43
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:3:2:1] | passed | 0.0028 seconds |
44
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:3:2:2] | passed | 0.00367 seconds |
45
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:4:1] | passed | 0.00012 seconds |
46
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:4:2:1] | passed | 0.00286 seconds |
47
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:4:2:2] | passed | 0.00272 seconds |
48
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:5] | passed | 0.00014 seconds |
49
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:1] | passed | 0.00014 seconds |
50
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:2] | passed | 0.00018 seconds |
51
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:3] | passed | 0.00012 seconds |
52
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:4] | passed | 0.0001 seconds |
53
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:1:1] | passed | 0.00278 seconds |
54
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:1:2] | passed | 0.00602 seconds |
55
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:2:1] | passed | 0.00285 seconds |
56
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:2:2] | passed | 0.00613 seconds |
57
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:8:1] | passed | 0.00287 seconds |
58
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:8:2:1] | passed | 0.00286 seconds |
59
- ./spec/rspec/be_valid_when_matcher_spec.rb[1:9:1] | passed | 0.00012 seconds |
58
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:3:2:1] | passed | 0.00293 seconds |
59
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:3:2:2] | passed | 0.00292 seconds |
60
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:4:1] | passed | 0.00013 seconds |
61
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:4:2:1] | passed | 0.00292 seconds |
62
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:4:2:2] | passed | 0.003 seconds |
63
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:5] | passed | 0.00012 seconds |
64
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:1] | passed | 0.00023 seconds |
65
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:2] | passed | 0.00021 seconds |
66
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:3] | passed | 0.00011 seconds |
67
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:6:4] | passed | 0.00012 seconds |
68
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:1:1] | passed | 0.00286 seconds |
69
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:1:2] | passed | 0.00627 seconds |
70
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:2:1] | passed | 0.00295 seconds |
71
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:7:2:2] | passed | 0.01202 seconds |
72
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:8:1] | passed | 0.0047 seconds |
73
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:8:2:1] | passed | 0.00394 seconds |
74
+ ./spec/rspec/be_valid_when_matcher_spec.rb[1:9:1] | passed | 0.00011 seconds |
@@ -8,7 +8,13 @@ class FakeModel
8
8
  attr_accessor :not_bignum_field
9
9
 
10
10
  validates_numericality_of :bignum_field, greater_than: 30129469486639681537
11
- validates_length_of :not_bignum_field, minimum: 31
11
+ validate :not_bignum_field_cannot_be_bignum
12
+
13
+ private
14
+
15
+ def not_bignum_field_cannot_be_bignum
16
+ errors.add(:not_bignum_field, "can't be bignum") if not_bignum_field.is_a? Bignum
17
+ end
12
18
  end
13
19
 
14
20
  describe 'be_valid_when#is_bignum' do
@@ -0,0 +1,67 @@
1
+ require 'active_model'
2
+
3
+ # @private
4
+ class FakeModel
5
+ include ActiveModel::Validations
6
+
7
+ attr_accessor :complex_field
8
+ attr_accessor :not_complex_field
9
+
10
+ validates_numericality_of :complex_field, greater_than: 41
11
+ validate :not_complex_field_cannot_be_complex
12
+
13
+ private
14
+
15
+ def not_complex_field_cannot_be_complex
16
+ errors.add(:not_complex_field, "can't be complex") if not_complex_field.is_a? Complex
17
+ end
18
+ end
19
+
20
+ describe 'be_valid_when#is_complex' do
21
+ let(:model) { FakeModel.new }
22
+
23
+ context 'with no arguments' do
24
+ let(:description) { /^be valid when #complex_field is a complex \(42\+0i\)$/ }
25
+
26
+ let(:passing_matcher) { be_valid_when(:complex_field).is_complex }
27
+ let(:failing_matcher) { be_valid_when(:not_complex_field).is_complex }
28
+
29
+ it 'has the correct description' do
30
+ expect(passing_matcher.description).to match description
31
+ end
32
+
33
+ it 'returns proper result' do
34
+ expect(passing_matcher.matches? model).to eq true
35
+ expect(passing_matcher.does_not_match? model).to eq false
36
+ expect(failing_matcher.matches? model).to eq false
37
+ expect(failing_matcher.does_not_match? model).to eq true
38
+ end
39
+ end
40
+
41
+ context 'with one argument' do
42
+ let(:description) { /^be valid when #complex_field is a complex \(50\+0i\)$/ }
43
+
44
+ let(:passing_matcher) { be_valid_when(:complex_field).is_complex 50.to_c }
45
+ let(:failing_matcher) { be_valid_when(:complex_field).is_complex 40.to_c }
46
+
47
+ it 'has the correct description' do
48
+ expect(passing_matcher.description).to match description
49
+ end
50
+
51
+ it 'returns proper result' do
52
+ expect(passing_matcher.matches? model).to eq true
53
+ expect(passing_matcher.does_not_match? model).to eq false
54
+ expect(failing_matcher.matches? model).to eq false
55
+ expect(failing_matcher.does_not_match? model).to eq true
56
+ end
57
+
58
+ it 'should fail if passed non complex' do
59
+ expect { be_valid_when(:complex_field).is_complex 'value' }.to raise_error ArgumentError
60
+ expect { be_valid_when(:complex_field).is_complex '42' }.to raise_error ArgumentError
61
+ expect { be_valid_when(:complex_field).is_complex 42 }.to raise_error ArgumentError
62
+ expect { be_valid_when(:complex_field).is_complex 42**42 }.to raise_error ArgumentError
63
+ expect { be_valid_when(:complex_field).is_complex 3.14 }.to raise_error ArgumentError
64
+ expect { be_valid_when(:complex_field).is_complex :value }.to raise_error ArgumentError
65
+ end
66
+ end
67
+ end
@@ -8,7 +8,13 @@ class FakeModel
8
8
  attr_accessor :not_fixnum_field
9
9
 
10
10
  validates_numericality_of :fixnum_field, greater_than: 40
11
- validates_length_of :not_fixnum_field, minimum: 31
11
+ validate :not_fixnum_field_cannot_be_fixnum
12
+
13
+ private
14
+
15
+ def not_fixnum_field_cannot_be_fixnum
16
+ errors.add(:not_fixnum_field, "can't be fixnum") if not_fixnum_field.is_a? Fixnum
17
+ end
12
18
  end
13
19
 
14
20
  describe 'be_valid_when#is_fixnum' do
@@ -0,0 +1,66 @@
1
+ require 'active_model'
2
+
3
+ # @private
4
+ class FakeModel
5
+ include ActiveModel::Validations
6
+
7
+ attr_accessor :float_field
8
+ attr_accessor :not_float_field
9
+
10
+ validates_numericality_of :float_field, greater_than: 3.0
11
+ validate :not_float_field_cannot_be_float
12
+
13
+ private
14
+
15
+ def not_float_field_cannot_be_float
16
+ errors.add(:not_float_field, "can't be float") if not_float_field.is_a? Float
17
+ end
18
+ end
19
+
20
+ describe 'be_valid_when#is_float' do
21
+ let(:model) { FakeModel.new }
22
+
23
+ context 'with no arguments' do
24
+ let(:description) { /^be valid when #float_field is a float \(3.141592653589793\)$/ }
25
+
26
+ let(:passing_matcher) { be_valid_when(:float_field).is_float }
27
+ let(:failing_matcher) { be_valid_when(:not_float_field).is_float }
28
+
29
+ it 'has the correct description' do
30
+ expect(passing_matcher.description).to match description
31
+ end
32
+
33
+ it 'returns proper result' do
34
+ expect(passing_matcher.matches? model).to eq true
35
+ expect(passing_matcher.does_not_match? model).to eq false
36
+ expect(failing_matcher.matches? model).to eq false
37
+ expect(failing_matcher.does_not_match? model).to eq true
38
+ end
39
+ end
40
+
41
+ context 'with one argument' do
42
+ let(:description) { /^be valid when #float_field is a float \(4.2\)$/ }
43
+
44
+ let(:passing_matcher) { be_valid_when(:float_field).is_float 4.2 }
45
+ let(:failing_matcher) { be_valid_when(:float_field).is_float 2.4 }
46
+
47
+ it 'has the correct description' do
48
+ expect(passing_matcher.description).to match description
49
+ end
50
+
51
+ it 'returns proper result' do
52
+ expect(passing_matcher.matches? model).to eq true
53
+ expect(passing_matcher.does_not_match? model).to eq false
54
+ expect(failing_matcher.matches? model).to eq false
55
+ expect(failing_matcher.does_not_match? model).to eq true
56
+ end
57
+
58
+ it 'should fail if passed non float' do
59
+ expect { be_valid_when(:float_field).is_float 'value' }.to raise_error ArgumentError
60
+ expect { be_valid_when(:float_field).is_float '42' }.to raise_error ArgumentError
61
+ expect { be_valid_when(:float_field).is_float 42 }.to raise_error ArgumentError
62
+ expect { be_valid_when(:float_field).is_float 42**42 }.to raise_error ArgumentError
63
+ expect { be_valid_when(:float_field).is_float :value }.to raise_error ArgumentError
64
+ end
65
+ end
66
+ end
@@ -15,7 +15,7 @@ describe 'be_valid_when#is_number' do
15
15
  let(:model) { FakeModel.new }
16
16
 
17
17
  context 'with no arguments' do
18
- let(:description) { /^be valid when #number_field is number \(42\)$/ }
18
+ let(:description) { /^be valid when #number_field is a number \(42\)$/ }
19
19
 
20
20
  let(:passing_matcher) { be_valid_when(:number_field).is_number }
21
21
  let(:failing_matcher) { be_valid_when(:not_number_field).is_number }
@@ -33,7 +33,7 @@ describe 'be_valid_when#is_number' do
33
33
  end
34
34
 
35
35
  context 'with one argument' do
36
- let(:description) { /^be valid when #number_field is number \(50\)$/ }
36
+ let(:description) { /^be valid when #number_field is a number \(50\)$/ }
37
37
 
38
38
  let(:passing_matcher) { be_valid_when(:number_field).is_number 50 }
39
39
  let(:failing_matcher) { be_valid_when(:number_field).is_number 30 }
@@ -0,0 +1,67 @@
1
+ require 'active_model'
2
+
3
+ # @private
4
+ class FakeModel
5
+ include ActiveModel::Validations
6
+
7
+ attr_accessor :rational_field
8
+ attr_accessor :not_rational_field
9
+
10
+ validates_numericality_of :rational_field, greater_than: 40
11
+ validate :not_rational_field_cannot_be_rational
12
+
13
+ private
14
+
15
+ def not_rational_field_cannot_be_rational
16
+ errors.add(:not_rational_field, "can't be rational") if not_rational_field.is_a? Rational
17
+ end
18
+ end
19
+
20
+ describe 'be_valid_when#is_rational' do
21
+ let(:model) { FakeModel.new }
22
+
23
+ context 'with no arguments' do
24
+ let(:description) { %r{^be valid when #rational_field is a rational \(42/1\)$} }
25
+
26
+ let(:passing_matcher) { be_valid_when(:rational_field).is_rational }
27
+ let(:failing_matcher) { be_valid_when(:not_rational_field).is_rational }
28
+
29
+ it 'has the correct description' do
30
+ expect(passing_matcher.description).to match description
31
+ end
32
+
33
+ it 'returns proper result' do
34
+ expect(passing_matcher.matches? model).to eq true
35
+ expect(passing_matcher.does_not_match? model).to eq false
36
+ expect(failing_matcher.matches? model).to eq false
37
+ expect(failing_matcher.does_not_match? model).to eq true
38
+ end
39
+ end
40
+
41
+ context 'with one argument' do
42
+ let(:description) { %r{^be valid when #rational_field is a rational \(50/1\)$} }
43
+
44
+ let(:passing_matcher) { be_valid_when(:rational_field).is_rational 50.to_r }
45
+ let(:failing_matcher) { be_valid_when(:rational_field).is_rational 30.to_r }
46
+
47
+ it 'has the correct description' do
48
+ expect(passing_matcher.description).to match description
49
+ end
50
+
51
+ it 'returns proper result' do
52
+ expect(passing_matcher.matches? model).to eq true
53
+ expect(passing_matcher.does_not_match? model).to eq false
54
+ expect(failing_matcher.matches? model).to eq false
55
+ expect(failing_matcher.does_not_match? model).to eq true
56
+ end
57
+
58
+ it 'should fail if passed non rational' do
59
+ expect { be_valid_when(:rational_field).is_rational 'value' }.to raise_error ArgumentError
60
+ expect { be_valid_when(:rational_field).is_rational '42' }.to raise_error ArgumentError
61
+ expect { be_valid_when(:rational_field).is_rational 3.14 }.to raise_error ArgumentError
62
+ expect { be_valid_when(:rational_field).is_rational 42**42 }.to raise_error ArgumentError
63
+ expect { be_valid_when(:rational_field).is_rational 42.to_c }.to raise_error ArgumentError
64
+ expect { be_valid_when(:rational_field).is_rational :value }.to raise_error ArgumentError
65
+ end
66
+ end
67
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-be_valid_when_matcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marek Tuchowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-15 00:00:00.000000000 Z
11
+ date: 2015-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -51,9 +51,12 @@ files:
51
51
  - lib/rspec/be_valid_when_matcher.rb
52
52
  - spec/examples.cache
53
53
  - spec/rspec/be_valid_when/is_bignum_spec.rb
54
+ - spec/rspec/be_valid_when/is_complex_spec.rb
54
55
  - spec/rspec/be_valid_when/is_fixnum_spec.rb
56
+ - spec/rspec/be_valid_when/is_float_spec.rb
55
57
  - spec/rspec/be_valid_when/is_not_present_spec.rb
56
58
  - spec/rspec/be_valid_when/is_number_spec.rb
59
+ - spec/rspec/be_valid_when/is_rational_spec.rb
57
60
  - spec/rspec/be_valid_when/is_spec.rb
58
61
  - spec/rspec/be_valid_when_matcher_spec.rb
59
62
  - spec/spec_helper.rb
@@ -87,9 +90,12 @@ test_files:
87
90
  - spec/spec_helper.rb
88
91
  - spec/rspec/be_valid_when_matcher_spec.rb
89
92
  - spec/rspec/be_valid_when/is_number_spec.rb
93
+ - spec/rspec/be_valid_when/is_float_spec.rb
94
+ - spec/rspec/be_valid_when/is_rational_spec.rb
90
95
  - spec/rspec/be_valid_when/is_bignum_spec.rb
91
96
  - spec/rspec/be_valid_when/is_spec.rb
92
97
  - spec/rspec/be_valid_when/is_not_present_spec.rb
93
98
  - spec/rspec/be_valid_when/is_fixnum_spec.rb
99
+ - spec/rspec/be_valid_when/is_complex_spec.rb
94
100
  - spec/examples.cache
95
101
  has_rdoc: