class Praxis::Mapper::ConnectionManager

Attributes

repositories[RW]

Public Class Methods

new() click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 45
def initialize
  @connections = {}
  @thread = Thread.current
end
repository(repository_name, **data, &block) click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 15
def self.repository(repository_name, **data, &block)
  return repositories[repository_name] if data.empty? && !block_given?

  query = data[:query] || Praxis::Mapper::Query::Sql
  factory_class = data[:factory] || ConnectionFactories::Simple

  opts = data[:opts] || {}
  if query.kind_of? String
    query = query.constantize
  end

  if factory_class.kind_of? String
    factory_class = factory_class.constantize
  end

  repositories[repository_name] = {
    query: query,
    factory: factory_class.new(**opts, &block)
  }
end
setup(&block) click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 9
def self.setup(&block)
  if block_given?
    self.instance_eval(&block)
  end
end

Public Instance Methods

checkout(name) click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 55
def checkout(name)
  connection = @connections[name]
  return connection if connection

  factory = repositories[name][:factory]
  connection = factory.checkout(self)

  @connections[name] = connection
end
release(name=nil) click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 71
def release(name=nil)
  if name
    release_one(name)
  else
    names = @connections.keys
    names.each { |n| release_one(n) }
  end
end
release_one(name) click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 65
def release_one(name)
  if (connection = @connections.delete(name))
    repositories[name][:factory].release(self, connection)
  end
end
repositories() click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 37
def repositories
  self.class.repositories
end
repository(repository_name) click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 41
def repository(repository_name)
  self.repositories[repository_name]
end
thread() click to toggle source
# File lib/praxis-mapper/connection_manager.rb, line 50
def thread
  return @thread if @thread == Thread.current
  raise 'threading violation in ConnectionManager. Calling Thread is different from Thread that owns this instance.'
end