Sha256: c42b4faf9ea216e76fa751d024a0db694661222d898e278730134d79c8a0c459

Contents?: true

Size: 1.74 KB

Versions: 26

Compression:

Stored size: 1.74 KB

Contents

module ActiveFedora
  module Associations
    class BelongsToAssociation < SingularAssociation #:nodoc:

      def replace(record)
        if record
          raise_on_type_mismatch(record)
          # update_counters(record)
          replace_keys(record)
          set_inverse_instance(record)
          @updated = true
        else
          # decrement_counters
          remove_keys
        end

        self.target = record
      end

      def reset
        super
        @updated = false
      end

      def updated?
        @updated
      end

      private

        def replace_keys(record)
          owner[reflection.foreign_key] = record.id
        end

        def remove_keys
          owner[reflection.foreign_key] = nil
        end

        # Constructs a query that checks solr for the correct id & class_name combination
        def construct_query(ids)
          # Some descendants of ActiveFedora::Base are anonymous classes. They don't have names. Filter them out.
          candidate_classes = klass.descendants.select {|d| d.name }
          candidate_classes += [klass] unless klass == ActiveFedora::Base
          model_pairs = candidate_classes.inject([]) { |arr, klass| arr << [:has_model, klass.to_class_uri]; arr }
          '(' + ActiveFedora::SolrQueryBuilder.construct_query_for_ids(ids) + ') AND (' +
              ActiveFedora::SolrQueryBuilder.construct_query_for_rel(model_pairs, 'OR') + ')'
        end

        def foreign_key_present?
          owner[reflection.foreign_key]
        end

        # belongs_to is not invertible (unless we implement has_one, then make an exception here)
        def invertible_for?(_)
          false
        end

        def stale_state
          owner[reflection.foreign_key]
        end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
active-fedora-9.0.8 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.3.0 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.2.1 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.2.0 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.2.0.rc2 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.2.0.rc1 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.1.2 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.1.1 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.1.0 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.1.0.rc1 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.6 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.5 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.4 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.3 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.2 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.1 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.0 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.0.rc3 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.0.rc2 lib/active_fedora/associations/belongs_to_association.rb
active-fedora-9.0.0.rc1 lib/active_fedora/associations/belongs_to_association.rb