module MSS::Core::Cacheable

@api private

Public Class Methods

included(base) click to toggle source
# File lib/mss/core/cacheable.rb, line 22
def self.included base
  base.extend Naming unless base.respond_to?(:service_ruby_name)
end

Public Instance Methods

retrieve_attribute(attr) { || ... } click to toggle source

@api private

# File lib/mss/core/cacheable.rb, line 45
def retrieve_attribute attr, &block

  if cache = MSS.response_cache

    if cache.resource_cache.cached?(cache_key, attr.name)
      return cache.resource_cache.get(cache_key, attr.name)
    end

    cache.select(*attr.request_types).each do |response|
      if attributes = attributes_from_response(response)
        cache.resource_cache.store(cache_key, attributes)
        return attributes[attr.name] if attributes.key?(attr.name)
      end
    end

  end

  response = yield

  if attributes = attributes_from_response(response)
    if cache = MSS.response_cache
      cache.resource_cache.store(cache_key, attributes)
    end
    attributes[attr.name] if attributes.key?(attr.name)
  else
    raise NoData.new("no data in #{response.request_type} response")
  end
end

Protected Instance Methods

cache_key() click to toggle source

@api private

# File lib/mss/core/cacheable.rb, line 34
def cache_key
  @cache_key ||= begin
    config.credential_provider.access_key_id + ":" +
      config.region + ":" +
      self.class.name + ":" +
      local_cache_key
  end
end
local_cache_key() click to toggle source

@api private

# File lib/mss/core/cacheable.rb, line 28
def local_cache_key
  raise NotImplementedError
end