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