Class: Applitools::Selenium::ResourceCache

Inherits:
Object
  • Object
show all
Defined in:
lib/applitools/selenium/visual_grid/resource_cache.rb

Defined Under Namespace

Classes: ResourceMissing

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeResourceCache

Returns a new instance of ResourceCache.



8
9
10
11
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 8

def initialize
  self.cache_map = {}
  self.semaphore = Mutex.new
end

Instance Attribute Details

#cache_mapObject

Returns the value of attribute cache_map.



6
7
8
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 6

def cache_map
  @cache_map
end

#semaphoreObject

Returns the value of attribute semaphore.



6
7
8
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 6

def semaphore
  @semaphore
end

Instance Method Details

#[](key) ⇒ Object

Raises:



19
20
21
22
23
24
25
26
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 19

def [](key)
  current_value = semaphore.synchronize do
    cache_map[key]
  end
  raise ResourceMissing, key if current_value.nil?
  return current_value unless current_value.is_a? Applitools::Future
  update_cache_map(key, current_value.get)
end

#[]=(key, value) ⇒ Object



28
29
30
31
32
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 28

def []=(key, value)
  Applitools::ArgumentGuard.is_a?(key, 'key', URI)
  Applitools::ArgumentGuard.one_of?(value, 'value', [Applitools::Future, Applitools::Selenium::VGResource])
  update_cache_map(key, value)
end

#contains?(url) ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
16
17
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 13

def contains?(url)
  semaphore.synchronize do
    check_key(url)
  end
end

#fetch_and_store(key, &block) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 34

def fetch_and_store(key, &block)
  semaphore.synchronize do
    return cache_map[key] if check_key(key)
    return unless block_given?
    cache_map[key] = Applitools::Future.new(semaphore) do |semaphore|
      block.call(semaphore, key)
    end
    return true if cache_map[key].is_a? Applitools::Future
    false
  end
end