Sha256: 3191ed352b6e66f19b8ede3812e5d81f610384b41bd4e9dd3f157d7007b93f9d

Contents?: true

Size: 1.61 KB

Versions: 7

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true
module Percy
  class Cache
    attr_reader :cache

    @@cache = {}
    CACHE_TIMEOUT = 5 * 60 # 5 * 60 seconds
    TIMEOUT_KEY = 'last_access_time'

    SESSION_DETAILS = 'session_details'
    SYSTEM_BARS = 'system_bars'
    WINDOW_SIZE = 'window_size'
    VIEWPORT = 'viewport'
    SESSION_CAPABILITIES = 'session_capabilities'
    CAPABILITIES = 'capabilities'
    COMMAND_EXECUTOR_URL = 'command_executor_url'

    def cache
      @@cache
    end

    def self.set_cache(session_id, property, value)
      raise TypeError, 'Argument session_id should be a String' unless session_id.is_a?(String)
      raise TypeError, 'Argument property should be a String' unless property.is_a?(String)

      session = @@cache.fetch(session_id, {})
      session[TIMEOUT_KEY] = Time.now.to_i
      session[property] = value
      @@cache[session_id] = session
    end

    def self.get_cache(session_id, property)
      cleanup_cache

      raise TypeError, 'Argument session_id should be a String' unless session_id.is_a?(String)
      raise TypeError, 'Argument property should be a String' unless property.is_a?(String)

      session = @@cache.fetch(session_id, {})
      session.fetch(property, nil)
    end

    def self.cleanup_cache
      now = Time.now.to_i
      session_ids = []

      @@cache.each do |session_id, session|
        timestamp = session[TIMEOUT_KEY]
        session_ids << session_id if now - timestamp >= CACHE_TIMEOUT
      end

      session_ids.each { |session_id| @@cache.delete(session_id) }
    end

    # Added only for tests
    def self.force_cleanup_cache
      @@cache = {}
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
percy-appium-app-1.0.0 percy/lib/cache.rb
percy-appium-app-0.0.8 percy/lib/cache.rb
percy-appium-app-0.0.7 percy/lib/cache.rb
percy-appium-app-0.0.6 percy/lib/cache.rb
percy-appium-app-0.0.5 percy/lib/cache.rb
percy-appium-app-0.0.5.pre.beta.1 percy/lib/cache.rb
percy-appium-app-0.0.5.pre.beta.0 percy/lib/cache.rb