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



40
41
42
43
# File 'lib/ddr/events/event.rb', line 40

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

.for_object(obj) ⇒ Object

Scopes



54
55
56
# File 'lib/ddr/events/event.rb', line 54

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

.for_pid(pid) ⇒ Object



58
59
60
# File 'lib/ddr/events/event.rb', line 58

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

.repository_softwareObject

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



46
47
48
49
50
# File 'lib/ddr/events/event.rb', line 46

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



73
74
75
# File 'lib/ddr/events/event.rb', line 73

def comment_or_summary
  comment.present? ? comment : summary
end

#display_typeObject

Rendering methods



64
65
66
67
# File 'lib/ddr/events/event.rb', line 64

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.



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

def event_date_time_s
  event_date_time.utc.strftime DATE_TIME_FORMAT
end

#failure!Object



87
88
89
# File 'lib/ddr/events/event.rb', line 87

def failure!
  self.outcome = FAILURE
end

#failure?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/ddr/events/event.rb', line 91

def failure?
  outcome == FAILURE
end

#objectObject

Object getter and setter



96
97
98
# File 'lib/ddr/events/event.rb', line 96

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

#object=(obj) ⇒ Object

Raises:

  • (ArgumentError)


100
101
102
103
104
# File 'lib/ddr/events/event.rb', line 100

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

#performed_byObject



69
70
71
# File 'lib/ddr/events/event.rb', line 69

def performed_by
  user_key || SYSTEM
end

#pid=(pid) ⇒ Object

Override pid setter to clear cached object instance variable



107
108
109
110
# File 'lib/ddr/events/event.rb', line 107

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

#success!Object

Outcome methods



79
80
81
# File 'lib/ddr/events/event.rb', line 79

def success!
  self.outcome = SUCCESS
end

#success?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/ddr/events/event.rb', line 83

def success?
  outcome == SUCCESS
end

#user=(user) ⇒ Object



119
120
121
# File 'lib/ddr/events/event.rb', line 119

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