Sha256: a6a5f824fd078b29ae7135cf305d691e7a25bbb6b29654b4124a3f31fb03f350

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

module DataMapper
  module Resource

    # the state of the resource (abstract)
    class State
      attr_reader :resource

      def initialize(resource)
        @resource = resource
      end

      def get(subject, *args)
        subject.get(resource, *args)
      end

      def set(subject, value)
        subject.set(resource, value)
        self
      end

      def delete
        raise NotImplementedError, "#{self.class}#delete should be implemented"
      end

      def commit
        raise NotImplementedError, "#{self.class}#commit should be implemented"
      end

      def rollback
        raise NotImplementedError, "#{self.class}#rollback should be implemented"
      end

      def eql?(other)
        instance_of?(other.class) &&
        hash == other.hash
      end

      def ==(other)
        self.class <=> other.class &&
        hash == other.hash
      end

      def hash
        resource.object_id.hash
      end

    private

      def model
        @model ||= resource.model
      end

      def properties
        @properties ||= model.properties(repository.name)
      end

      def relationships
        @relationships ||= model.relationships(repository.name).values
      end

      def identity_map
        @identity_map ||= repository.identity_map(model)
      end

      def remove_from_identity_map
        identity_map.delete(resource.key)
      end

      def add_to_identity_map
        identity_map[resource.key] = resource
      end

      def reset_original_attributes
        original_attributes.clear
      end

    end # class State
  end # module Resource
end # module DataMapper

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dm-core-1.0.0.rc2 lib/dm-core/resource/state.rb
dm-core-1.0.0.rc1 lib/dm-core/resource/state.rb