Add Relation#except
This commit is contained in:
parent
22bfd8b098
commit
af5e1b4cc6
@ -1,5 +1,10 @@
|
||||
*Edge*
|
||||
|
||||
* Add Relation#except. [Pratik Naik]
|
||||
|
||||
one_red_item = Item.where(:colour => 'red').limit(1)
|
||||
all_items = one_red_item.except(:where, :limit)
|
||||
|
||||
* Add Relation#delete_all. [Pratik Naik]
|
||||
|
||||
Item.where(:colour => 'red').delete_all
|
||||
|
@ -45,5 +45,27 @@ def merge(r)
|
||||
|
||||
alias :& :merge
|
||||
|
||||
def except(*skips)
|
||||
result = Relation.new(@klass, table)
|
||||
result.table = table
|
||||
|
||||
[:eager_load, :preload, :includes].each do |load_method|
|
||||
result = result.send(load_method, send(:"#{load_method}_associations"))
|
||||
end
|
||||
|
||||
result.readonly = self.readonly unless skips.include?(:readonly)
|
||||
|
||||
result = result.joins(@relation.joins(@relation)) unless skips.include?(:joins)
|
||||
result = result.group(@relation.groupings) unless skips.include?(:group)
|
||||
result = result.limit(@relation.taken) unless skips.include?(:limit)
|
||||
result = result.offset(@relation.skipped) unless skips.include?(:offset)
|
||||
result = result.select(@relation.send(:select_clauses)) unless skips.include?(:select)
|
||||
result = result.from(@relation.sources) unless skips.include?(:from)
|
||||
result = result.order(order_clause) unless skips.include?(:order)
|
||||
result = result.where(*@relation.wheres) unless skips.include?(:where)
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
@ -539,4 +539,16 @@ def test_create_bang
|
||||
assert ! hen.new_record?
|
||||
assert_equal 'hen', hen.name
|
||||
end
|
||||
|
||||
def test_except
|
||||
relation = Post.where(:author_id => 1).order('id ASC').limit(1)
|
||||
assert_equal [posts(:welcome)], relation.all
|
||||
|
||||
author_posts = relation.except(:order, :limit)
|
||||
assert_equal Post.where(:author_id => 1).all, author_posts.all
|
||||
|
||||
all_posts = relation.except(:where, :order, :limit)
|
||||
assert_equal Post.all, all_posts.all
|
||||
end
|
||||
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user