Module: AWS::Core::Cacheable

Included in:
Resource
Defined in:
lib/aws/core/cacheable.rb

Defined Under Namespace

Classes: NoData

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object


23
24
25
# File 'lib/aws/core/cacheable.rb', line 23

def self.included base
  base.extend Naming unless base.respond_to?(:service_ruby_name)
end

Instance Method Details

#retrieve_attribute(attr, &block) ⇒ Object


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 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