Class: Arachni::Support::Cache::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/arachni/support/cache/base.rb

Overview

This class is abstract.

Base cache implementation – stores, retrieves and removes entries.

The cache will be pruned (call #prune) upon storage operations, removing old entries to make room for new ones.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(max_size = nil) ⇒ Base

Returns a new instance of Base.

Parameters:

  • max_size (Integer, nil) (defaults to: nil)

    Maximum size of the cache (must be > 0, ‘nil` means unlimited). Once the size of the cache is about to exceed `max_size`, the pruning phase will be initiated.



29
30
31
32
# File 'lib/arachni/support/cache/base.rb', line 29

def initialize( max_size = nil )
    self.max_size = max_size
    @cache = {}
end

Instance Attribute Details

#max_sizeInteger

Returns Maximum cache size.

Returns:

  • (Integer)

    Maximum cache size.



23
24
25
# File 'lib/arachni/support/cache/base.rb', line 23

def max_size
  @max_size
end

Instance Method Details

#==(other) ⇒ Object



143
144
145
# File 'lib/arachni/support/cache/base.rb', line 143

def ==( other )
    hash == other.hash
end

#[](k) ⇒ Object?

Retrieving method.

Parameters:

Returns:

  • (Object, nil)

    Value for key ‘k`, `nil` if there is no key `k`.



92
93
94
# File 'lib/arachni/support/cache/base.rb', line 92

def []( k )
    @cache[make_key( k )]
end

#[]=(k, v) ⇒ Object

See Also:

  • Arachni::Support::Cache::Base.{{#store}


81
82
83
# File 'lib/arachni/support/cache/base.rb', line 81

def []=( k, v )
    store( k, v )
end

#any?Bool

Returns ‘true` if cache is not empty, `false` otherwise.

Returns:

  • (Bool)

    ‘true` if cache is not empty, `false` otherwise.



123
124
125
# File 'lib/arachni/support/cache/base.rb', line 123

def any?
    !empty?
end

#capped?Bool

Returns ‘true` is there is a size limit, `false“ otherwise.

Returns:

  • (Bool)

    ‘true` is there is a size limit, `false“ otherwise



51
52
53
# File 'lib/arachni/support/cache/base.rb', line 51

def capped?
    !!max_size
end

#clearObject

Clears/empties the cache.



139
140
141
# File 'lib/arachni/support/cache/base.rb', line 139

def clear
    @cache.clear
end

#delete(k) ⇒ Object?

Removes entry with key ‘k` from the cache.

Parameters:

Returns:

  • (Object, nil)

    Value for key ‘k`, `nil` if there is no key `k`.



134
135
136
# File 'lib/arachni/support/cache/base.rb', line 134

def delete( k )
    @cache.delete( make_key( k ) )
end

#dupObject



151
152
153
# File 'lib/arachni/support/cache/base.rb', line 151

def dup
    deep_clone
end

#empty?Bool

Returns ‘true` if cache is empty, false otherwise.

Returns:

  • (Bool)

    ‘true` if cache is empty, false otherwise.



117
118
119
# File 'lib/arachni/support/cache/base.rb', line 117

def empty?
    @cache.empty?
end

#fetch_or_store(k, &block) ⇒ Object

Note:

If key ‘k` exists, its corresponding value will be returned. If not, the return value of `block` will be assigned to key `k` and that value will be returned.

Returns Value of key ‘k` or `block.call` if key `k` does not exist.

Parameters:

Returns:

  • (Object)

    Value of key ‘k` or `block.call` if key `k` does not exist.



105
106
107
# File 'lib/arachni/support/cache/base.rb', line 105

def fetch_or_store( k, &block )
    include?( k ) ? self[k] : store( k, block.call )
end

#hashObject



147
148
149
# File 'lib/arachni/support/cache/base.rb', line 147

def hash
    @cache.hash
end

#include?(k) ⇒ Bool

Returns ‘true` if cache includes an entry for key `k`, false otherwise.

Returns:

  • (Bool)

    ‘true` if cache includes an entry for key `k`, false otherwise.



111
112
113
# File 'lib/arachni/support/cache/base.rb', line 111

def include?( k )
    @cache.include?( make_key( k ) )
end

#sizeInteger

Returns Number of entries in the cache.

Returns:

  • (Integer)

    Number of entries in the cache.



62
63
64
# File 'lib/arachni/support/cache/base.rb', line 62

def size
    @cache.size
end

#store(k, v) ⇒ Object

Storage method.

Parameters:

Returns:



74
75
76
77
78
# File 'lib/arachni/support/cache/base.rb', line 74

def store( k, v )
    prune while capped? && (size > max_size - 1)

    @cache[make_key( k )] = v
end

#uncapObject

Uncaps the cache #max_size limit



56
57
58
# File 'lib/arachni/support/cache/base.rb', line 56

def uncap
    @max_size = nil
end

#uncapped?Bool

Returns ‘true` is there is no size limit, `false` otherwise.

Returns:

  • (Bool)

    ‘true` is there is no size limit, `false` otherwise



45
46
47
# File 'lib/arachni/support/cache/base.rb', line 45

def uncapped?
    !capped?
end