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.
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