simple_enum 1.6.4 → 1.6.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 +7 -0
- data/Gemfile.lock +1 -1
- data/lib/simple_enum/validation.rb +49 -31
- data/lib/simple_enum/version.rb +1 -1
- data/lib/simple_enum.rb +4 -6
- data/test/simple_enum_test.rb +19 -0
- metadata +26 -71
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA512:
|
3
|
+
metadata.gz: 891cf333ea0c52d94a7a8d40a2a861f3197ffa23c1f74cc0b127ef136e6df86f1f66d7db8fa94ce88669954a5eb6c551957a2c1c69c17aadf2b608f728104120
|
4
|
+
data.tar.gz: 6ac9b3af113c20669f840f748303a36182e25f94bd41565b13dda5fe3d70aeecd86b215393ad0ca36c6500963ed95e08e32a80453907501f33b4166549db6a66
|
5
|
+
SHA1:
|
6
|
+
metadata.gz: bd0a0e232a1fc335dff5f5f94c6ec8bf91c9d993
|
7
|
+
data.tar.gz: c6b7b1bdeb9bfee01cef4fc85f34172465528178
|
data/Gemfile.lock
CHANGED
@@ -1,38 +1,56 @@
|
|
1
|
-
module
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
# Model:
|
6
|
-
# class User < ActiveRecord::Base
|
7
|
-
# as_enum :gender, [ :male, :female ]
|
8
|
-
# validates_as_enum :gender
|
9
|
-
# end
|
10
|
-
#
|
11
|
-
# View:
|
12
|
-
# <%= select(:user, :gender, User.genders.keys) %>
|
13
|
-
#
|
14
|
-
# Configuration options:
|
15
|
-
# * <tt>:message</tt> - A custom error message (default: is <tt>[:activerecord, :errors, :messages, :invalid_enum]</tt>).
|
16
|
-
# * <tt>:on</tt> - Specifies when this validation is active (default is always, other options <tt>:create</tt>, <tt>:update</tt>).
|
17
|
-
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
|
18
|
-
# occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
|
19
|
-
# method, proc or string should return or evaluate to a true or false value.
|
20
|
-
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
|
21
|
-
# not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
|
22
|
-
# method, proc or string should return or evaluate to a true or false value.
|
23
|
-
def validates_as_enum(*attr_names)
|
24
|
-
configuration = attr_names.extract_options!
|
1
|
+
module ActiveModel
|
2
|
+
module Validations
|
3
|
+
class AsEnumValidator < ActiveModel::Validator
|
4
|
+
attr_reader :attributes
|
25
5
|
|
26
|
-
|
6
|
+
def initialize(options)
|
7
|
+
@attributes = Array.wrap(options.delete(:attributes))
|
8
|
+
raise ":attributes cannot be blank" if @attributes.empty?
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def setup(klass)
|
13
|
+
@klass = klass
|
14
|
+
end
|
15
|
+
|
16
|
+
def validate(record)
|
17
|
+
attributes.each do |attribute|
|
18
|
+
enum_def = @klass.enum_definitions[attribute]
|
19
|
+
raw_value = record.send(enum_def[:column])
|
27
20
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
record.errors.add(enum_def[:name], :invalid_enum, params)
|
21
|
+
next if (raw_value.nil? && options[:allow_nil]) || (raw_value.blank? && options[:allow_blank])
|
22
|
+
|
23
|
+
unless @klass.send(enum_def[:name].to_s.pluralize).values.include?(raw_value)
|
24
|
+
record.errors.add(attribute, :invalid_enum, options)
|
25
|
+
end
|
34
26
|
end
|
35
27
|
end
|
36
28
|
end
|
29
|
+
|
30
|
+
module HelperMethods
|
31
|
+
# Validates an +as_enum+ field based on the value of it's column.
|
32
|
+
#
|
33
|
+
# Model:
|
34
|
+
# class User < ActiveRecord::Base
|
35
|
+
# as_enum :gender, [ :male, :female ]
|
36
|
+
# validates_as_enum :gender
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# View:
|
40
|
+
# <%= select(:user, :gender, User.genders.keys) %>
|
41
|
+
#
|
42
|
+
# Configuration options:
|
43
|
+
# * <tt>:message</tt> - A custom error message (default: is <tt>[:activerecord, :errors, :messages, :invalid_enum]</tt>).
|
44
|
+
# * <tt>:on</tt> - Specifies when this validation is active (default is always, other options <tt>:create</tt>, <tt>:update</tt>).
|
45
|
+
# * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the validation should
|
46
|
+
# occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>). The
|
47
|
+
# method, proc or string should return or evaluate to a true or false value.
|
48
|
+
# * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the validation should
|
49
|
+
# not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>). The
|
50
|
+
# method, proc or string should return or evaluate to a true or false value.
|
51
|
+
def validates_as_enum(*attr_names)
|
52
|
+
validates_with AsEnumValidator, _merge_attributes(attr_names)
|
53
|
+
end
|
54
|
+
end
|
37
55
|
end
|
38
56
|
end
|
data/lib/simple_enum/version.rb
CHANGED
data/lib/simple_enum.rb
CHANGED
@@ -176,7 +176,7 @@ module SimpleEnum
|
|
176
176
|
|
177
177
|
# generate getter
|
178
178
|
define_method("#{enum_cd}") do
|
179
|
-
id =
|
179
|
+
id = send(options[:column])
|
180
180
|
values_inverted[id]
|
181
181
|
end
|
182
182
|
|
@@ -185,7 +185,7 @@ module SimpleEnum
|
|
185
185
|
real = new_value.blank? ? nil : values[EnumHash.symbolize(new_value)]
|
186
186
|
real = new_value if real.nil? && values_inverted[new_value].present?
|
187
187
|
raise(ArgumentError, "Invalid enumeration value: #{new_value}") if (options[:whiny] and real.nil? and !new_value.blank?)
|
188
|
-
|
188
|
+
send("#{options[:column]}=", real)
|
189
189
|
end
|
190
190
|
|
191
191
|
# generate checker
|
@@ -244,11 +244,11 @@ module SimpleEnum
|
|
244
244
|
sym = EnumHash.symbolize(k)
|
245
245
|
|
246
246
|
define_method("#{prefix}#{sym}?") do
|
247
|
-
current =
|
247
|
+
current = send(options[:column])
|
248
248
|
code == current
|
249
249
|
end
|
250
250
|
define_method("#{prefix}#{sym}!") do
|
251
|
-
|
251
|
+
send("#{options[:column]}=", code)
|
252
252
|
sym
|
253
253
|
end
|
254
254
|
|
@@ -260,8 +260,6 @@ module SimpleEnum
|
|
260
260
|
end
|
261
261
|
end
|
262
262
|
|
263
|
-
include Validation
|
264
|
-
|
265
263
|
def human_enum_name(enum, key, options = {})
|
266
264
|
defaults = lookup_ancestors.map do |klass|
|
267
265
|
:"#{self.i18n_scope}.enums.#{klass.model_name.i18n_key}.#{enum}.#{key}"
|
data/test/simple_enum_test.rb
CHANGED
@@ -202,6 +202,25 @@ class SimpleEnumTest < MiniTest::Unit::TestCase
|
|
202
202
|
assert_equal "invalid manufacturer", computer.errors[:manufacturer].first
|
203
203
|
end
|
204
204
|
|
205
|
+
def test_validator
|
206
|
+
validator_comp = extend_computer do
|
207
|
+
validates :manufacturer, :operating_system, :as_enum => true
|
208
|
+
end
|
209
|
+
|
210
|
+
computer = validator_comp.new
|
211
|
+
assert !computer.save, "save should return false"
|
212
|
+
assert_equal(1, computer.errors[:manufacturer].size)
|
213
|
+
assert_equal(1, computer.errors[:operating_system].size)
|
214
|
+
|
215
|
+
computer.manufacturer_cd = 84321483219
|
216
|
+
assert !computer.save, "save should return false"
|
217
|
+
assert_equal(1, computer.errors[:manufacturer].size)
|
218
|
+
|
219
|
+
computer.manufacturer_cd = 0
|
220
|
+
computer.operating_system_cd = 0
|
221
|
+
assert_equal(true, computer.save)
|
222
|
+
end
|
223
|
+
|
205
224
|
def test_that_argumenterror_is_raised_if_invalid_symbol_is_passed
|
206
225
|
assert_raises ArgumentError do
|
207
226
|
Dummy.new :gender => :foo
|
metadata
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 6
|
9
|
-
- 4
|
10
|
-
version: 1.6.4
|
4
|
+
version: 1.6.5
|
11
5
|
platform: ruby
|
12
6
|
authors:
|
13
7
|
- Lukas Westermann
|
@@ -15,87 +9,58 @@ autorequire:
|
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
11
|
|
18
|
-
date:
|
12
|
+
date: 2013-05-27 00:00:00 Z
|
19
13
|
dependencies:
|
20
14
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
none: false
|
15
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
16
|
requirements:
|
24
17
|
- - ">="
|
25
18
|
- !ruby/object:Gem::Version
|
26
|
-
hash: 7
|
27
|
-
segments:
|
28
|
-
- 3
|
29
|
-
- 0
|
30
|
-
- 0
|
31
19
|
version: 3.0.0
|
32
|
-
prerelease: false
|
33
|
-
type: :runtime
|
34
20
|
name: activesupport
|
35
|
-
|
21
|
+
type: :runtime
|
22
|
+
requirement: *id001
|
23
|
+
prerelease: false
|
36
24
|
- !ruby/object:Gem::Dependency
|
37
|
-
|
38
|
-
none: false
|
25
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
26
|
requirements:
|
40
27
|
- - ">="
|
41
28
|
- !ruby/object:Gem::Version
|
42
|
-
hash: 63
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 9
|
46
|
-
- 2
|
47
29
|
version: 0.9.2
|
48
|
-
prerelease: false
|
49
|
-
type: :development
|
50
30
|
name: rake
|
51
|
-
|
31
|
+
type: :development
|
32
|
+
requirement: *id002
|
33
|
+
prerelease: false
|
52
34
|
- !ruby/object:Gem::Dependency
|
53
|
-
|
54
|
-
none: false
|
35
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
36
|
requirements:
|
56
37
|
- - ">="
|
57
38
|
- !ruby/object:Gem::Version
|
58
|
-
hash: 3
|
59
|
-
segments:
|
60
|
-
- 2
|
61
|
-
- 3
|
62
|
-
- 0
|
63
39
|
version: 2.3.0
|
64
|
-
prerelease: false
|
65
|
-
type: :development
|
66
40
|
name: minitest
|
67
|
-
|
41
|
+
type: :development
|
42
|
+
requirement: *id003
|
43
|
+
prerelease: false
|
68
44
|
- !ruby/object:Gem::Dependency
|
69
|
-
|
70
|
-
none: false
|
45
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
71
46
|
requirements:
|
72
47
|
- - ">="
|
73
48
|
- !ruby/object:Gem::Version
|
74
|
-
hash: 7
|
75
|
-
segments:
|
76
|
-
- 3
|
77
|
-
- 0
|
78
|
-
- 0
|
79
49
|
version: 3.0.0
|
80
|
-
prerelease: false
|
81
|
-
type: :development
|
82
50
|
name: activerecord
|
83
|
-
|
51
|
+
type: :development
|
52
|
+
requirement: *id004
|
53
|
+
prerelease: false
|
84
54
|
- !ruby/object:Gem::Dependency
|
85
|
-
|
86
|
-
none: false
|
55
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
87
56
|
requirements:
|
88
57
|
- - ~>
|
89
58
|
- !ruby/object:Gem::Version
|
90
|
-
hash: 3
|
91
|
-
segments:
|
92
|
-
- 2
|
93
|
-
- 0
|
94
59
|
version: "2.0"
|
95
|
-
prerelease: false
|
96
|
-
type: :development
|
97
60
|
name: mongoid
|
98
|
-
|
61
|
+
type: :development
|
62
|
+
requirement: *id005
|
63
|
+
prerelease: false
|
99
64
|
description: Provides enum-like fields for ActiveRecord, ActiveModel and Mongoid models.
|
100
65
|
email:
|
101
66
|
- lukas.westermann@gmail.com
|
@@ -139,39 +104,29 @@ files:
|
|
139
104
|
homepage: http://lwe.github.com/simple_enum/
|
140
105
|
licenses:
|
141
106
|
- MIT
|
107
|
+
metadata: {}
|
108
|
+
|
142
109
|
post_install_message:
|
143
110
|
rdoc_options: []
|
144
111
|
|
145
112
|
require_paths:
|
146
113
|
- lib
|
147
114
|
required_ruby_version: !ruby/object:Gem::Requirement
|
148
|
-
none: false
|
149
115
|
requirements:
|
150
116
|
- - ">="
|
151
117
|
- !ruby/object:Gem::Version
|
152
|
-
hash: 57
|
153
|
-
segments:
|
154
|
-
- 1
|
155
|
-
- 8
|
156
|
-
- 7
|
157
118
|
version: 1.8.7
|
158
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
-
none: false
|
160
120
|
requirements:
|
161
121
|
- - ">="
|
162
122
|
- !ruby/object:Gem::Version
|
163
|
-
hash: 23
|
164
|
-
segments:
|
165
|
-
- 1
|
166
|
-
- 3
|
167
|
-
- 6
|
168
123
|
version: 1.3.6
|
169
124
|
requirements: []
|
170
125
|
|
171
126
|
rubyforge_project:
|
172
|
-
rubygems_version:
|
127
|
+
rubygems_version: 2.0.2
|
173
128
|
signing_key:
|
174
|
-
specification_version:
|
129
|
+
specification_version: 4
|
175
130
|
summary: Simple enum-like field support for models.
|
176
131
|
test_files:
|
177
132
|
- test/array_conversions_test.rb
|