Module: ActiveFedora::Persistence

Extended by:
ActiveSupport::Concern
Included in:
Base
Defined in:
lib/active_fedora/persistence.rb

Overview

Active Fedora Persistence

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#delete(opts = {}) ⇒ Object

Deletes an object from Fedora and deletes the indexed record from Solr. Delete does not run any callbacks, so consider using destroy instead.

Options Hash (opts):

  • :eradicate (Boolean)

    if passed in, eradicate the tombstone from Fedora



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/active_fedora/persistence.rb', line 46

def delete(opts = {})
  return self if new_record?

  @destroyed = true
  reflections.each_pair do |name, reflection|
    if reflection.macro == :has_many
      association(name.to_sym).delete_all
    end
  end

  id = self.id ## cache so it's still available after delete
  # Clear out the ETag
  @ldp_source = build_ldp_resource(id)
  begin
    @ldp_source.delete
  rescue Ldp::NotFound
    raise ObjectNotFoundError, "Unable to find #{id} in the repository"
  end

  ActiveFedora::SolrService.delete(id) if ENABLE_SOLR_UPDATES
  if opts[:eradicate]
    self.class.eradicate(id)
  end
  freeze
end

#destroy(*args) ⇒ Object

Delete the object from Fedora and Solr. Run any before/after/around callbacks for destroy

Raises:



75
76
77
78
# File 'lib/active_fedora/persistence.rb', line 75

def destroy(*args)
  raise ReadOnlyRecord if readonly?
  delete(*args)
end

#destroyed?Boolean

Returns true if this object has been destroyed, otherwise returns false.



15
16
17
# File 'lib/active_fedora/persistence.rb', line 15

def destroyed?
  @destroyed
end

#eradicateObject



80
81
82
# File 'lib/active_fedora/persistence.rb', line 80

def eradicate
  self.class.eradicate(self.id)
end

#new_record?Boolean



6
7
8
# File 'lib/active_fedora/persistence.rb', line 6

def new_record?
  @ldp_source.new?
end

#persisted?Boolean



10
11
12
# File 'lib/active_fedora/persistence.rb', line 10

def persisted?
  !(destroyed? || new_record?)
end

#save(*args) ⇒ Boolean

Saves a Base object, and any dirty attached files, then updates the Solr index for this object, unless option :update_index=>false is present. Indexing is also controlled by the `create_needs_index?' and `update_needs_index?' methods.



26
27
28
# File 'lib/active_fedora/persistence.rb', line 26

def save(*args)
  create_or_update(*args)
end

#save!(*args) ⇒ Object



30
31
32
# File 'lib/active_fedora/persistence.rb', line 30

def save!(*args)
  create_or_update(*args)
end

#update(attributes) ⇒ Object Also known as: update_attributes

Pushes the object and all of its new or dirty attached files into Fedora



35
36
37
38
# File 'lib/active_fedora/persistence.rb', line 35

def update(attributes)
  self.attributes=attributes
  save
end