Sha256: 5b095bc92496881ca805ebd34a67e5330ba0f752d83791c47b957aa61b5f1258

Contents?: true

Size: 1.53 KB

Versions: 4

Compression:

Stored size: 1.53 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
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
percy-appium-app-0.0.4 percy/lib/cache.rb
percy-appium-app-0.0.2.pre.beta.0 percy/lib/cache.rb
percy-appium-app-0.0.3 percy/lib/cache.rb
percy-appium-app-0.0.2 percy/lib/cache.rb