1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Make VALID_DIRECTIONS to Set

```ruby
require "benchmark/ips"
require "set"

array = [:asc, :desc, :ASC, :DESC, "asc", "desc", "ASC", "DESC"]
set   = array.to_set
item  = "DESC"

Benchmark.ips do |x|
  x.report "array" do
    array.include?(item)
  end
  x.report "set" do
    set.include?(item)
  end
end
```

```
% ruby array_vs_set.rb
Warming up --------------------------------------
               array   188.441k i/100ms
                 set   229.531k i/100ms
Calculating -------------------------------------
               array      3.508M (± 9.0%) i/s -     17.525M in   5.043058s
                 set      5.134M (± 7.6%) i/s -     25.707M in   5.038921s
```
This commit is contained in:
Ryuta Kamizono 2017-05-20 12:36:16 +09:00
parent c01ea3e549
commit 0d874b4a5a

View file

@ -1100,14 +1100,16 @@ module ActiveRecord
end
VALID_DIRECTIONS = [:asc, :desc, :ASC, :DESC,
"asc", "desc", "ASC", "DESC"] # :nodoc:
"asc", "desc", "ASC", "DESC"].to_set # :nodoc:
def validate_order_args(args)
args.each do |arg|
next unless arg.is_a?(Hash)
arg.each do |_key, value|
raise ArgumentError, "Direction \"#{value}\" is invalid. Valid " \
"directions are: #{VALID_DIRECTIONS.inspect}" unless VALID_DIRECTIONS.include?(value)
unless VALID_DIRECTIONS.include?(value)
raise ArgumentError,
"Direction \"#{value}\" is invalid. Valid directions are: #{VALID_DIRECTIONS.to_a.inspect}"
end
end
end
end