Sha256: 47b4789c9bcc149549f24abbf89c45ee85df85dab789695238a96d7ea5f0beba

Contents?: true

Size: 1.49 KB

Versions: 17

Compression:

Stored size: 1.49 KB

Contents

# encoding: utf-8
module Dynamoid #:nodoc:

  module Associations
    module SingleAssociation
      include Association

      delegate :class, :to => :target

      def setter(object)
        delete
        source.update_attribute(source_attribute, Set[object.id])
        self.send(:associate_target, object) if target_association
        object
      end

      def delete
        source.update_attribute(source_attribute, nil)
        self.send(:disassociate_target, target) if target && target_association
        target
      end

      def create!(attributes = {})
        setter(target_class.create!(attributes))
      end

      def create(attributes = {})
        setter(target_class.create!(attributes))
      end


      # Is this object equal to the association's target?
      #
      # @return [Boolean] true/false
      #
      # @since 0.2.0
      def ==(other)
        target == other
      end

      # Delegate methods we don't find directly to the target.
      #
      # @since 0.2.0
      def method_missing(method, *args)
        if target.respond_to?(method)
          target.send(method, *args)
        else
          super
        end
      end

      def nil?
        target.nil?
      end

      private

      # Find the target of the has_one association.
      #
      # @return [Dynamoid::Document] the found target (or nil if nothing)
      #
      # @since 0.2.0
      def find_target
        return if source_ids.empty?
        target_class.find(source_ids.first)
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 4 rubygems

Version Path
dynamoid-edge-1.1.1 lib/dynamoid/associations/single_association.rb
dynamoid-edge-1.1.0 lib/dynamoid/associations/single_association.rb
dynamoid-1.1.0 lib/dynamoid/associations/single_association.rb
dynamoid-1.0.0 lib/dynamoid/associations/single_association.rb
dynamoid-moda-0.7.2 lib/dynamoid/associations/single_association.rb
dynamoid-moda-0.7.1 lib/dynamoid/associations/single_association.rb
dynamoid-0.7.1 lib/dynamoid/associations/single_association.rb
dynamoid-0.7.0 lib/dynamoid/associations/single_association.rb
dynamoid-0.6.1 lib/dynamoid/associations/single_association.rb
dynamoid-0.6.0 lib/dynamoid/associations/single_association.rb
adept_dynamoid-0.6.0 lib/dynamoid/associations/single_association.rb
adept_dynamoid-0.5.0.8 lib/dynamoid/associations/single_association.rb
adept_dynamoid-0.5.0.7 lib/dynamoid/associations/single_association.rb
adept_dynamoid-0.5.0.6 lib/dynamoid/associations/single_association.rb
dynamoid-0.5.0 lib/dynamoid/associations/single_association.rb
dynamoid-0.4.1 lib/dynamoid/associations/single_association.rb
dynamoid-0.4.0 lib/dynamoid/associations/single_association.rb