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.