ddr-models 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/collection.rb +20 -11
  3. data/db/migrate/20150109192134_drop_workflow_state.rb~ +11 -0
  4. data/db/migrate/20150110023410_drop_workflow_states.rb +11 -0
  5. data/db/migrate/20150110023410_drop_workflow_states.rb~ +4 -0
  6. data/lib/ddr/auth/user.rb +1 -1
  7. data/lib/ddr/datastreams.rb +3 -2
  8. data/lib/ddr/datastreams/admin_metadata_datastream.rb +21 -0
  9. data/lib/ddr/datastreams/admin_metadata_datastream.rb~ +13 -0
  10. data/lib/ddr/managers.rb +3 -0
  11. data/lib/ddr/managers/manager.rb +14 -0
  12. data/lib/ddr/managers/manager.rb~ +14 -0
  13. data/lib/ddr/managers/role_manager.rb +31 -0
  14. data/lib/ddr/managers/role_manager.rb~ +21 -0
  15. data/lib/ddr/managers/workflow_manager.rb +33 -0
  16. data/lib/ddr/managers/workflow_manager.rb~ +33 -0
  17. data/lib/ddr/metadata.rb +0 -1
  18. data/lib/ddr/metadata/#permanent_id_record.rb# +13 -0
  19. data/lib/ddr/models.rb +1 -4
  20. data/lib/ddr/models/#has_ezid_identifier.rb# +26 -0
  21. data/lib/ddr/models/#has_permanent_identifier.rb# +9 -0
  22. data/lib/ddr/models/base.rb +1 -3
  23. data/lib/ddr/models/has_admin_metadata.rb +39 -0
  24. data/lib/ddr/models/{has_preservation_metadata.rb → has_admin_metadata.rb~} +11 -5
  25. data/lib/ddr/models/has_content.rb +1 -1
  26. data/lib/ddr/models/solr_document.rb +1 -1
  27. data/lib/ddr/models/version.rb +1 -1
  28. data/lib/ddr/vocab.rb +2 -1
  29. data/lib/ddr/vocab.rb~ +9 -0
  30. data/lib/ddr/vocab/asset.rb +11 -0
  31. data/lib/ddr/{metadata/roles_vocabulary.rb → vocab/roles.rb} +4 -2
  32. data/lib/ddr/vocab/workflow.rb~ +7 -0
  33. data/spec/dummy/db/development.sqlite3 +0 -0
  34. data/spec/dummy/db/schema.rb +1 -11
  35. data/spec/dummy/db/test.sqlite3 +0 -0
  36. data/spec/dummy/log/development.log +2096 -3163
  37. data/spec/dummy/log/test.log +77302 -77584
  38. data/spec/models/ability_spec.rb +2 -2
  39. data/spec/models/collection_spec.rb +8 -1
  40. data/spec/models/has_admin_metadata_spec.rb +197 -0
  41. data/spec/models/has_admin_metadata_spec.rb~ +144 -0
  42. data/spec/models/user_spec.rb +6 -0
  43. metadata +40 -17
  44. data/lib/ddr/models/has_role_assignments.rb +0 -17
  45. data/lib/ddr/models/has_workflow.rb +0 -29
  46. data/lib/ddr/vocab/preservation.rb +0 -14
  47. data/lib/ddr/workflow.rb +0 -8
  48. data/lib/ddr/workflow/workflow_state.rb +0 -39
  49. data/spec/models/has_preservation_metadata_spec.rb +0 -109
  50. data/spec/models/has_role_assignments_spec.rb +0 -29
  51. data/spec/models/has_workflow_spec.rb +0 -54
  52. 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: c2c4212f81242423c5cc23aa8bcd3882c39b03cb
4
- data.tar.gz: fe720229ff82b5bd7455cb50e8a8749801e35bfd
3
+ metadata.gz: cfbf34b5dc2a35a84fc605e90f375592e210494c
4
+ data.tar.gz: 0664f48be4dfc59601d3bbff7cd48ba64edab9a5
5
5
  SHA512:
6
- metadata.gz: bea43010b15194c06143c3d39ead986d3d81b0601eda2f3213501b524e613b00b0048b0463fb2b6ee58f555d8fa257166ffaad4f6c6e513c5164fbffdcfa6728
7
- data.tar.gz: f2003ea486423fbfa359bc24c4866ea3dfa3d5feb5b627f2bf6251c09351e5c3b6d490de5bdc1e6c33ecc4f5c1f62ae783a7ce9e5e9fda3761b921830d32578c
6
+ metadata.gz: 28e54cb29f53c664d7382e65d2da98e2d5914d92993a3e59034dcb0ef69d7b11b35df4294b954adc5939e5cd23657e2cac7a2a2c1077433ebf32388d1ec69348
7
+ data.tar.gz: 0f12f801b997855fa14f93a9ad1eff51ff5a80ae36e3ca2acdf1ba7506e4dfcf0fde3d1854eb309da0c4292ca99025127a4b27be11ed77ac316f7dee5d607e62
@@ -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
@@ -0,0 +1,11 @@
1
+ class DropWorkflowState < ActiveRecord::Migration
2
+ def up
3
+ if table_exists?("workflow_states")
4
+ drop_table "workflow_states"
5
+ end
6
+ end
7
+
8
+ def down
9
+ raise ActiveRecord::IrreversibleMigration
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class DropWorkflowStates < ActiveRecord::Migration
2
+ def up
3
+ if table_exists?("workflow_states")
4
+ drop_table "workflow_states"
5
+ end
6
+ end
7
+
8
+ def down
9
+ raise ActiveRecord::IrreversibleMigration
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ class DropWorkflowStates < ActiveRecord::Migration
2
+ def change
3
+ end
4
+ end
data/lib/ddr/auth/user.rb CHANGED
@@ -31,7 +31,7 @@ module Ddr
31
31
  end
32
32
 
33
33
  def group_service
34
- @group_service ||= GroupService.new
34
+ @group_service ||= RemoteGroupService.new
35
35
  end
36
36
 
37
37
  def to_s
@@ -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
@@ -2,7 +2,10 @@ module Ddr
2
2
  module Managers
3
3
  extend ActiveSupport::Autoload
4
4
 
5
+ autoload :Manager
5
6
  autoload :PermanentIdManager
7
+ autoload :RoleManager
8
+ autoload :WorkflowManager
6
9
 
7
10
  end
8
11
  end
@@ -0,0 +1,14 @@
1
+ module Ddr
2
+ module Managers
3
+ # @abstract
4
+ class Manager
5
+
6
+ attr_reader :object
7
+
8
+ def initialize(object)
9
+ @object = object
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Ddr
2
+ module Managers
3
+ # @abstract
4
+ class Manager
5
+
6
+ attr_reader :object
7
+
8
+ def initialize
9
+ @object = object
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -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
@@ -5,7 +5,6 @@ module Ddr
5
5
  autoload :DukeTerms
6
6
  autoload :PremisEvent
7
7
  autoload :RDFVocabularyParser
8
- autoload :RolesVocabulary
9
8
  autoload :Vocabulary
10
9
 
11
10
  PREDICATES = {
@@ -0,0 +1,13 @@
1
+ module Ddr
2
+ module Metadata
3
+ class PermanentIdRecord
4
+
5
+ def self.find(id)
6
+ Ezid::Identifier.find(id)
7
+ end
8
+
9
+
10
+
11
+ end
12
+ end
13
+ end
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
@@ -0,0 +1,9 @@
1
+ module Ddr
2
+ module Models
3
+ module HasPermanentIdentifier
4
+
5
+
6
+
7
+ end
8
+ end
9
+ end