diff options
-rw-r--r-- | lib/active_relation/engines/engine.rb | 14 | ||||
-rw-r--r-- | lib/active_relation/sessions/session.rb | 22 | ||||
-rw-r--r-- | spec/active_relation/unit/relations/table_spec.rb | 6 |
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 |