Module: ActiveFedora::Persistence

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

Overview

Active Fedora Persistence

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#assert_content_modelObject

This can be overriden to assert a different model It’s normally called once in the lifecycle, by #create#



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

def assert_content_model
  add_relationship(:has_model, self.class.to_class_uri)
end

#deleteObject

Deletes a Base object, also deletes the info indexed in Solr, and the underlying inner_object. If this object is held in any relationships (ie inbound relationships outside of this object it will remove it from those items rels-ext as well



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/active_fedora/persistence.rb', line 58

def delete
  dependent_objects.each_pair do |predicate, objects|
    objects.each do |obj|
      if obj.respond_to?(:remove_relationship)
        obj.remove_relationship(predicate,self)
        obj.save
      end 
    end
  end
  
  #Fedora::Repository.instance.delete(@inner_object)
  pid = self.pid ## cache so it's still available after delete
  begin
    @inner_object.delete
  rescue RestClient::ResourceNotFound =>e
    raise ObjectNotFoundError, "Unable to find #{pid} in the repository"
  end
  if ENABLE_SOLR_UPDATES
    solr = ActiveFedora::SolrService.instance.conn
    solr.delete_by_id(pid) 
    solr.commit
  end
end

#dependent_objectsObject



44
45
46
47
48
49
50
51
52
53
# File 'lib/active_fedora/persistence.rb', line 44

def dependent_objects
  # Loop over all the inbound associations (has_many reflections)
  results = {}
  reflections.each_pair do |name, reflection|
    if reflection.macro == :has_many
      results[reflection.options[:property]] = send(name)
    end
  end
  results.merge (inbound_relationships(:object) )
end

#destroyObject



82
83
84
# File 'lib/active_fedora/persistence.rb', line 82

def destroy
  delete
end

#refreshObject

Refreshes the object’s info from Fedora Note: Currently just registers any new datastreams that have appeared in fedora



40
41
42
# File 'lib/active_fedora/persistence.rb', line 40

def refresh
#      inner_object.load_attributes_from_fedora
end

#saveObject

Saves a Base object, and any dirty datastreams, then updates the Solr index for this object.



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/active_fedora/persistence.rb', line 8

def save(*)
  # If it's a new object, set the conformsTo relationship for Fedora CMA
  if new_record?
    result = create
    update_index if create_needs_index?
  else
    result = update_record
    update_index if update_needs_index?
  end
  return result
end

#save!Object



20
21
22
# File 'lib/active_fedora/persistence.rb', line 20

def save!(*)
  save
end

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

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



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

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