diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-01-14 13:22:54 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-01-18 14:56:43 +0900 |
commit | 5b6daff5b6d5439e07c058718069f54b34970f93 (patch) | |
tree | 2056e890057bb59eeef8356eb41741037aadcfaa /activerecord/lib/active_record/relation/query_attribute.rb | |
parent | eb63faaa1af7ef28ae1a716d068acc447e28c174 (diff) | |
download | rails-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.rb | 19 |
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 |