提交 5b6daff5 编写于 作者: R Ryuta Kamizono

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
```
上级 eb63faaa
......@@ -20,18 +20,23 @@ def with_cast_value(value)
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
......
......@@ -58,7 +58,7 @@ def find_finder_class_for(record)
def build_relation(klass, attribute, value)
relation = klass.unscoped
comparison = relation.bind_attribute(attribute, value) do |attr, bind|
return relation.none! unless bind.boundable?
return relation.none! if bind.unboundable?
if bind.nil?
attr.eq(bind)
......
......@@ -28,8 +28,8 @@ def infinite?
value.respond_to?(:infinite?) && value.infinite?
end
def boundable?
!value.respond_to?(:boundable?) || value.boundable?
def unboundable?
value.respond_to?(:unboundable?) && value.unboundable?
end
end
end
......
......@@ -576,7 +576,7 @@ def visit_Arel_Table(o, collector)
def visit_Arel_Nodes_In(o, collector)
if Array === o.right && !o.right.empty?
o.right.keep_if { |value| boundable?(value) }
o.right.delete_if { |value| unboundable?(value) }
end
if Array === o.right && o.right.empty?
......@@ -590,7 +590,7 @@ def visit_Arel_Nodes_In(o, collector)
def visit_Arel_Nodes_NotIn(o, collector)
if Array === o.right && !o.right.empty?
o.right.keep_if { |value| boundable?(value) }
o.right.delete_if { |value| unboundable?(value) }
end
if Array === o.right && o.right.empty?
......@@ -812,8 +812,8 @@ def inject_join(list, collector, join_str)
}
end
def boundable?(value)
!value.respond_to?(:boundable?) || value.boundable?
def unboundable?(value)
value.respond_to?(:unboundable?) && value.unboundable?
end
def has_join_sources?(o)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册