Sha256: 05f1456212f9a1151e8ac363023eaad053d1194e9cd9aa4f8c4687d5ca921557

Contents?: true

Size: 1.53 KB

Versions: 4

Compression:

Stored size: 1.53 KB

Contents

module ActiveFedora
  module Identifiable
    extend ActiveSupport::Concern

    included do
      ##
      # :singleton-method
      #
      # Accepts a proc that takes an id and transforms it to a URI
      mattr_accessor :translate_id_to_uri, default: Core::FedoraIdTranslator

      ##
      # :singleton-method
      #
      # Accepts a proc that takes a uri and transforms it to an id
      mattr_accessor :translate_uri_to_id, default: Core::FedoraUriTranslator
    end

    def id
      if uri.is_a?(::RDF::URI) && uri.value.blank?
        nil
      elsif uri.present?
        self.class.uri_to_id(URI.parse(uri))
      end
    end

    def id=(id)
      raise "ID has already been set to #{self.id}" if self.id
      @ldp_source = build_ldp_resource(id.to_s)
    end

    # @return [RDF::URI] the uri for this resource
    def uri
      @ldp_source.subject_uri
    end

    module ClassMethods
      ##
      # Transforms an id into a uri
      # if translate_id_to_uri is set it uses that proc, otherwise just the default
      def id_to_uri(id)
        translate_id_to_uri.call(id)
      end

      ##
      # Transforms a uri into an id
      # if translate_uri_to_id is set it uses that proc, otherwise just the default
      def uri_to_id(uri)
        translate_uri_to_id.call(uri)
      end

      ##
      # Provides the common interface for ActiveTriples::Identifiable
      def from_uri(uri, _)
        find(uri_to_id(uri))
      rescue ActiveFedora::ObjectNotFoundError, Ldp::Gone
        ActiveTriples::Resource.new(uri)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active-fedora-15.0.1 lib/active_fedora/identifiable.rb
active-fedora-15.0.0 lib/active_fedora/identifiable.rb
active-fedora-14.0.1 lib/active_fedora/identifiable.rb
active-fedora-14.0.0 lib/active_fedora/identifiable.rb