flex_columns 1.0.4 → 1.0.5
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77ffdb1f8ef333becb22e7ee81a54d32be00e4ce
|
4
|
+
data.tar.gz: 33e7afb514f21decc7fb4711f28c908a0e7e247b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d64c5801c2d5765463776a89ff56a85a5384f69b94917a18c2e1816d3fd9853d77bf4b81bbdd62a270e36f157a9c7852f6efda7730a9f6d2225b05b4d3ec4a4
|
7
|
+
data.tar.gz: 9f32a575764ad59cd86fbe4479a7f6b59e7b5fc5f04dc0632c86d7b0b227f40d68e77c541fef9e8ec7fc1c97e25b667571009584ad1d2e22961ad2a6b5cc62db
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# `flex_columns` Changelog
|
2
2
|
|
3
|
+
## 1.0.5, 2014-04-03
|
4
|
+
|
5
|
+
* Fixed an issue where boolean fields would fail to validate if `:null => false` was passed and their value was `false`.
|
6
|
+
* Fixed an issue where integer fields would fail to validate if `nil` was allowed (that is, `:null => false` was _not_ passed) and yet `nil` was stored in them.
|
7
|
+
|
3
8
|
## 1.0.4, 2014-03-31
|
4
9
|
|
5
10
|
* Fixed an incompatibility with Rails 4.0.3 or 4.0.4 due to a change in the way ActiveRecord::Base#method missing works. The way we were handling this (by double-implementing `_flex_column_object_for` and trying to use `super` to delegate one to the other) was pretty gross, anyway; this fix is much more solid.
|
@@ -206,12 +206,12 @@ module FlexColumns
|
|
206
206
|
# Given any additional arguments after the name of the field (e.g., <tt>field :foo, :integer</tt>), apply them
|
207
207
|
# as appropriate. Currently, the only kind of accepted additional argument is a type.
|
208
208
|
def apply_additional_arguments(additional_arguments)
|
209
|
-
type = additional_arguments.shift
|
210
|
-
if type
|
209
|
+
@type = additional_arguments.shift
|
210
|
+
if @type
|
211
211
|
begin
|
212
|
-
send("apply_validations_for_#{type}")
|
212
|
+
send("apply_validations_for_#{@type}")
|
213
213
|
rescue NoMethodError => nme
|
214
|
-
raise ArgumentError, "Unknown type: #{type.inspect}"
|
214
|
+
raise ArgumentError, "Unknown type: #{@type.inspect}"
|
215
215
|
end
|
216
216
|
end
|
217
217
|
|
@@ -220,10 +220,16 @@ module FlexColumns
|
|
220
220
|
end
|
221
221
|
end
|
222
222
|
|
223
|
+
def not_nullable?
|
224
|
+
options.has_key?(:null) && (! options[:null])
|
225
|
+
end
|
226
|
+
|
223
227
|
# Apply the correct validations for a field of type :integer. (Called from #apply_additional_arguments via
|
224
228
|
# metaprogramming.)
|
225
229
|
def apply_validations_for_integer
|
226
|
-
|
230
|
+
options = { :numericality => { :only_integer => true } }
|
231
|
+
options[:allow_nil] = true unless not_nullable?
|
232
|
+
flex_column_class.validates field_name, options
|
227
233
|
end
|
228
234
|
|
229
235
|
# Apply the correct validations for a field of type :string. (Called from #apply_additional_arguments via
|
@@ -285,13 +291,19 @@ module FlexColumns
|
|
285
291
|
# Apply the correct validations for a field of type :boolean. (Called from #apply_additional_arguments via
|
286
292
|
# metaprogramming.)
|
287
293
|
def apply_validations_for_boolean
|
288
|
-
|
294
|
+
value_set = [ true, false ]
|
295
|
+
value_set << nil unless not_nullable?
|
296
|
+
flex_column_class.validates field_name, :inclusion => { :in => value_set }
|
297
|
+
end
|
298
|
+
|
299
|
+
def skip_not_nullable_validation_due_to_type?
|
300
|
+
[ :boolean ].include?(@type)
|
289
301
|
end
|
290
302
|
|
291
303
|
# Applies any validations resulting from options to this class (but not types; they're handled by
|
292
304
|
# #apply_additional_arguments, above). Currently, this applies validations for +:null+, +:enum+, and +:limit+.
|
293
305
|
def apply_validations!
|
294
|
-
if
|
306
|
+
if not_nullable? && (! skip_not_nullable_validation_due_to_type?)
|
295
307
|
flex_column_class.validates field_name, :presence => true
|
296
308
|
end
|
297
309
|
|
data/lib/flex_columns/version.rb
CHANGED
@@ -18,6 +18,7 @@ describe "FlexColumns basic operations" do
|
|
18
18
|
def should_fail_validation(field, value, pattern = nil)
|
19
19
|
object = ::User.new
|
20
20
|
object.some_integer = 123
|
21
|
+
object.some_boolean_that_is_not_nullable = false
|
21
22
|
|
22
23
|
object.send("#{field}=", value)
|
23
24
|
|
@@ -46,6 +47,9 @@ describe "FlexColumns basic operations" do
|
|
46
47
|
field :some_timestamp, :timestamp
|
47
48
|
field :some_boolean, :boolean
|
48
49
|
field :some_enum, :enum => [ 'foo', 'bar', 'baz', nil ]
|
50
|
+
|
51
|
+
field :some_integer_that_is_nullable, :integer
|
52
|
+
field :some_boolean_that_is_not_nullable, :boolean, :null => false
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
@@ -60,6 +64,8 @@ describe "FlexColumns basic operations" do
|
|
60
64
|
should_fail_validation(:some_timestamp, "foo", /must be a Time/i)
|
61
65
|
should_fail_validation(:some_boolean, "true", /is not included in the list/i)
|
62
66
|
should_fail_validation(:some_enum, "quux", /is not included in the list/i)
|
67
|
+
should_fail_validation(:some_integer_that_is_nullable, "quux", /is not a number/i)
|
68
|
+
should_fail_validation(:some_boolean_that_is_not_nullable, nil, /is not included in the list/i)
|
63
69
|
|
64
70
|
user = ::User.new
|
65
71
|
user.name = 'User 1'
|
@@ -75,6 +81,7 @@ describe "FlexColumns basic operations" do
|
|
75
81
|
user.user_attributes.some_timestamp = 1.minute.from_now
|
76
82
|
user.user_attributes.some_boolean = true
|
77
83
|
user.user_attributes.some_enum = 'foo'
|
84
|
+
user.user_attributes.some_boolean_that_is_not_nullable = false
|
78
85
|
|
79
86
|
user.valid?.should be
|
80
87
|
|
@@ -89,5 +96,8 @@ describe "FlexColumns basic operations" do
|
|
89
96
|
|
90
97
|
user.user_attributes.some_string = :bonk
|
91
98
|
user.valid?.should be
|
99
|
+
|
100
|
+
user.user_attributes.some_boolean = false
|
101
|
+
user.valid?.should be
|
92
102
|
end
|
93
103
|
end
|
@@ -40,7 +40,7 @@ describe FlexColumns::Definition::FieldDefinition do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should raise an error if there are additional arguments" do
|
43
|
-
expect(@flex_column_class).to receive(:validates).once.with(:foo, { :numericality => { :only_integer => true }})
|
43
|
+
expect(@flex_column_class).to receive(:validates).once.with(:foo, { :numericality => { :only_integer => true }, :allow_nil => true})
|
44
44
|
lambda { klass.new(@flex_column_class, :foo, [ :integer, :bar ], { }) }.should raise_error(ArgumentError)
|
45
45
|
end
|
46
46
|
|
@@ -70,7 +70,7 @@ describe FlexColumns::Definition::FieldDefinition do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should validate integers properly" do
|
73
|
-
expect_validation(:integer, { :numericality => { :only_integer => true } })
|
73
|
+
expect_validation(:integer, { :numericality => { :only_integer => true }, :allow_nil => true })
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should validate floats properly" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flex_columns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Geweke
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-04-04 00:00:00 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|