aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation/query_attribute.rb
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2019-01-14 13:22:54 +0900
committerRyuta Kamizono <kamipo@gmail.com>2019-01-18 14:56:43 +0900
commit5b6daff5b6d5439e07c058718069f54b34970f93 (patch)
tree2056e890057bb59eeef8356eb41741037aadcfaa /activerecord/lib/active_record/relation/query_attribute.rb
parenteb63faaa1af7ef28ae1a716d068acc447e28c174 (diff)
downloadrails-5b6daff5b6d5439e07c058718069f54b34970f93.tar.gz
rails-5b6daff5b6d5439e07c058718069f54b34970f93.tar.bz2
rails-5b6daff5b6d5439e07c058718069f54b34970f93.zip
Use `unboundable?` rather than `boundable?`
The `unboundable?` behaves like the `infinite?`. ```ruby inf = Topic.predicate_builder.build_bind_attribute(:id, Float::INFINITY) inf.infinite? # => 1 oob = Topic.predicate_builder.build_bind_attribute(:id, 9999999999999999999999999999999) oob.unboundable? # => 1 inf = Topic.predicate_builder.build_bind_attribute(:id, -Float::INFINITY) inf.infinite? # => -1 oob = Topic.predicate_builder.build_bind_attribute(:id, -9999999999999999999999999999999) oob.unboundable? # => -1 ```
Diffstat (limited to 'activerecord/lib/active_record/relation/query_attribute.rb')
-rw-r--r--activerecord/lib/active_record/relation/query_attribute.rb19
1 files changed, 12 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/relation/query_attribute.rb b/activerecord/lib/active_record/relation/query_attribute.rb
index b45326bdda..5e0b4ac160 100644
--- a/activerecord/lib/active_record/relation/query_attribute.rb
+++ b/activerecord/lib/active_record/relation/query_attribute.rb
@@ -20,18 +20,23 @@ module ActiveRecord
def nil?
!value_before_type_cast.is_a?(StatementCache::Substitute) &&
(value_before_type_cast.nil? || value_for_database.nil?)
+ rescue ::RangeError
end
- def boundable?
- return @_boundable if defined?(@_boundable)
- nil?
- @_boundable = true
+ def infinite?
+ infinity?(value_before_type_cast) || infinity?(value_for_database)
rescue ::RangeError
- @_boundable = false
end
- def infinite?
- infinity?(value_before_type_cast) || boundable? && infinity?(value_for_database)
+ def unboundable?
+ if defined?(@_unboundable)
+ @_unboundable
+ else
+ value_for_database
+ @_unboundable = nil
+ end
+ rescue ::RangeError
+ @_unboundable = type.cast(value_before_type_cast) <=> 0
end
private