ddr-models 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/collection.rb +20 -11
- data/db/migrate/20150109192134_drop_workflow_state.rb~ +11 -0
- data/db/migrate/20150110023410_drop_workflow_states.rb +11 -0
- data/db/migrate/20150110023410_drop_workflow_states.rb~ +4 -0
- data/lib/ddr/auth/user.rb +1 -1
- data/lib/ddr/datastreams.rb +3 -2
- data/lib/ddr/datastreams/admin_metadata_datastream.rb +21 -0
- data/lib/ddr/datastreams/admin_metadata_datastream.rb~ +13 -0
- data/lib/ddr/managers.rb +3 -0
- data/lib/ddr/managers/manager.rb +14 -0
- data/lib/ddr/managers/manager.rb~ +14 -0
- data/lib/ddr/managers/role_manager.rb +31 -0
- data/lib/ddr/managers/role_manager.rb~ +21 -0
- data/lib/ddr/managers/workflow_manager.rb +33 -0
- data/lib/ddr/managers/workflow_manager.rb~ +33 -0
- data/lib/ddr/metadata.rb +0 -1
- data/lib/ddr/metadata/#permanent_id_record.rb# +13 -0
- data/lib/ddr/models.rb +1 -4
- data/lib/ddr/models/#has_ezid_identifier.rb# +26 -0
- data/lib/ddr/models/#has_permanent_identifier.rb# +9 -0
- data/lib/ddr/models/base.rb +1 -3
- data/lib/ddr/models/has_admin_metadata.rb +39 -0
- data/lib/ddr/models/{has_preservation_metadata.rb → has_admin_metadata.rb~} +11 -5
- data/lib/ddr/models/has_content.rb +1 -1
- data/lib/ddr/models/solr_document.rb +1 -1
- data/lib/ddr/models/version.rb +1 -1
- data/lib/ddr/vocab.rb +2 -1
- data/lib/ddr/vocab.rb~ +9 -0
- data/lib/ddr/vocab/asset.rb +11 -0
- data/lib/ddr/{metadata/roles_vocabulary.rb → vocab/roles.rb} +4 -2
- data/lib/ddr/vocab/workflow.rb~ +7 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +1 -11
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +2096 -3163
- data/spec/dummy/log/test.log +77302 -77584
- data/spec/models/ability_spec.rb +2 -2
- data/spec/models/collection_spec.rb +8 -1
- data/spec/models/has_admin_metadata_spec.rb +197 -0
- data/spec/models/has_admin_metadata_spec.rb~ +144 -0
- data/spec/models/user_spec.rb +6 -0
- metadata +40 -17
- data/lib/ddr/models/has_role_assignments.rb +0 -17
- data/lib/ddr/models/has_workflow.rb +0 -29
- data/lib/ddr/vocab/preservation.rb +0 -14
- data/lib/ddr/workflow.rb +0 -8
- data/lib/ddr/workflow/workflow_state.rb +0 -39
- data/spec/models/has_preservation_metadata_spec.rb +0 -109
- data/spec/models/has_role_assignments_spec.rb +0 -29
- data/spec/models/has_workflow_spec.rb +0 -54
- data/spec/models/role_assignments_datastream_spec.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfbf34b5dc2a35a84fc605e90f375592e210494c
|
4
|
+
data.tar.gz: 0664f48be4dfc59601d3bbff7cd48ba64edab9a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28e54cb29f53c664d7382e65d2da98e2d5914d92993a3e59034dcb0ef69d7b11b35df4294b954adc5939e5cd23657e2cac7a2a2c1077433ebf32388d1ec69348
|
7
|
+
data.tar.gz: 0f12f801b997855fa14f93a9ad1eff51ff5a80ae36e3ca2acdf1ba7506e4dfcf0fde3d1854eb309da0c4292ca99025127a4b27be11ed77ac316f7dee5d607e62
|
data/app/models/collection.rb
CHANGED
@@ -5,24 +5,26 @@
|
|
5
5
|
# via an isGovernedBy relation.
|
6
6
|
#
|
7
7
|
class Collection < Ddr::Models::Base
|
8
|
-
|
8
|
+
|
9
9
|
include Hydra::AdminPolicyBehavior
|
10
|
-
|
10
|
+
|
11
11
|
include Ddr::Models::HasChildren
|
12
12
|
include Ddr::Models::HasAttachments
|
13
|
-
|
13
|
+
|
14
14
|
has_attributes :default_license_title, datastream: Ddr::Datastreams::DEFAULT_RIGHTS, at: [:license, :title], multiple: false
|
15
15
|
has_attributes :default_license_description, datastream: Ddr::Datastreams::DEFAULT_RIGHTS, at: [:license, :description], multiple: false
|
16
16
|
has_attributes :default_license_url, datastream: Ddr::Datastreams::DEFAULT_RIGHTS, at: [:license, :url], multiple: false
|
17
|
-
|
17
|
+
|
18
18
|
has_many :children, property: :is_member_of_collection, class_name: 'Item'
|
19
19
|
has_many :targets, property: :is_external_target_for, class_name: 'Target'
|
20
|
-
|
20
|
+
|
21
21
|
alias_method :items, :children
|
22
22
|
alias_method :item_ids, :child_ids
|
23
|
-
|
23
|
+
|
24
|
+
after_create :set_admin_policy
|
25
|
+
|
24
26
|
validates_presence_of :title
|
25
|
-
|
27
|
+
|
26
28
|
# Returns the SolrDocuments for Components associated with the Collection through its member Items.
|
27
29
|
#
|
28
30
|
# @return A lazy enumerator of SolrDocuments.
|
@@ -35,7 +37,7 @@ class Collection < Ddr::Models::Base
|
|
35
37
|
results = ActiveFedora::SolrService.query(query, fq: filter, rows: 100000)
|
36
38
|
results.lazy.map {|doc| SolrDocument.new(doc)}
|
37
39
|
end
|
38
|
-
|
40
|
+
|
39
41
|
# Returns the license attributes provided as default values for objects governed by the Collection.
|
40
42
|
#
|
41
43
|
# @return [Hash] the attributes, `:title`, `:description`, and `:url`.
|
@@ -44,7 +46,7 @@ class Collection < Ddr::Models::Base
|
|
44
46
|
{title: default_license_title, description: default_license_description, url: default_license_url}
|
45
47
|
end
|
46
48
|
end
|
47
|
-
|
49
|
+
|
48
50
|
# Sets the default license attributes for objects governed by the Collection.
|
49
51
|
def default_license=(new_license)
|
50
52
|
raise ArgumentError unless new_license.is_a?(Hash) # XXX don't do this - not duck-typeable
|
@@ -53,7 +55,7 @@ class Collection < Ddr::Models::Base
|
|
53
55
|
self.default_license_description = l[:description]
|
54
56
|
self.default_license_url = l[:url]
|
55
57
|
end
|
56
|
-
|
58
|
+
|
57
59
|
# Returns a list of entities (either users or groups) having a default access level on objects governed by the Collection.
|
58
60
|
#
|
59
61
|
# @param type [String] the type of entity, "user" or "group".
|
@@ -62,11 +64,18 @@ class Collection < Ddr::Models::Base
|
|
62
64
|
def default_entities_for_permission(type, access)
|
63
65
|
default_permissions.collect { |p| p[:name] if p[:type] == type and p[:access] == access }.compact
|
64
66
|
end
|
65
|
-
|
67
|
+
|
66
68
|
["discover", "read", "edit"].each do |access|
|
67
69
|
["user", "group"].each do |type|
|
68
70
|
define_method("default_#{access}_#{type}s") { default_entities_for_permission(type, access) }
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
74
|
+
private
|
75
|
+
|
76
|
+
def set_admin_policy
|
77
|
+
self.admin_policy = self
|
78
|
+
self.save
|
79
|
+
end
|
80
|
+
|
72
81
|
end
|
data/lib/ddr/auth/user.rb
CHANGED
data/lib/ddr/datastreams.rb
CHANGED
@@ -22,12 +22,13 @@ module Ddr
|
|
22
22
|
|
23
23
|
CHECKSUM_TYPES = [ CHECKSUM_TYPE_MD5, CHECKSUM_TYPE_SHA1, CHECKSUM_TYPE_SHA256, CHECKSUM_TYPE_SHA384, CHECKSUM_TYPE_SHA512 ]
|
24
24
|
|
25
|
+
autoload :AdminMetadataDatastream
|
25
26
|
autoload :ContentMetadataDatastream
|
26
27
|
autoload :DescriptiveMetadataDatastream
|
27
|
-
autoload :PreservationMetadataDatastream
|
28
|
+
#autoload :PreservationMetadataDatastream
|
28
29
|
autoload :PropertiesDatastream
|
29
30
|
autoload :DatastreamBehavior
|
30
|
-
autoload :RoleAssignmentsDatastream
|
31
|
+
#autoload :RoleAssignmentsDatastream
|
31
32
|
|
32
33
|
end
|
33
34
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "rdf-vocab"
|
2
|
+
|
3
|
+
module Ddr
|
4
|
+
module Datastreams
|
5
|
+
class AdminMetadataDatastream < ActiveFedora::NtriplesRDFDatastream
|
6
|
+
|
7
|
+
property :permanent_id, predicate: Ddr::Vocab::Asset.permanentId
|
8
|
+
property :permanent_url, predicate: Ddr::Vocab::Asset.permanentUrl
|
9
|
+
property :original_filename, predicate: RDF::Vocab::PREMIS::V1.hasOriginalName
|
10
|
+
property :workflow_state, predicate: Ddr::Vocab::Asset.workflowState
|
11
|
+
|
12
|
+
Ddr::Vocab::Roles.each do |term|
|
13
|
+
property Ddr::Metadata::Vocabulary.term_name(Ddr::Vocab::Roles, term),
|
14
|
+
predicate: term do |index|
|
15
|
+
index.as :symbol
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Datastreams
|
3
|
+
class AdminMetadataDatastream < ActiveFedora::NtriplesRDFDatastream
|
4
|
+
|
5
|
+
property :permanent_id,
|
6
|
+
predicate: Ddr::Vocab::Preservation.permanentId
|
7
|
+
|
8
|
+
property :permanent_url,
|
9
|
+
predicate: Ddr::Vocab::Preservation.permanentUrl
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/ddr/managers.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Managers
|
3
|
+
class RoleManager
|
4
|
+
|
5
|
+
attr_reader :object
|
6
|
+
|
7
|
+
def initialize(object)
|
8
|
+
@object = object
|
9
|
+
end
|
10
|
+
|
11
|
+
def principal_has_role?(principal, role)
|
12
|
+
( principals(role) & Array(principal) ).any?
|
13
|
+
end
|
14
|
+
|
15
|
+
def principals(role)
|
16
|
+
object.adminMetadata.send(role)
|
17
|
+
end
|
18
|
+
|
19
|
+
def method_missing(method, *args)
|
20
|
+
if args.size == 0
|
21
|
+
begin
|
22
|
+
return principals(method)
|
23
|
+
rescue NoMethodError
|
24
|
+
end
|
25
|
+
end
|
26
|
+
super
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Managers
|
3
|
+
class RoleManager
|
4
|
+
|
5
|
+
attr_reader :object
|
6
|
+
|
7
|
+
def initialize(object)
|
8
|
+
@object = object
|
9
|
+
end
|
10
|
+
|
11
|
+
def principal_has_role?(principal, role)
|
12
|
+
( principals(role) & Array(principal) ).any?
|
13
|
+
end
|
14
|
+
|
15
|
+
def principals(role)
|
16
|
+
object.adminMetadata.send(role)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Managers
|
3
|
+
class WorkflowManager < Manager
|
4
|
+
|
5
|
+
PUBLISHED = "published"
|
6
|
+
UNPUBLISHED = "unpublished"
|
7
|
+
|
8
|
+
def published?
|
9
|
+
object.workflow_state == PUBLISHED
|
10
|
+
end
|
11
|
+
|
12
|
+
def publish
|
13
|
+
object.workflow_state = PUBLISHED
|
14
|
+
end
|
15
|
+
|
16
|
+
def publish!
|
17
|
+
publish
|
18
|
+
object.save
|
19
|
+
end
|
20
|
+
|
21
|
+
def unpublish
|
22
|
+
object.workflow_state = UNPUBLISHED
|
23
|
+
end
|
24
|
+
|
25
|
+
def unpublish!
|
26
|
+
unpublish
|
27
|
+
object.save
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Managers
|
3
|
+
class WorkflowManager < Manager
|
4
|
+
|
5
|
+
PUBLISHED = "published"
|
6
|
+
UNPUBLISHED = nil
|
7
|
+
|
8
|
+
def published?
|
9
|
+
object.workflow_state == PUBLISHED
|
10
|
+
end
|
11
|
+
|
12
|
+
def publish
|
13
|
+
object.workflow_state = PUBLISHED
|
14
|
+
end
|
15
|
+
|
16
|
+
def publish!
|
17
|
+
publish
|
18
|
+
object.save
|
19
|
+
end
|
20
|
+
|
21
|
+
def unpublish
|
22
|
+
object.workflow_state = UNPUBLISHED
|
23
|
+
end
|
24
|
+
|
25
|
+
def unpublish!
|
26
|
+
unpublish
|
27
|
+
object.save
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
data/lib/ddr/metadata.rb
CHANGED
data/lib/ddr/models.rb
CHANGED
@@ -20,7 +20,6 @@ require 'ddr/metadata'
|
|
20
20
|
require 'ddr/notifications'
|
21
21
|
require 'ddr/utils'
|
22
22
|
require 'ddr/vocab'
|
23
|
-
require 'ddr/workflow'
|
24
23
|
|
25
24
|
module Ddr
|
26
25
|
module Models
|
@@ -34,15 +33,13 @@ module Ddr
|
|
34
33
|
autoload :ChecksumInvalid, 'ddr/models/error'
|
35
34
|
autoload :FixityCheckable
|
36
35
|
autoload :Governable
|
36
|
+
autoload :HasAdminMetadata
|
37
37
|
autoload :HasAttachments
|
38
38
|
autoload :HasChildren
|
39
39
|
autoload :HasContent
|
40
40
|
autoload :HasContentMetadata
|
41
|
-
autoload :HasPreservationMetadata
|
42
41
|
autoload :HasProperties
|
43
|
-
autoload :HasRoleAssignments
|
44
42
|
autoload :HasThumbnail
|
45
|
-
autoload :HasWorkflow
|
46
43
|
autoload :Indexing
|
47
44
|
autoload :FileManagement
|
48
45
|
autoload :Licensable
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ddr
|
2
|
+
module Models
|
3
|
+
module HasEzidIdentifier
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
|
8
|
+
def create_identifier
|
9
|
+
create_ezid
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def create_ezid
|
15
|
+
metadata = Ddr::Metadata::Ezid.new(self)
|
16
|
+
ezid_identifier = Ezid::Identifier.create(metadata)
|
17
|
+
Ddr::Metadata::PermanentIdentifier.new(ezid_identifier.id)
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_ezid
|
21
|
+
Ezid::Identifier.find(permanent_id.value)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|