aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/sessions/session.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel/sessions/session.rb')
-rw-r--r--lib/arel/sessions/session.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/arel/sessions/session.rb b/lib/arel/sessions/session.rb
new file mode 100644
index 0000000000..becf23b8b6
--- /dev/null
+++ b/lib/arel/sessions/session.rb
@@ -0,0 +1,56 @@
+require 'singleton'
+
+module Arel
+ class Session
+ class << self
+ attr_accessor :instance
+ alias_method :manufacture, :new
+
+ def start
+ if @started
+ yield
+ else
+ begin
+ @started = true
+ @instance = manufacture
+ metaclass.send :alias_method, :new, :instance
+ yield
+ ensure
+ metaclass.send :alias_method, :new, :manufacture
+ @started = false
+ end
+ end
+ end
+ end
+
+ module CRUD
+ def create(insert)
+ insert.call(insert.engine.connection)
+ end
+
+ def read(select)
+ @read ||= Hash.new do |hash, select|
+ hash[select] = select.call(select.engine.connection)
+ end
+ @read[select]
+ end
+
+ def update(update)
+ update.call(update.engine.connection)
+ end
+
+ def delete(delete)
+ delete.call(delete.engine.connection)
+ end
+ end
+ include CRUD
+
+ module Transactions
+ end
+ include Transactions
+
+ module UnitOfWork
+ end
+ include UnitOfWork
+ end
+end \ No newline at end of file