Class: AccessStack

Inherits:
Object
  • Object
show all
Defined in:
lib/access_stack.rb,
lib/access_stack/version.rb

Constant Summary collapse

TimeoutError =
Class.new StandardError
VERSION =
"0.0.1"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ AccessStack

Returns a new instance of AccessStack.



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/access_stack.rb', line 11

def initialize(opts={})
  @timeout = opts[:timeout] || opts["timeout"] || 5
  @size = opts[:size] || opts["size"] || 5
  @expires = opts[:expires] || opts["expires"] || -1
  @expr_hash = {}
  @stack = []
  @count = 0
  @mutex = Mutex.new
  @create = opts[:create] || opts["create"]
  @destroy = opts[:destroy] || opts["destroy"]
  @validate = opts[:validate] || opts["validate"]
end

Instance Attribute Details

#countObject (readonly)

Returns the value of attribute count.



6
7
8
# File 'lib/access_stack.rb', line 6

def count
  @count
end

#createObject

Returns the value of attribute create.



7
8
9
# File 'lib/access_stack.rb', line 7

def create
  @create
end

#destroyObject

Returns the value of attribute destroy.



7
8
9
# File 'lib/access_stack.rb', line 7

def destroy
  @destroy
end

#expiresObject

Returns the value of attribute expires.



7
8
9
# File 'lib/access_stack.rb', line 7

def expires
  @expires
end

#sizeObject

Returns the value of attribute size.



7
8
9
# File 'lib/access_stack.rb', line 7

def size
  @size
end

#timeoutObject

Returns the value of attribute timeout.



7
8
9
# File 'lib/access_stack.rb', line 7

def timeout
  @timeout
end

#validateObject

Returns the value of attribute validate.



7
8
9
# File 'lib/access_stack.rb', line 7

def validate
  @validate
end

Instance Method Details

#create_objects(num = 1) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/access_stack.rb', line 76

def create_objects(num=1)
  created_count = 0

  threadsafe do
    num.times do
      if @count < @size
        @stack.push create_obj
        @count += 1
        created_count += 1
      end
    end
  end
  
  created_count
end

#empty!Object



62
63
64
65
66
67
68
69
70
# File 'lib/access_stack.rb', line 62

def empty!
  return if @count == 0
  threadsafe do
    @stack.each(&@destroy.method(:call))
    @expr_hash.clear
    @stack.clear
    @count = 0
  end
end

#empty?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/access_stack.rb', line 92

def empty?
  @count == 0
end

#fillObject



72
73
74
# File 'lib/access_stack.rb', line 72

def fill
  create_objects @count
end

#reap!Object



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/access_stack.rb', line 50

def reap!
  return true if @count == 0
  threadsafe do
    @stack.reject(&method(:obj_valid)).each do |instance|
      @destroy.call instance
      @expr_hash.delete instance
      @stack.delete instance
      @count -= 1
    end
  end
end

#with(&block) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/access_stack.rb', line 24

def with(&block)
  begin
    obj = nil
  
    threadsafe do
      obj = @stack.pop
    end
  
    if !(obj_valid obj)
      obj = nil
      @count -= 1
    end
  
    if @count < @size && obj.nil?
      @count += 1
      obj = create_obj
    end

    return block.call obj
  ensure
    threadsafe do
      @stack.push obj
    end
  end
end