aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/active_relation/engines/engine.rb14
-rw-r--r--lib/active_relation/sessions/session.rb22
-rw-r--r--spec/active_relation/unit/relations/table_spec.rb6
3 files changed, 31 insertions, 11 deletions
diff --git a/lib/active_relation/engines/engine.rb b/lib/active_relation/engines/engine.rb
index 36b77b886e..d5b312607e 100644
--- a/lib/active_relation/engines/engine.rb
+++ b/lib/active_relation/engines/engine.rb
@@ -1,4 +1,18 @@
module ActiveRelation
+ # this file is currently just a hack to adapt between activerecord::base which holds the connection specification
+ # and active relation. ultimately, this file should be in effect what the connection specification is in active record;
+ # that is: a spec of the database (url, password, etc.), a quoting adapter layer, and a connection pool.
class Engine
+ def initialize(ar = nil)
+ @ar = ar
+ end
+
+ def connection
+ @ar.connection
+ end
+
+ def method_missing(method, *args, &block)
+ @ar.connection.send(method, *args, &block)
+ end
end
end \ No newline at end of file
diff --git a/lib/active_relation/sessions/session.rb b/lib/active_relation/sessions/session.rb
index 0724abc5a7..4bdbe69978 100644
--- a/lib/active_relation/sessions/session.rb
+++ b/lib/active_relation/sessions/session.rb
@@ -1,24 +1,22 @@
require 'singleton'
module ActiveRelation
- class Session
+ class Session
class << self
+ attr_accessor :instance
+ alias_method :manufacture, :new
+
def start
if @started
yield
else
begin
@started = true
- @instance = new
- manufacture = method(:new)
- metaclass.class_eval do
- define_method(:new) { @instance }
- end
+ @instance = manufacture
+ metaclass.send :alias_method, :new, :instance
yield
ensure
- metaclass.class_eval do
- define_method(:new, &manufacture)
- end
+ metaclass.send :alias_method, :new, :manufacture
@started = false
end
end
@@ -31,8 +29,10 @@ module ActiveRelation
end
def read(select)
- @read ||= {}
- @read.has_key?(select) ? @read[select] : (@read[select] = select.engine.select_all(select.to_sql))
+ @read ||= Hash.new do |hash, select|
+ hash[select] = select.engine.select_all(select.to_sql)
+ end
+ @read[select]
end
def update(update)
diff --git a/spec/active_relation/unit/relations/table_spec.rb b/spec/active_relation/unit/relations/table_spec.rb
index 8f14ce33cf..95ad7133db 100644
--- a/spec/active_relation/unit/relations/table_spec.rb
+++ b/spec/active_relation/unit/relations/table_spec.rb
@@ -91,5 +91,11 @@ module ActiveRelation
Table.new(:users, engine = Engine.new).engine.should == engine
end
end
+
+ describe '#reset' do
+ it "" do
+ pending
+ end
+ end
end
end \ No newline at end of file