Class: Applitools::Selenium::ResourceCache

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeResourceCache

Returns a new instance of ResourceCache.



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

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

Instance Attribute Details

#cache_mapObject

Returns the value of attribute cache_map.



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

def cache_map
  @cache_map
end

#semaphoreObject

Returns the value of attribute semaphore.



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

def semaphore
  @semaphore
end

Instance Method Details

#[](key) ⇒ Object



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

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

#[]=(key, value) ⇒ Object



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

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)


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

def contains?(url)
  semaphore.synchronize do
    cache_map.keys.include?(url) && !cache_map[url].nil?
  end
end

#fetch_and_store(key, &block) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/applitools/selenium/visual_grid/resource_cache.rb', line 32

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