Sha256: 8dafb493f9c50b7f976a94a8322d7e53c2c6f38f0a440a0ecd5fb0fab7d068c8

Contents?: true

Size: 1.56 KB

Versions: 3

Compression:

Stored size: 1.56 KB

Contents

require 'hashie'

module Duracloud
  class AbstractEntity < Hashie::Dash

    def save
      raise Error, "Cannot save deleted #{self.class}." if deleted?
      do_save
      persisted!
      reset_properties
    end

    def delete
      raise Error, "Cannot delete, already deleted." if deleted?
      reset_properties
      do_delete
      deleted!
      freeze
    end

    def persisted?
      !!@persisted
    end

    def deleted?
      !!@deleted
    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.new
    end

    def load_properties
      do_load_properties
      persisted!
    end

    private

    def do_load_properties
      raise NotImplementedError, "Subclasses must implement `#do_load_properties` private method."
    end

    def persisted!
      @persisted = true
    end

    def deleted!
      @deleted = true
      @persisted = false
    end

    def do_delete
      raise NotImplementedError, "Subclasses must implement `do_delete`."
    end

    def do_save
      raise NotImplementedError, "Subclasses must implement `do_save`."
    end

    def properties=(props)
      @properties = Properties.new(props)
    end

    def reset_properties
      @properties = nil
    end

    def properties_class
      Properties
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
duracloud-client-0.10.2 lib/duracloud/abstract_entity.rb
duracloud-client-0.10.1 lib/duracloud/abstract_entity.rb
duracloud-client-0.10.0 lib/duracloud/abstract_entity.rb