diff options
Diffstat (limited to 'lib/arel/sessions')
-rw-r--r-- | lib/arel/sessions/session.rb | 56 |
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 |