Module: ActiveFedora::Core

Extended by:
ActiveSupport::Autoload, ActiveSupport::Concern
Includes:
Common
Included in:
Base
Defined in:
lib/active_fedora/core.rb,
lib/active_fedora/core/fedora_id_translator.rb,
lib/active_fedora/core/fedora_uri_translator.rb

Defined Under Namespace

Modules: ClassMethods Classes: FedoraIdTranslator, FedoraUriTranslator

Instance Method Summary collapse

Methods included from Common

#<=>, #==, #etag, #frozen?, #ldp_source, #readonly!, #readonly?

Instance Method Details

#freezeObject



86
87
88
89
90
91
# File 'lib/active_fedora/core.rb', line 86

def freeze
  @resource.freeze
  # @attributes = @attributes.clone.freeze
  attached_files.freeze
  self
end

#init_with_resource(rdf_resource) ⇒ Object

Initialize an empty model object and set its resource example:

class Post < ActiveFedora::Base
end

post = Post.allocate
post.init_with_resource(Ldp::Resource.new('http://example.com/post/1'))
post.title # => 'hello world'


77
78
79
80
81
82
83
84
# File 'lib/active_fedora/core.rb', line 77

def init_with_resource(rdf_resource)
  init_internals
  @ldp_source = rdf_resource
  load_attached_files
  run_callbacks :find
  run_callbacks :initialize
  self
end

#initialize(attributes = nil) {|_self| ... } ⇒ Object

Constructor. You may supply a custom :id, or we call the Fedora Rest API for the next available Fedora id, and mark as new object. Also, if attrs does not contain :id but does contain :namespace it will pass the :namespace value to Fedora::Repository.nextid to generate the next id available within the given namespace.

Yields:

  • (_self)

Yield Parameters:

Raises:



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/active_fedora/core.rb', line 31

def initialize(attributes = nil, &_block)
  init_internals
  attributes = attributes.dup if attributes # can't dup nil in Ruby 2.3
  id = attributes && (attributes.delete(:id) || attributes.delete('id'))
  @ldp_source = build_ldp_resource(id)
  raise IllegalOperation, "Attempting to recreate existing ldp_source: `#{ldp_source.subject}'" unless ldp_source.new?
  assign_attributes(attributes) if attributes
  assert_content_model
  load_attached_files

  yield self if block_given?
  _run_initialize_callbacks
end

#inspectObject

Returns the contents of the record as a nicely formatted string.



96
97
98
99
100
101
102
103
# File 'lib/active_fedora/core.rb', line 96

def inspect
  inspection = ["id: #{id.inspect}"]
  inspection += self.class.attribute_names.collect do |name|
    "#{name}: #{attribute_for_inspect(name)}" if has_attribute?(name)
  end

  "#<#{self.class} #{inspection.compact.join(', ')}>"
end

#reloadObject

Reloads the object from Fedora.



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/active_fedora/core.rb', line 56

def reload
  check_persistence unless persisted?
  clear_association_cache
  clear_attached_files
  refresh
  load_attached_files
  self
rescue Ldp::Gone => err
  logger.error("Tried to reload an object that has been destroyed.\n\t#{err.message}")
  raise ActiveFedora::ObjectNotFoundError
end

#uri=(uri) ⇒ Object

Note:

This can only be run on an unpersisted resource.

Parameters:

  • uri (#to_s)

    a full fedora URI or relative ID to set this resource to.

Raises:



49
50
51
52
53
# File 'lib/active_fedora/core.rb', line 49

def uri=(uri)
  raise AlreadyPersistedError, "You can not set a URI for a persisted ActiveFedora object." if persisted?

  @ldp_source = build_ldp_resource(self.class.uri_to_id(uri))
end