Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
35cb7722
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
35cb7722
编写于
8月 24, 2012
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #7342 from sobrinho/master
Accept a symbol for `:in` option on inclusion and exclusion validators
上级
73c02220
2f3eb484
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
64 addition
and
5 deletion
+64
-5
activemodel/CHANGELOG.md
activemodel/CHANGELOG.md
+6
-0
activemodel/lib/active_model/validations/clusivity.rb
activemodel/lib/active_model/validations/clusivity.rb
+10
-3
activemodel/lib/active_model/validations/exclusion.rb
activemodel/lib/active_model/validations/exclusion.rb
+2
-1
activemodel/lib/active_model/validations/inclusion.rb
activemodel/lib/active_model/validations/inclusion.rb
+2
-1
activemodel/test/cases/validations/exclusion_validation_test.rb
...model/test/cases/validations/exclusion_validation_test.rb
+22
-0
activemodel/test/cases/validations/inclusion_validation_test.rb
...model/test/cases/validations/inclusion_validation_test.rb
+22
-0
未找到文件。
activemodel/CHANGELOG.md
浏览文件 @
35cb7722
## Rails 4.0.0 (unreleased) ##
*
Changed inclusion and exclusion validators to accept a symbol for
`:in`
option.
This allows to use dynamic inclusion/exclusion values using methods, besides the current lambda/proc support.
*Gabriel Sobrinho*
*
`AM::Validation#validates`
ability to pass custom exception to
`:strict`
option.
*Bogdan Gusiev*
...
...
activemodel/lib/active_model/validations/clusivity.rb
浏览文件 @
35cb7722
...
...
@@ -3,11 +3,11 @@
module
ActiveModel
module
Validations
module
Clusivity
#:nodoc:
ERROR_MESSAGE
=
"An object with the method #include? or a proc
or lambda
is required, "
<<
ERROR_MESSAGE
=
"An object with the method #include? or a proc
, lambda or symbol
is required, "
<<
"and must be supplied as the :in (or :within) option of the configuration hash"
def
check_validity!
unless
[
:include?
,
:call
].
any?
{
|
method
|
delimiter
.
respond_to?
(
method
)
}
unless
delimiter
.
respond_to?
(
:include?
)
||
delimiter
.
respond_to?
(
:call
)
||
delimiter
.
respond_to?
(
:to_sym
)
raise
ArgumentError
,
ERROR_MESSAGE
end
end
...
...
@@ -15,7 +15,14 @@ def check_validity!
private
def
include?
(
record
,
value
)
exclusions
=
delimiter
.
respond_to?
(
:call
)
?
delimiter
.
call
(
record
)
:
delimiter
exclusions
=
if
delimiter
.
respond_to?
(
:call
)
delimiter
.
call
(
record
)
elsif
delimiter
.
respond_to?
(
:to_sym
)
record
.
send
(
delimiter
)
else
delimiter
end
exclusions
.
send
(
inclusion_method
(
exclusions
),
value
)
end
...
...
activemodel/lib/active_model/validations/exclusion.rb
浏览文件 @
35cb7722
...
...
@@ -24,11 +24,12 @@ module HelperMethods
# validates_exclusion_of :format, in: %w( mov avi ), message: "extension %{value} is not allowed"
# validates_exclusion_of :password, in: ->(person) { [person.username, person.first_name] },
# message: 'should not be the same as your username or first name'
# validates_exclusion_of :karma, in: :reserved_karmas
# end
#
# Configuration options:
# * <tt>:in</tt> - An enumerable object of items that the value shouldn't
# be part of. This can be supplied as a proc
or lambda
which returns an
# be part of. This can be supplied as a proc
, lambda or symbol
which returns an
# enumerable. If the enumerable is a range the test is performed with
# * <tt>:within</tt> - A synonym(or alias) for <tt>:in</tt>
# <tt>Range#cover?</tt>, otherwise with <tt>include?</tt>.
...
...
activemodel/lib/active_model/validations/inclusion.rb
浏览文件 @
35cb7722
...
...
@@ -23,11 +23,12 @@ module HelperMethods
# validates_inclusion_of :age, in: 0..99
# validates_inclusion_of :format, in: %w( jpg gif png ), message: "extension %{value} is not included in the list"
# validates_inclusion_of :states, in: ->(person) { STATES[person.country] }
# validates_inclusion_of :karma, in: :available_karmas
# end
#
# Configuration options:
# * <tt>:in</tt> - An enumerable object of available items. This can be
# supplied as a proc
or lambda
which returns an enumerable. If the
# supplied as a proc
, lambda or symbol
which returns an enumerable. If the
# enumerable is a range the test is performed with <tt>Range#cover?</tt>,
# otherwise with <tt>include?</tt>.
# * <tt>:within</tt> - A synonym(or alias) for <tt>:in</tt>
...
...
activemodel/test/cases/validations/exclusion_validation_test.rb
浏览文件 @
35cb7722
...
...
@@ -64,4 +64,26 @@ def test_validates_exclusion_of_with_lambda
t
.
title
=
"wasabi"
assert
t
.
valid?
end
def
test_validates_inclusion_of_with_symbol
Person
.
validates_exclusion_of
:karma
,
:in
=>
:reserved_karmas
p
=
Person
.
new
p
.
karma
=
"abe"
def
p
.
reserved_karmas
%w(abe)
end
assert
p
.
invalid?
assert_equal
[
"is reserved"
],
p
.
errors
[
:karma
]
def
p
.
reserved_karmas
%w()
end
assert
p
.
valid?
ensure
Person
.
reset_callbacks
(
:validate
)
end
end
activemodel/test/cases/validations/inclusion_validation_test.rb
浏览文件 @
35cb7722
...
...
@@ -96,4 +96,26 @@ def test_validates_inclusion_of_with_lambda
t
.
title
=
"elephant"
assert
t
.
valid?
end
def
test_validates_inclusion_of_with_symbol
Person
.
validates_inclusion_of
:karma
,
:in
=>
:available_karmas
p
=
Person
.
new
p
.
karma
=
"Lifo"
def
p
.
available_karmas
%w()
end
assert
p
.
invalid?
assert_equal
[
"is not included in the list"
],
p
.
errors
[
:karma
]
def
p
.
available_karmas
%w(Lifo)
end
assert
p
.
valid?
ensure
Person
.
reset_callbacks
(
:validate
)
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录