ddr-models 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +12 -0
- data/README.md +5 -0
- data/Rakefile +37 -0
- data/app/models/attachment.rb +7 -0
- data/app/models/collection.rb +54 -0
- data/app/models/component.rb +15 -0
- data/app/models/item.rb +19 -0
- data/app/models/solr_document.rb +36 -0
- data/app/models/target.rb +8 -0
- data/config/initializers/active_fedora_base.rb +77 -0
- data/config/initializers/active_fedora_datastream.rb +5 -0
- data/config/initializers/ddr.rb +8 -0
- data/config/initializers/devise.rb +245 -0
- data/config/initializers/devise.rb~ +245 -0
- data/config/initializers/subscriptions.rb +15 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20141021233359_create_events.rb +28 -0
- data/db/migrate/20141021234156_create_minted_ids.rb +19 -0
- data/db/migrate/20141103192146_create_workflow_state.rb +13 -0
- data/db/migrate/20141104181418_create_users.rb +34 -0
- data/db/migrate/20141104181418_create_users.rb~ +6 -0
- data/lib/ddr-models.rb +1 -0
- data/lib/ddr/actions.rb +8 -0
- data/lib/ddr/actions/fixity_check.rb +35 -0
- data/lib/ddr/auth.rb +45 -0
- data/lib/ddr/auth.rb~ +47 -0
- data/lib/ddr/auth/ability.rb +204 -0
- data/lib/ddr/auth/ability.rb~ +204 -0
- data/lib/ddr/auth/group_service.rb +53 -0
- data/lib/ddr/auth/group_service.rb~ +53 -0
- data/lib/ddr/auth/grouper_service.rb +76 -0
- data/lib/ddr/auth/grouper_service.rb~ +77 -0
- data/lib/ddr/auth/remote_group_service.rb +35 -0
- data/lib/ddr/auth/remote_group_service.rb~ +35 -0
- data/lib/ddr/auth/superuser.rb +13 -0
- data/lib/ddr/auth/superuser.rb~ +9 -0
- data/lib/ddr/auth/user.rb +71 -0
- data/lib/ddr/auth/user.rb~ +65 -0
- data/lib/ddr/configurable.rb +34 -0
- data/lib/ddr/datastreams.rb +32 -0
- data/lib/ddr/datastreams/content_metadata_datastream.rb +147 -0
- data/lib/ddr/datastreams/datastream_behavior.rb +95 -0
- data/lib/ddr/datastreams/descriptive_metadata_datastream.rb +84 -0
- data/lib/ddr/datastreams/properties_datastream.rb +25 -0
- data/lib/ddr/datastreams/role_assignments_datastream.rb +19 -0
- data/lib/ddr/events.rb +17 -0
- data/lib/ddr/events/creation_event.rb +12 -0
- data/lib/ddr/events/event.rb +163 -0
- data/lib/ddr/events/fixity_check_event.rb +43 -0
- data/lib/ddr/events/ingestion_event.rb +12 -0
- data/lib/ddr/events/preservation_event_behavior.rb +37 -0
- data/lib/ddr/events/preservation_event_type.rb +24 -0
- data/lib/ddr/events/reindex_object_after_save.rb +18 -0
- data/lib/ddr/events/update_event.rb +9 -0
- data/lib/ddr/events/validation_event.rb +11 -0
- data/lib/ddr/events/virus_check_event.rb +30 -0
- data/lib/ddr/index_fields.rb +39 -0
- data/lib/ddr/metadata.rb +22 -0
- data/lib/ddr/metadata/duke_terms.rb +15 -0
- data/lib/ddr/metadata/premis_event.rb +59 -0
- data/lib/ddr/metadata/rdf_vocabulary_parser.rb +45 -0
- data/lib/ddr/metadata/roles_vocabulary.rb +10 -0
- data/lib/ddr/metadata/sources/duketerms.rdf.xml +856 -0
- data/lib/ddr/metadata/vocabulary.rb +37 -0
- data/lib/ddr/models.rb +60 -0
- data/lib/ddr/models/access_controllable.rb +23 -0
- data/lib/ddr/models/base.rb +37 -0
- data/lib/ddr/models/describable.rb +81 -0
- data/lib/ddr/models/engine.rb +58 -0
- data/lib/ddr/models/error.rb +12 -0
- data/lib/ddr/models/event_loggable.rb +36 -0
- data/lib/ddr/models/file_management.rb +183 -0
- data/lib/ddr/models/fixity_checkable.rb +20 -0
- data/lib/ddr/models/governable.rb +48 -0
- data/lib/ddr/models/has_attachments.rb +12 -0
- data/lib/ddr/models/has_children.rb +21 -0
- data/lib/ddr/models/has_content.rb +114 -0
- data/lib/ddr/models/has_content_metadata.rb +16 -0
- data/lib/ddr/models/has_properties.rb +15 -0
- data/lib/ddr/models/has_role_assignments.rb +17 -0
- data/lib/ddr/models/has_thumbnail.rb +27 -0
- data/lib/ddr/models/has_workflow.rb +29 -0
- data/lib/ddr/models/indexing.rb +53 -0
- data/lib/ddr/models/licensable.rb +28 -0
- data/lib/ddr/models/minted_id.rb +10 -0
- data/lib/ddr/models/permanent_identification.rb +48 -0
- data/lib/ddr/models/solr_document.rb +193 -0
- data/lib/ddr/models/version.rb +5 -0
- data/lib/ddr/notifications.rb +15 -0
- data/lib/ddr/services.rb +8 -0
- data/lib/ddr/services/id_service.rb +48 -0
- data/lib/ddr/utils.rb +153 -0
- data/lib/ddr/workflow.rb +8 -0
- data/lib/ddr/workflow/workflow_state.rb +39 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/user.rb +5 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +29 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +78 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/assets.rb +8 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +56 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +80 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +4974 -0
- data/spec/dummy/log/test.log +55627 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/attachment_factories.rb +15 -0
- data/spec/factories/collection_factories.rb +16 -0
- data/spec/factories/component_factories.rb +15 -0
- data/spec/factories/event_factories.rb +7 -0
- data/spec/factories/item_factories.rb +16 -0
- data/spec/factories/target_factories.rb +11 -0
- data/spec/factories/test_model_factories.rb +133 -0
- data/spec/factories/user_factories.rb +7 -0
- data/spec/factories/user_factories.rb~ +7 -0
- data/spec/features/grouper_integration_spec.rb~ +21 -0
- data/spec/fixtures/contentMetadata.xml +37 -0
- data/spec/fixtures/image1.tiff +0 -0
- data/spec/fixtures/image2.tiff +0 -0
- data/spec/fixtures/image3.tiff +0 -0
- data/spec/fixtures/library-devil.tiff +0 -0
- data/spec/fixtures/sample.docx +0 -0
- data/spec/fixtures/sample.pdf +0 -0
- data/spec/fixtures/target.png +0 -0
- data/spec/models/ability_spec.rb +248 -0
- data/spec/models/ability_spec.rb~ +245 -0
- data/spec/models/active_fedora_base_spec.rb +107 -0
- data/spec/models/active_fedora_datastream_spec.rb +121 -0
- data/spec/models/attachment_spec.rb +13 -0
- data/spec/models/collection_spec.rb +33 -0
- data/spec/models/component_spec.rb +8 -0
- data/spec/models/descriptive_metadata_datastream_spec.rb +102 -0
- data/spec/models/events_spec.rb +64 -0
- data/spec/models/file_management_spec.rb +179 -0
- data/spec/models/has_role_assignments_spec.rb +29 -0
- data/spec/models/has_workflow_spec.rb +54 -0
- data/spec/models/item_spec.rb +8 -0
- data/spec/models/permanent_identification_spec.rb +65 -0
- data/spec/models/role_assignments_datastream_spec.rb +25 -0
- data/spec/models/superuser_spec.rb +13 -0
- data/spec/models/superuser_spec.rb~ +13 -0
- data/spec/models/target_spec.rb +8 -0
- data/spec/models/user_spec.rb +60 -0
- data/spec/models/user_spec.rb~ +56 -0
- data/spec/services/group_service_spec.rb +75 -0
- data/spec/services/group_service_spec.rb~ +71 -0
- data/spec/services/id_service_spec.rb +33 -0
- data/spec/spec_helper.rb +125 -0
- data/spec/support/shared_examples_for_access_controllables.rb +6 -0
- data/spec/support/shared_examples_for_associations.rb +8 -0
- data/spec/support/shared_examples_for_ddr_models.rb +7 -0
- data/spec/support/shared_examples_for_describables.rb +63 -0
- data/spec/support/shared_examples_for_event_loggables.rb +3 -0
- data/spec/support/shared_examples_for_events.rb +179 -0
- data/spec/support/shared_examples_for_governables.rb +17 -0
- data/spec/support/shared_examples_for_has_content.rb +136 -0
- data/spec/support/shared_examples_for_has_content_metadata.rb +74 -0
- data/spec/support/shared_examples_for_has_properties.rb +5 -0
- data/spec/support/shared_examples_for_indexing.rb +36 -0
- metadata +562 -0
@@ -0,0 +1,163 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Events
|
3
|
+
class Event < ActiveRecord::Base
|
4
|
+
|
5
|
+
belongs_to :user, inverse_of: :events
|
6
|
+
|
7
|
+
# Event date time - for PREMIS and Solr
|
8
|
+
DATE_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%LZ"
|
9
|
+
|
10
|
+
# set default ordering
|
11
|
+
DEFAULT_SORT_ORDER = "event_date_time ASC"
|
12
|
+
default_scope { order(DEFAULT_SORT_ORDER) }
|
13
|
+
|
14
|
+
# Outcomes
|
15
|
+
SUCCESS = "success"
|
16
|
+
FAILURE = "failure"
|
17
|
+
OUTCOMES = [SUCCESS, FAILURE]
|
18
|
+
|
19
|
+
# Validation constants
|
20
|
+
VALID = "VALID"
|
21
|
+
INVALID = "INVALID"
|
22
|
+
|
23
|
+
# For rendering "performed by" when no associated user
|
24
|
+
SYSTEM = "SYSTEM"
|
25
|
+
|
26
|
+
DDR_SOFTWARE = "DDR #{Ddr::Models::VERSION}"
|
27
|
+
|
28
|
+
class_attribute :description
|
29
|
+
|
30
|
+
validates_presence_of :event_date_time, :pid
|
31
|
+
validates :outcome, inclusion: {in: OUTCOMES, message: "\"%{value}\" is not a valid event outcome"}
|
32
|
+
validate :object_exists # unless/until we have a deaccession-type of event
|
33
|
+
|
34
|
+
after_initialize :set_defaults
|
35
|
+
|
36
|
+
# Receive message sent by ActiveSupport::Notifications
|
37
|
+
def self.call(*args)
|
38
|
+
notification = ActiveSupport::Notifications::Event.new(*args)
|
39
|
+
create(notification.payload)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Repository software version -- e.g., "Fedora Repository 3.7.0"
|
43
|
+
def self.repository_software
|
44
|
+
@@repository_software ||= ActiveFedora::Base.connection_for_pid(0).repository_profile
|
45
|
+
.values_at(:repositoryName, :repositoryVersion)
|
46
|
+
.join(" ")
|
47
|
+
end
|
48
|
+
|
49
|
+
# Scopes
|
50
|
+
|
51
|
+
def self.for_object(obj)
|
52
|
+
for_pid(obj.pid)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.for_pid(pid)
|
56
|
+
where(pid: pid)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Rendering methods
|
60
|
+
|
61
|
+
def display_type
|
62
|
+
# Ddr::Events::UpdateEvent => "Update"
|
63
|
+
@display_type ||= self.class.to_s.split("::").last.sub("Event", "").titleize
|
64
|
+
end
|
65
|
+
|
66
|
+
def performed_by
|
67
|
+
user ? user.to_s : SYSTEM
|
68
|
+
end
|
69
|
+
|
70
|
+
def comment_or_summary
|
71
|
+
comment.present? ? comment : summary
|
72
|
+
end
|
73
|
+
|
74
|
+
# Outcome methods
|
75
|
+
|
76
|
+
def success!
|
77
|
+
self.outcome = SUCCESS
|
78
|
+
end
|
79
|
+
|
80
|
+
def success?
|
81
|
+
outcome == SUCCESS
|
82
|
+
end
|
83
|
+
|
84
|
+
def failure!
|
85
|
+
self.outcome = FAILURE
|
86
|
+
end
|
87
|
+
|
88
|
+
def failure?
|
89
|
+
outcome == FAILURE
|
90
|
+
end
|
91
|
+
|
92
|
+
# Object getter and setter
|
93
|
+
|
94
|
+
def object
|
95
|
+
@object ||= ActiveFedora::Base.find(pid) if pid
|
96
|
+
end
|
97
|
+
|
98
|
+
def object=(obj)
|
99
|
+
raise ArgumentError, "Can't set to new object" if obj.new_record?
|
100
|
+
self.pid = obj.pid
|
101
|
+
@object = obj
|
102
|
+
end
|
103
|
+
|
104
|
+
# Override pid setter to clear cached object instance variable
|
105
|
+
def pid=(pid)
|
106
|
+
@object = nil
|
107
|
+
super
|
108
|
+
end
|
109
|
+
|
110
|
+
# Return a date/time formatted as a string suitable for use as a PREMIS eventDateTime.
|
111
|
+
# Format also works for Solr.
|
112
|
+
# Force to UTC.
|
113
|
+
def event_date_time_s
|
114
|
+
event_date_time.utc.strftime DATE_TIME_FORMAT
|
115
|
+
end
|
116
|
+
|
117
|
+
# Return boolean indicator of object existence
|
118
|
+
def object_exists?
|
119
|
+
!object.nil?
|
120
|
+
rescue ActiveFedora::ObjectNotFoundError => e
|
121
|
+
false
|
122
|
+
end
|
123
|
+
|
124
|
+
protected
|
125
|
+
|
126
|
+
def set_defaults
|
127
|
+
self.attributes = defaults.reject { |attr, val| attribute_present? attr }
|
128
|
+
end
|
129
|
+
|
130
|
+
def defaults
|
131
|
+
{ event_date_time: default_event_date_time,
|
132
|
+
summary: default_summary,
|
133
|
+
software: default_software,
|
134
|
+
outcome: default_outcome
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
# Validation method
|
139
|
+
def object_exists
|
140
|
+
unless object_exists?
|
141
|
+
errors.add(:pid, "Object \"#{pid}\" does not exist in the repository")
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def default_software
|
146
|
+
DDR_SOFTWARE
|
147
|
+
end
|
148
|
+
|
149
|
+
def default_outcome
|
150
|
+
SUCCESS
|
151
|
+
end
|
152
|
+
|
153
|
+
def default_summary
|
154
|
+
self.class.description
|
155
|
+
end
|
156
|
+
|
157
|
+
def default_event_date_time
|
158
|
+
Time.now.utc
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Events
|
3
|
+
class FixityCheckEvent < Event
|
4
|
+
|
5
|
+
include PreservationEventBehavior
|
6
|
+
include ReindexObjectAfterSave
|
7
|
+
|
8
|
+
self.preservation_event_type = :fix
|
9
|
+
self.description = "Validation of datastream checksums"
|
10
|
+
|
11
|
+
DETAIL_PREAMBLE = "Datastream checksum validation results:"
|
12
|
+
DETAIL_TEMPLATE = "%{dsid} ... %{validation}"
|
13
|
+
|
14
|
+
# Message sent by ActiveSupport::Notifications
|
15
|
+
def self.call(*args)
|
16
|
+
notification = ActiveSupport::Notifications::Event.new(*args)
|
17
|
+
result = notification.payload[:result] # FixityCheck::Result instance
|
18
|
+
detail = [DETAIL_PREAMBLE]
|
19
|
+
result.results.each do |dsid, dsProfile|
|
20
|
+
validation = dsProfile["dsChecksumValid"] ? VALID : INVALID
|
21
|
+
detail << DETAIL_TEMPLATE % {dsid: dsid, validation: validation}
|
22
|
+
end
|
23
|
+
create(pid: result.pid,
|
24
|
+
event_date_time: notification.time,
|
25
|
+
outcome: result.success ? SUCCESS : FAILURE,
|
26
|
+
detail: detail.join("\n")
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_solr
|
31
|
+
{ Ddr::IndexFields::LAST_FIXITY_CHECK_ON => event_date_time_s,
|
32
|
+
Ddr::IndexFields::LAST_FIXITY_CHECK_OUTCOME => outcome }
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def default_software
|
38
|
+
self.class.repository_software
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Events
|
3
|
+
module PreservationEventBehavior
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
class_attribute :preservation_event_type
|
8
|
+
end
|
9
|
+
|
10
|
+
def preservation_event_type
|
11
|
+
self.class.preservation_event_type
|
12
|
+
end
|
13
|
+
|
14
|
+
EVENT_ID_TYPE = "Duke Digital Repository Event ID"
|
15
|
+
LINKING_OBJECT_ID_TYPE = "Duke Digital Repository PID"
|
16
|
+
|
17
|
+
def as_premis
|
18
|
+
Ddr::Metadata::PremisEvent.new.tap do |doc|
|
19
|
+
doc.event_type = PreservationEventType.label_for(preservation_event_type)
|
20
|
+
doc.event_id_type = EVENT_ID_TYPE
|
21
|
+
doc.event_id_value = id
|
22
|
+
doc.event_detail = summary
|
23
|
+
doc.linking_object_id_type = LINKING_OBJECT_ID_TYPE
|
24
|
+
doc.linking_object_id_value = pid
|
25
|
+
doc.event_outcome = outcome
|
26
|
+
doc.event_outcome_detail_note = detail
|
27
|
+
doc.event_date_time = event_date_time_s
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_xml
|
32
|
+
as_premis.to_xml
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rdf'
|
2
|
+
|
3
|
+
module Ddr
|
4
|
+
module Events
|
5
|
+
class PreservationEventType < RDF::StrictVocabulary("http://id.loc.gov/vocabulary/preservation/eventType/")
|
6
|
+
property :cap, label: "capture"
|
7
|
+
property :com, label: "compression"
|
8
|
+
property :cre, label: "creation"
|
9
|
+
property :dea, label: "deaccession"
|
10
|
+
property :dec, label: "decompression"
|
11
|
+
property :der, label: "decryption"
|
12
|
+
property :del, label: "deletion"
|
13
|
+
property :dig, label: "digital signature validation"
|
14
|
+
property :fix, label: "fixity check"
|
15
|
+
property :ing, label: "ingestion"
|
16
|
+
property :mes, label: "message digest calculation"
|
17
|
+
property :mig, label: "migration"
|
18
|
+
property :nor, label: "normalization"
|
19
|
+
property :rep, label: "replication"
|
20
|
+
property :val, label: "validation"
|
21
|
+
property :vir, label: "virus check"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Events
|
3
|
+
module ReindexObjectAfterSave
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
after_save :reindex_object, unless: "object.nil?" # in case saved with validate: false
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def reindex_object
|
13
|
+
object.update_index
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Events
|
3
|
+
class VirusCheckEvent < Event
|
4
|
+
|
5
|
+
include PreservationEventBehavior
|
6
|
+
include ReindexObjectAfterSave
|
7
|
+
|
8
|
+
self.preservation_event_type = :vir
|
9
|
+
self.description = "Content file scanned for viruses"
|
10
|
+
|
11
|
+
def to_solr
|
12
|
+
{ Ddr::IndexFields::LAST_VIRUS_CHECK_ON => event_date_time_s,
|
13
|
+
Ddr::IndexFields::LAST_VIRUS_CHECK_OUTCOME => outcome }
|
14
|
+
end
|
15
|
+
|
16
|
+
# Message sent by ActiveSupport::Notifications
|
17
|
+
def self.call(*args)
|
18
|
+
notification = ActiveSupport::Notifications::Event.new(*args)
|
19
|
+
result = notification.payload[:result] # Ddr::Antivirus::ScanResult instance
|
20
|
+
create(pid: notification.payload[:pid],
|
21
|
+
event_date_time: result.scanned_at,
|
22
|
+
outcome: result.ok? ? SUCCESS : FAILURE,
|
23
|
+
software: result.version,
|
24
|
+
detail: result.to_s
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Ddr
|
2
|
+
module IndexFields
|
3
|
+
|
4
|
+
def self.solr_name(*args)
|
5
|
+
ActiveFedora::SolrService.solr_name(*args)
|
6
|
+
end
|
7
|
+
|
8
|
+
ACTIVE_FEDORA_MODEL = solr_name :active_fedora_model, :stored_sortable
|
9
|
+
CONTENT_CONTROL_GROUP = solr_name :content_control_group, :searchable, type: :string
|
10
|
+
CONTENT_METADATA_PARSED = solr_name :content_metadata_parsed, :symbol
|
11
|
+
CONTENT_SIZE = solr_name :content_size, :stored_sortable, type: :integer
|
12
|
+
CONTENT_SIZE_HUMAN = solr_name :content_size_human, :symbol
|
13
|
+
HAS_MODEL = solr_name :has_model, :symbol
|
14
|
+
IDENTIFIER = solr_name :identifier, :stored_sortable
|
15
|
+
INTERNAL_URI = solr_name :internal_uri, :symbol
|
16
|
+
IS_ATTACHED_TO = solr_name :is_attached_to, :symbol
|
17
|
+
IS_EXTERNAL_TARGET_FOR = solr_name :is_external_target_for, :symbol
|
18
|
+
IS_GOVERNED_BY = solr_name :is_governed_by, :symbol
|
19
|
+
IS_MEMBER_OF = solr_name :is_member_of, :symbol
|
20
|
+
IS_MEMBER_OF_COLLECTION = solr_name :is_member_of_collection, :symbol
|
21
|
+
IS_PART_OF = solr_name :is_part_of, :symbol
|
22
|
+
LAST_FIXITY_CHECK_ON = solr_name :last_fixity_check_on, :stored_sortable, type: :date
|
23
|
+
LAST_FIXITY_CHECK_OUTCOME = solr_name :last_fixity_check_outcome, :symbol
|
24
|
+
LAST_VIRUS_CHECK_ON = solr_name :last_virus_check_on, :stored_sortable, type: :date
|
25
|
+
LAST_VIRUS_CHECK_OUTCOME = solr_name :last_virus_check_outcome, :symbol
|
26
|
+
MEDIA_SUB_TYPE = solr_name :content_media_sub_type, :facetable
|
27
|
+
MEDIA_MAJOR_TYPE = solr_name :content_media_major_type, :facetable
|
28
|
+
MEDIA_TYPE = solr_name :content_media_type, :symbol
|
29
|
+
OBJECT_PROFILE = solr_name :object_profile, :displayable
|
30
|
+
OBJECT_STATE = solr_name :object_state, :stored_sortable
|
31
|
+
OBJECT_CREATE_DATE = solr_name :system_create, :stored_sortable, type: :date
|
32
|
+
OBJECT_MODIFIED_DATE = solr_name :system_modified, :stored_sortable, type: :date
|
33
|
+
ORIGINAL_FILENAME = solr_name :original_filename, :symbol
|
34
|
+
PERMANENT_ID = solr_name :permanent_id, :stored_sortable, type: :string
|
35
|
+
TITLE = solr_name :title, :stored_sortable
|
36
|
+
WORKFLOW_STATE = solr_name :workflow_state, :stored_sortable
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/lib/ddr/metadata.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Metadata
|
3
|
+
extend ActiveSupport::Autoload
|
4
|
+
|
5
|
+
autoload :DukeTerms
|
6
|
+
autoload :PremisEvent
|
7
|
+
autoload :RDFVocabularyParser
|
8
|
+
autoload :RolesVocabulary
|
9
|
+
autoload :Vocabulary
|
10
|
+
|
11
|
+
PREDICATES = {
|
12
|
+
"http://projecthydra.org/ns/relations#" => {
|
13
|
+
is_attached_to: "isAttachedTo"
|
14
|
+
},
|
15
|
+
"http://www.loc.gov/mix/v20/externalTarget#" => {
|
16
|
+
is_external_target_for: "isExternalTargetFor",
|
17
|
+
has_external_target: "hasExternalTarget"
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Metadata
|
3
|
+
|
4
|
+
class DukeTerms < RDF::StrictVocabulary("http://library.duke.edu/metadata/terms/")
|
5
|
+
|
6
|
+
RDFVocabularyParser.new(
|
7
|
+
File.join(File.dirname( __FILE__ ), "sources", "duketerms.rdf.xml"),
|
8
|
+
"http://library.duke.edu/metadata/terms/").
|
9
|
+
term_symbols.sort.each do |term|
|
10
|
+
property term, type: "rdf:Property".freeze
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|