Class: NinjaModel::Adapters::AdapterPool

Inherits:
Object
  • Object
show all
Defined in:
lib/ninja_model/adapters/adapter_pool.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(spec) ⇒ AdapterPool

Returns a new instance of AdapterPool.



8
9
10
11
12
13
14
15
16
17
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 8

def initialize(spec)
  @spec = spec
  @instances = []
  @checked_out_instances = []
  @assigned_instances = {}
  @instance_mutex = Monitor.new
  @instance_queue = @instance_mutex.new_cond
  @max_size = 5
  @timeout = 3
end

Instance Attribute Details

#instancesObject (readonly)

Returns the value of attribute instances.



7
8
9
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 7

def instances
  @instances
end

#specObject (readonly)

Returns the value of attribute spec.



7
8
9
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 7

def spec
  @spec
end

Instance Method Details

#connected?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 19

def connected?
  !@instances.empty?
end

#instanceObject



23
24
25
26
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 23

def instance
  NinjaModel.logger.debug("instance called for #{current_instance_id}")
  @assigned_instances[current_instance_id] ||= checkout
end

#release_instance(with_id = current_instance_id) ⇒ Object



28
29
30
31
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 28

def release_instance(with_id = current_instance_id)
  inst = @assigned_instances.delete(with_id)
  checkin inst if inst
end

#shutdown!Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 41

def shutdown!
  @assigned_instances.each do |name,conn|
    checkin conn
  end
  @assigned_instances = {}
  @instances.each do |inst|
    inst.disconnect!
  end
  @instances = []
end

#with_instanceObject



33
34
35
36
37
38
39
# File 'lib/ninja_model/adapters/adapter_pool.rb', line 33

def with_instance
  instance_id = current_instance_id
  fresh_instance = true unless @assigned_instances[instance_id]
  yield instance
ensure
  release_instance(instance_id) if fresh_instance
end