module AWS::Core::Cacheable

@private

Public Class Methods

included(base) click to toggle source
# File lib/aws/core/cacheable.rb, line 23
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

@private

# File lib/aws/core/cacheable.rb, line 47
def retrieve_attribute attr, &block
  
  if cache = AWS.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 = AWS.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

@private

# File lib/aws/core/cacheable.rb, line 35
def cache_key
  @cache_key ||= begin
    endpoint_method = self.class.service_ruby_name + "_endpoint"
    config.signer.access_key_id + ":" +
      config.send(endpoint_method) + ":" +
      self.class.name + ":" +
      local_cache_key
  end
end
local_cache_key() click to toggle source

@private

# File lib/aws/core/cacheable.rb, line 29
def local_cache_key
  raise NotImplementedError
end