Class: Ddr::Events::Event

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/ddr/events/event.rb

Constant Summary collapse

DATE_TIME_FORMAT =

Event date time - for PREMIS and Solr

"%Y-%m-%dT%H:%M:%S.%LZ"
DEFAULT_SORT_ORDER =

set default ordering

"event_date_time ASC"
SUCCESS =

Outcomes

"success"
FAILURE =
"failure"
OUTCOMES =
[SUCCESS, FAILURE]
VALID =

Validation constants

"VALID"
INVALID =
"INVALID"
SYSTEM =

For rendering “performed by” when no associated user

"SYSTEM"
DDR_SOFTWARE =
"ddr-models #{Ddr::Models::VERSION}"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.call(*args) ⇒ Object

Receive message sent by ActiveSupport::Notifications



42
43
44
45
# File 'lib/ddr/events/event.rb', line 42

def self.call(*args)
  notification = ActiveSupport::Notifications::Event.new(*args)
  create(notification.payload)
end

.for_object(obj) ⇒ Object

Scopes



56
57
58
# File 'lib/ddr/events/event.rb', line 56

def self.for_object(obj)
  for_pid(obj.pid)
end

.for_pid(pid) ⇒ Object



60
61
62
# File 'lib/ddr/events/event.rb', line 60

def self.for_pid(pid)
  where(pid: pid)
end

.repository_softwareObject

Repository software version – e.g., “Fedora Repository 3.7.0”



48
49
50
51
52
# File 'lib/ddr/events/event.rb', line 48

def self.repository_software
  @@repository_software ||= ActiveFedora::Base.connection_for_pid(0).repository_profile
                                              .values_at(:repositoryName, :repositoryVersion)
                                              .join(" ")
end

Instance Method Details

#comment_or_summaryObject



75
76
77
# File 'lib/ddr/events/event.rb', line 75

def comment_or_summary
  comment.present? ? comment : summary
end

#display_typeObject

Rendering methods



66
67
68
69
# File 'lib/ddr/events/event.rb', line 66

def display_type
  # Ddr::Events::UpdateEvent => "Update"
  @display_type ||= self.class.to_s.split("::").last.sub("Event", "").titleize
end

#event_date_time_sObject

Return a date/time formatted as a string suitable for use as a PREMIS eventDateTime. Format also works for Solr. Force to UTC.



124
125
126
# File 'lib/ddr/events/event.rb', line 124

def event_date_time_s
  event_date_time.utc.strftime DATE_TIME_FORMAT
end

#failure!Object



89
90
91
# File 'lib/ddr/events/event.rb', line 89

def failure!
  self.outcome = FAILURE
end

#failure?Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/ddr/events/event.rb', line 93

def failure?
  outcome == FAILURE
end

#objectObject

Object getter and setter



99
100
101
# File 'lib/ddr/events/event.rb', line 99

def object
  @object ||= ActiveFedora::Base.find(pid) if pid
end

#object=(obj) ⇒ Object

Raises:

  • (ArgumentError)


109
110
111
112
113
# File 'lib/ddr/events/event.rb', line 109

def object=(obj)
  raise ArgumentError, "Can't set to new object" if obj.new_record?
  self.pid = obj.pid
  @object = obj
end

#performed_byObject



71
72
73
# File 'lib/ddr/events/event.rb', line 71

def performed_by
  user_key || SYSTEM
end

#pid=(pid) ⇒ Object

Override pid setter to clear cached object instance variable



116
117
118
119
# File 'lib/ddr/events/event.rb', line 116

def pid=(pid)
  @object = nil 
  super
end

#success!Object

Outcome methods



81
82
83
# File 'lib/ddr/events/event.rb', line 81

def success!
  self.outcome = SUCCESS
end

#success?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/ddr/events/event.rb', line 85

def success?
  outcome == SUCCESS
end

#user=(user) ⇒ Object

Sets user_key to user.user_key For compatibility with ddr-models <= 1.9.0



105
106
107
# File 'lib/ddr/events/event.rb', line 105

def user=(user)
  self.user_key = user.user_key
end