From 3878a115a3d53eb817c0fbab3e5ca7ec1427f0be Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Wed, 28 Jul 2010 15:58:36 -0700 Subject: refactor for faster method lookup --- lib/arel/algebra/relations/relation.rb | 26 ++++++++++++++------------ spec/algebra/unit/relations/relation_spec.rb | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/arel/algebra/relations/relation.rb b/lib/arel/algebra/relations/relation.rb index ccc1ab558f..e8ef9b395d 100644 --- a/lib/arel/algebra/relations/relation.rb +++ b/lib/arel/algebra/relations/relation.rb @@ -116,7 +116,7 @@ module Arel end %w{ - where project order skip group having + where order skip group having }.each do |operation_name| class_eval <<-OPERATION, __FILE__, __LINE__ def #{operation_name}(*arguments) @@ -126,6 +126,11 @@ module Arel OPERATION end + def project *args + return self if args.all? { |x| x.blank? } + Project.new self, *args + end + def take thing Take.new self, thing end @@ -142,20 +147,17 @@ module Arel Alias.new(self) end - module Writable - def insert(record) - session.create Insert.new(self, record) - end + def insert(record) + session.create Insert.new(self, record) + end - def update(assignments) - session.update Update.new(self, assignments) - end + def update(assignments) + session.update Update.new(self, assignments) + end - def delete - session.delete Deletion.new(self) - end + def delete + session.delete Deletion.new(self) end - include Writable JoinOperation = Struct.new(:join_class, :relation1, :relation2) do def on(*predicates) diff --git a/spec/algebra/unit/relations/relation_spec.rb b/spec/algebra/unit/relations/relation_spec.rb index 8d0639ee07..2a2fb15d89 100644 --- a/spec/algebra/unit/relations/relation_spec.rb +++ b/spec/algebra/unit/relations/relation_spec.rb @@ -159,7 +159,7 @@ module Arel end end - describe Relation::Operable::Writable do + describe 'relation is writable' do describe '#delete' do it 'manufactures a deletion relation' do Session.start do |s| -- cgit v1.2.3