aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/session.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel/session.rb')
-rw-r--r--lib/arel/session.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/arel/session.rb b/lib/arel/session.rb
new file mode 100644
index 0000000000..921ad0a7ac
--- /dev/null
+++ b/lib/arel/session.rb
@@ -0,0 +1,48 @@
+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
+ end
+
+ def read(select)
+ (@read ||= Hash.new do |hash, select|
+ hash[select] = select.call
+ end)[select]
+ end
+
+ def update(update)
+ update.call
+ update
+ end
+
+ def delete(delete)
+ delete.call
+ delete
+ end
+ end
+ include CRUD
+ end
+end