Module: Hyrax::ArResource

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/hyrax/ar_resource.rb

Overview

An optional model to bring active record like accessors to your Valkyrie resources. This is simply for simplicity in the console and backward compatibility.

Instance Method Summary collapse

Instance Method Details

#destroy(persister: Hyrax.persister, index_adapter: Hyrax.index_adapter, user: ::User.system_user) ⇒ Boolean

This will delete the resource and publish its delete event

Parameters:

  • Valkyrie (Hyrax::Persister)

    persister (optional) will default to Hyrax.persister

  • Valkyrie (Hyrax::IndexAdapter)

    index adapter (optional) will default to Hyrax.index_adapter

  • user (User) (defaults to: ::User.system_user)

    the user to record the event for. Will not set depositor yet

Returns:

  • (Boolean)


92
93
94
95
96
97
98
# File 'app/models/concerns/hyrax/ar_resource.rb', line 92

def destroy(persister: Hyrax.persister, index_adapter: Hyrax.index_adapter, user: ::User.system_user)
  return false unless persisted?
  persister.delete(resource: self)
  index_adapter.delete(resource: self)
  Hyrax.publisher.publish('object.deleted', object: self, user: user)
  true
end

#destroy!(**opts) ⇒ Object

Raises:

  • (Valkyrie::Persistence::ObjectNotFoundError)


100
101
102
# File 'app/models/concerns/hyrax/ar_resource.rb', line 100

def destroy!(**opts)
  raise Valkyrie::Persistence::ObjectNotFoundError unless destroy(**opts)
end

#parent(query_service: Hyrax.query_service) ⇒ NilClass, Valkyrie::Resource

Parameters:

  • query_service (#find_parents) (defaults to: Hyrax.query_service)

Returns:

  • (NilClass)

    when this object does not have a parent.

  • (Valkyrie::Resource)

    when this object has at least one parent.



47
48
49
# File 'app/models/concerns/hyrax/ar_resource.rb', line 47

def parent(query_service: Hyrax.query_service)
  query_service.find_parents(resource: self).first
end

#save(persister: Hyrax.persister, index_adapter: Hyrax.index_adapter, user: ::User.system_user) ⇒ Valkyrie::Resource Also known as: create, update

This will persist the object to the repository. Not a complete transaction set up, but will index and notify listeners of metadata update

Parameters:

  • Valkyrie (Hyrax::Persister)

    persister (optional) will default to Hyrax.persister

  • Valkyrie (Hyrax::IndexAdapter)

    index adapter (optional) will default to Hyrax.index_adapter

  • user (User) (defaults to: ::User.system_user)

    the user to record the event for. Will not set depositor yet

Returns:

  • (Valkyrie::Resource)


59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/models/concerns/hyrax/ar_resource.rb', line 59

def save(persister: Hyrax.persister, index_adapter: Hyrax.index_adapter, user: ::User.system_user)
  is_new = new_record
  result = persister.save(resource: self)
  return nil unless result.persisted?
  index_adapter.save(resource: result)
  if result.collection?
    Hyrax.publisher.publish('collection.metadata.updated', collection: result, user: user)
  else
    Hyrax.publisher.publish('object.deposited', object: result, user: user) if is_new
    Hyrax.publisher.publish('object.metadata.updated', object: result, user: user)
  end
  # TODO: do we need to replace the properties here?
  self.new_record = false
  self.id = result.id

  result
end

#save!(**opts) ⇒ Object Also known as: create!, update!

Raises:

  • (Valkyrie::Persistence::ObjectNotFoundError)


79
80
81
# File 'app/models/concerns/hyrax/ar_resource.rb', line 79

def save!(**opts)
  raise Valkyrie::Persistence::ObjectNotFoundError unless save(**opts)
end