Sha256: 50f86f55083ca4609ffa1a88e5cb70547427fb9816014a28caf8b2e97260d99b

Contents?: true

Size: 1.27 KB

Versions: 8

Compression:

Stored size: 1.27 KB

Contents

module Duracloud
  module HasProperties

    def self.included(base)
      base.class_eval do
        include Persistence

        before_delete :reset_properties
        after_save :reset_properties
      end
    end

    # Return the properties associated with this resource,
    #   loading from Duracloud if necessary.
    # @return [Duracloud::Properties] the properties
    # @raise [Duracloud::NotFoundError] if the resource is marked persisted
    #   but does not exist in Duracloud
    def properties
      load_properties if persisted? && @properties.nil?
      @properties ||= properties_class.new
    end

    # @api private
    # @raise [Duracloud::NotFoundError] the resource does not exist in DuraCloud.
    def load_properties
      response = get_properties_response
      self.properties = response.headers
      yield response if block_given?
      persisted!
    end

    private

    def properties=(props)
      filtered = props ? properties_class.filter(props) : props
      @properties = properties_class.new(filtered)
    end

    def reset_properties
      @properties = nil
    end

    def properties_class
      Properties
    end

    def get_properties_response
      raise NotImplementedError, "Class must implement `get_properties_response`."
    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
duracloud-client-0.3.0 lib/duracloud/has_properties.rb
duracloud-client-0.2.0 lib/duracloud/has_properties.rb
duracloud-client-0.1.5 lib/duracloud/has_properties.rb
duracloud-client-0.1.4 lib/duracloud/has_properties.rb
duracloud-client-0.1.3 lib/duracloud/has_properties.rb
duracloud-client-0.1.2 lib/duracloud/has_properties.rb
duracloud-client-0.1.1 lib/duracloud/has_properties.rb
duracloud-client-0.1.0 lib/duracloud/has_properties.rb