Sha256: 02503189aa12b42f8d9bff614652d10b2c49adffbc3a127f70b941c2e8f6425a

Contents?: true

Size: 1.21 KB

Versions: 7

Compression:

Stored size: 1.21 KB

Contents

module ActiveFedora::Associations::Builder
  class Contains < SingularAssociation #:nodoc:
    def self.macro
      :contains
    end

    def self.valid_options(options)
      super + [:autocreate, :block]
    end

    def self.create_reflection(model, name, scope, options, extension = nil)
      options[:class_name] = 'ActiveFedora::File' if options[:class_name].blank?
      super(model, name, scope, options, extension)
    end

    def self.validate_options(options)
      super
      return unless options[:class_name] && !options[:class_name].is_a?(String)
      raise ArgumentError, ":class_name must be a string for contains '#{name}'"
    end

    def self.define_readers(mixin, name)
      mixin.send(:define_method, name) do |*params|
        association(name).reader(*params).tap do |file|
          set_uri = uri.is_a?(RDF::URI) ? uri.value.present? : uri.present?
          if set_uri
            file_uri = "#{uri}/#{name}"
            begin
              file.uri = file_uri
            rescue ActiveFedora::AlreadyPersistedError
            end
          end
          if file.respond_to?(:exists!)
            file.exists! if contains_assertions.include?(file_uri)
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
active-fedora-9.12.0 lib/active_fedora/associations/builder/contains.rb
active-fedora-9.11.0 lib/active_fedora/associations/builder/contains.rb
active-fedora-9.10.4 lib/active_fedora/associations/builder/contains.rb
active-fedora-9.10.3 lib/active_fedora/associations/builder/contains.rb
active-fedora-9.10.2 lib/active_fedora/associations/builder/contains.rb
active-fedora-9.10.1 lib/active_fedora/associations/builder/contains.rb
active-fedora-9.10.0 lib/active_fedora/associations/builder/contains.rb