summaryrefslogtreecommitdiff
path: root/lib/humble/session.rb
blob: 936aa392a4299b7d35a85599d5d66ad4c481c38e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
module Humble
  class Session
    def initialize(session_factory, configuration)
      @session_factory = session_factory
      @configuration = configuration
    end

    def begin_transaction(&block)
      create_connection.transaction do
        block.call(self)
      end
    end

    def save(entity)
      mapping_for(entity).save_using(self, entity)
    end

    def find(clazz, id)
      find_all(clazz).find do |x|
        x.id == id
      end
    end

    def find_all(clazz)
      mapping_for(clazz).find_all_using(self)
    end

    def delete(entity)
      mapping_for(entity).delete_using(self, entity)
    end

    def dispose
      @connection.disconnect if @connection
      @connection = nil
    end

    def create_connection
      @connection ||= @session_factory.create_connection
    end

    private

    def mapping_for(entity)
      @configuration.mapping_for(entity)
    end
  end
end