aboutsummaryrefslogblamecommitdiffstats
path: root/lib/arel/session.rb
blob: 622ca090f89ccece638f716d7b3873485da548ee (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
           
               


                      
 




                       
       
 
               
                        
                   
         
 
                      



                                           
         
 
                        
                   
         
 
                        
                   


                
     
   
module Arel
  class Session
    def self.instance
      @instance || new
    end

    def self.start
      @instance ||= new
      yield @instance
    ensure
      @instance = nil
    end

    module CRUD
      def create(insert)
        insert.call
      end

      def read(select)
        @read ||= {}
        key = select.object_id
        return @read[key] if @read.key? key
        @read[key] = select.call
      end

      def update(update)
        update.call
      end

      def delete(delete)
        delete.call
      end
    end
    include CRUD
  end
end