I want to add case_sensitive option to inclusion validation. This will
allow to do:
validates :numbers, :inclusion => { :in => %(One Two), :case_sensitive
=>
false }
Does it make a sense?
Thanks.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-core/-/zDjBZYxNen0J.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to
rubyonrails-core+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en.
I''m not voting for or against it, but if this does become a feature, the option name should probably be :case_insensitive so as to match the uniqueness validation option. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-core/-/wYt8vM5e0yAJ. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
Is there a use case where you wouldn''t just do something like...
validates :numbers, inclusion: { in: [''one'',
''two''] }
def numbers
read_attribute(:numbers).try(:downcase)
end
i.e. Is there a particular reason why you still want the values to be
stored/presented with potentially different cases, but want the validation to be
case insensitive?
I couldn''t think of a lot of these use cases, so I have reservations on
putting this in core. Plus it seems quite easy to implement yourself?
Also, how do you plan to implement this? It seems like your only option is to
call .to_a on the in/within option into an Array, and then call
.map(&:downcase) on each element. This has several problems:
1. In extreme cases, this might be very inefficient. (e.g. When the input is a
large Range)
2. What if the option cannot be turned into an Array at all? I know in the docs
it says it has to be at least an Enumerable, but the code only requires the
object to respond to #include?. This wouldn''t work when I do something
like:
class SimplePasswordChecker
def include?( password )
# Check length of password
# Check against some dictionary
# Return true if the password is to simple...
end
end
validates :password, exclusion: { in: SimplePasswordChecker.new,
case_insensitive: true }, on: :create
3. What if the options in the array are not strings? Do you call .to_s and then
.downcase ?
Given the a) the use case seems quite rare, b) it''s easy to implement
yourself, c) the solution can''t be very generic/robust against all
input values, my vote is -1.
On 2012-10-01, at 10:49 PM, Nihad Abbasov wrote:
> I want to add case_sensitive option to inclusion validation. This will
allow to do:
>
> validates :numbers, :inclusion => { :in => %(One Two),
:case_sensitive => false }
>
> Does it make a sense?
>
> Thanks.
>
> --
> You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
> To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-core/-/zDjBZYxNen0J.
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> To unsubscribe from this group, send email to
rubyonrails-core+unsubscribe@googlegroups.com.
> For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to
rubyonrails-core+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-core?hl=en.
There''s also the little issue of the world not all using only English. A full Unicode-aware case insensitivity is even more inefficient than a regular ascii-only one... but in practice might be required in just as many cases as an ascii one... Dave On Tuesday, October 2, 2012 12:15:25 PM UTC-7, Godfrey Chan wrote:> > Is there a use case where you wouldn''t just do something like... > > validates :numbers, inclusion: { in: [''one'', ''two''] } > > def numbers > read_attribute(:numbers).try(:downcase) > end > > i.e. Is there a particular reason why you still want the values to be > stored/presented with potentially different cases, but want the validation > to be case insensitive? > > I couldn''t think of a lot of these use cases, so I have reservations on > putting this in core. Plus it seems quite easy to implement yourself? > > Also, how do you plan to implement this? It seems like your only option is > to call .to_a on the in/within option into an Array, and then call > .map(&:downcase) on each element. This has several problems: > > 1. In extreme cases, this might be very inefficient. (e.g. When the input > is a large Range) > > 2. What if the option cannot be turned into an Array at all? I know in the > docs it says it has to be at least an Enumerable, but the code only > requires the object to respond to #include?. This wouldn''t work when I do > something like: > > class SimplePasswordChecker > def include?( password ) > # Check length of password > # Check against some dictionary > # Return true if the password is to simple... > end > end > > validates :password, exclusion: { in: SimplePasswordChecker.new, > case_insensitive: true }, on: :create > > 3. What if the options in the array are not strings? Do you call .to_s and > then .downcase ? > > > Given the a) the use case seems quite rare, b) it''s easy to implement > yourself, c) the solution can''t be very generic/robust against all input > values, my vote is -1. > > On 2012-10-01, at 10:49 PM, Nihad Abbasov wrote: > > I want to add case_sensitive option to inclusion validation. This will > allow to do: > > validates :numbers, :inclusion => { :in => %(One Two), :case_sensitive => > false } > > Does it make a sense? > > Thanks. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Core" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/rubyonrails-core/-/zDjBZYxNen0J. > To post to this group, send email to rubyonra...@googlegroups.com<javascript:> > . > To unsubscribe from this group, send email to > rubyonrails-co...@googlegroups.com <javascript:>. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-core?hl=en. > > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-core/-/k59MIPbuZ-cJ. To post to this group, send email to rubyonrails-core@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.