sufia-models 5.0.0 → 6.0.0.beta1

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/app/actors/sufia/generic_file/actor.rb +8 -10
  3. data/app/jobs/active_fedora_pid_based_job.rb +2 -3
  4. data/app/jobs/audit_job.rb +46 -32
  5. data/app/jobs/batch_update_job.rb +9 -8
  6. data/app/jobs/import_url_job.rb +2 -2
  7. data/app/models/batch.rb +11 -12
  8. data/app/models/checksum_audit_log.rb +12 -10
  9. data/app/models/concerns/sufia/ability.rb +4 -6
  10. data/app/models/concerns/sufia/collection.rb +4 -5
  11. data/app/models/concerns/sufia/generic_file/batches.rb +29 -0
  12. data/app/models/concerns/sufia/generic_file/characterization.rb +3 -3
  13. data/app/models/concerns/sufia/generic_file/content.rb +13 -0
  14. data/app/models/concerns/sufia/generic_file/derivatives.rb +5 -5
  15. data/app/models/concerns/sufia/generic_file/export.rb +4 -0
  16. data/app/models/concerns/sufia/generic_file/full_text_indexing.rb +2 -2
  17. data/app/models/concerns/sufia/generic_file/indexing.rb +23 -0
  18. data/app/models/concerns/sufia/generic_file/metadata.rb +80 -11
  19. data/app/models/concerns/sufia/generic_file/proxy_deposit.rb +12 -3
  20. data/app/models/concerns/sufia/generic_file/versions.rb +4 -4
  21. data/app/models/concerns/sufia/generic_file/web_form.rb +14 -6
  22. data/app/models/concerns/sufia/generic_file.rb +3 -86
  23. data/app/models/concerns/sufia/model_methods.rb +11 -9
  24. data/app/models/concerns/sufia/user.rb +11 -33
  25. data/app/models/datastreams/file_content_datastream.rb +1 -1
  26. data/app/models/datastreams/fits_datastream.rb +1 -1
  27. data/app/models/file_usage.rb +3 -3
  28. data/app/models/local_authority.rb +2 -2
  29. data/app/models/proxy_deposit_request.rb +1 -1
  30. data/app/services/sufia/generic_file_audit_service.rb +83 -0
  31. data/app/services/sufia/id_service.rb +5 -5
  32. data/app/services/sufia/noid.rb +10 -7
  33. data/app/services/sufia/repository_audit_service.rb +9 -0
  34. data/lib/generators/sufia/models/cached_stats_generator.rb +47 -3
  35. data/lib/generators/sufia/models/install_generator.rb +31 -11
  36. data/lib/generators/sufia/models/proxies_generator.rb +31 -2
  37. data/lib/generators/sufia/models/templates/config/sufia.rb +10 -0
  38. data/lib/generators/sufia/models/upgrade400_generator.rb +33 -2
  39. data/lib/sufia/models/engine.rb +13 -4
  40. data/lib/sufia/models/file_content/versions.rb +9 -11
  41. data/lib/sufia/models/stats/user_stat_importer.rb +5 -9
  42. data/lib/sufia/models/version.rb +1 -1
  43. data/lib/sufia/permissions/writable.rb +34 -16
  44. data/sufia-models.gemspec +4 -2
  45. metadata +54 -33
  46. data/app/models/concerns/sufia/generic_file/audit.rb +0 -116
  47. data/app/models/concerns/sufia/generic_file/reload_on_save.rb +0 -18
  48. data/app/models/concerns/sufia/properties_datastream_behavior.rb +0 -32
  49. data/app/models/datastreams/batch_rdf_datastream.rb +0 -6
  50. data/app/models/datastreams/generic_file_rdf_datastream.rb +0 -69
  51. data/app/models/datastreams/paranoid_rights_datastream.rb +0 -22
  52. data/app/models/datastreams/properties_datastream.rb +0 -4
  53. data/app/models/sufia/orcid_validator.rb +0 -8
  54. data/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
  55. data/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
  56. data/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
  57. data/lib/generators/sufia/models/user_stats_generator.rb +0 -31
@@ -1,32 +0,0 @@
1
- module Sufia
2
- module PropertiesDatastreamBehavior
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- set_terminology do |t|
7
- t.root(path: "fields")
8
- # This is where we put the user id of the object depositor -- impacts permissions/access controls
9
- t.depositor index_as: [:symbol, :stored_searchable]
10
- # This is where we put the relative path of the file if submitted as a folder
11
- t.relative_path
12
- t.import_url path: 'importUrl', index_as: :symbol
13
- t.proxy_depositor path: 'proxyDepositor', index_as: :symbol
14
- # This value is set when a user indicates they are depositing this for someone else
15
- t.on_behalf_of path: 'onBehalfOf', index_as: :symbol
16
- end
17
- end
18
-
19
- module ClassMethods
20
- def xml_template
21
- builder = Nokogiri::XML::Builder.new do |xml|
22
- xml.fields
23
- end
24
- builder.doc
25
- end
26
- end
27
-
28
- def prefix
29
- ""
30
- end
31
- end
32
- end
@@ -1,6 +0,0 @@
1
- class BatchRdfDatastream < ActiveFedora::NtriplesRDFDatastream
2
- property :part, predicate: RDF::DC.hasPart
3
- property :creator, predicate: RDF::DC.creator
4
- property :title, predicate: RDF::DC.title
5
- property :status, predicate: RDF::DC.type
6
- end
@@ -1,69 +0,0 @@
1
- class GenericFileRdfDatastream < ActiveFedora::NtriplesRDFDatastream
2
- property :part_of, predicate: RDF::DC.isPartOf
3
- property :resource_type, predicate: RDF::DC.type do |index|
4
- index.as :stored_searchable, :facetable
5
- end
6
- property :title, predicate: RDF::DC.title do |index|
7
- index.as :stored_searchable, :facetable
8
- end
9
- property :creator, predicate: RDF::DC.creator do |index|
10
- index.as :stored_searchable, :facetable
11
- end
12
- property :contributor, predicate: RDF::DC.contributor do |index|
13
- index.as :stored_searchable, :facetable
14
- end
15
- property :description, predicate: RDF::DC.description do |index|
16
- index.type :text
17
- index.as :stored_searchable
18
- end
19
- property :tag, predicate: RDF::DC.relation do |index|
20
- index.as :stored_searchable, :facetable
21
- end
22
- property :rights, predicate: RDF::DC.rights do |index|
23
- index.as :stored_searchable
24
- end
25
- property :publisher, predicate: RDF::DC.publisher do |index|
26
- index.as :stored_searchable, :facetable
27
- end
28
- property :date_created, predicate: RDF::DC.created do |index|
29
- index.as :stored_searchable
30
- end
31
- property :date_uploaded, predicate: RDF::DC.dateSubmitted do |index|
32
- index.type :date
33
- index.as :stored_sortable
34
- end
35
- property :date_modified, predicate: RDF::DC.modified do |index|
36
- index.type :date
37
- index.as :stored_sortable
38
- end
39
- property :subject, predicate: RDF::DC.subject do |index|
40
- index.as :stored_searchable, :facetable
41
- end
42
- property :language, predicate: RDF::DC.language do |index|
43
- index.as :stored_searchable, :facetable
44
- end
45
- property :identifier, predicate: RDF::DC.identifier do |index|
46
- index.as :stored_searchable
47
- end
48
- property :based_near, predicate: RDF::FOAF.based_near do |index|
49
- index.as :stored_searchable, :facetable
50
- end
51
- property :related_url, predicate: RDF::RDFS.seeAlso do |index|
52
- index.as :stored_searchable
53
- end
54
- property :bibliographic_citation, predicate: RDF::DC.bibliographicCitation do |index|
55
- index.as :stored_searchable
56
- end
57
- property :source, predicate: RDF::DC.source do |index|
58
- index.as :stored_searchable
59
- end
60
-
61
- # TODO: Move this somewhere more appropriate
62
- begin
63
- LocalAuthority.register_vocabulary(self, "subject", "lc_subjects")
64
- LocalAuthority.register_vocabulary(self, "language", "lexvo_languages")
65
- LocalAuthority.register_vocabulary(self, "tag", "lc_genres")
66
- rescue
67
- puts "tables for vocabularies missing"
68
- end
69
- end
@@ -1,22 +0,0 @@
1
- # subclass built-in Hydra RightsDatastream and build in extra model-level validation
2
- class ParanoidRightsDatastream < Hydra::Datastream::RightsMetadata
3
- use_terminology Hydra::Datastream::RightsMetadata
4
-
5
- VALIDATIONS = [
6
- {key: :edit_users, message: 'Depositor must have edit access', condition: lambda { |obj| !obj.edit_users.include?(obj.depositor) }},
7
- {key: :edit_groups, message: 'Public cannot have edit access', condition: lambda { |obj| obj.edit_groups.include?('public') }},
8
- {key: :edit_groups, message: 'Registered cannot have edit access', condition: lambda { |obj| obj.edit_groups.include?('registered') }}
9
- ]
10
-
11
- def validate(object)
12
- valid = true
13
- VALIDATIONS.each do |validation|
14
- if validation[:condition].call(object)
15
- object.errors[validation[:key]] ||= []
16
- object.errors[validation[:key]] << validation[:message]
17
- valid = false
18
- end
19
- end
20
- return valid
21
- end
22
- end
@@ -1,4 +0,0 @@
1
- # properties datastream: catch-all for info that didn't have another home. Particularly depositor.
2
- class PropertiesDatastream < ActiveFedora::OmDatastream
3
- include Sufia::PropertiesDatastreamBehavior
4
- end
@@ -1,8 +0,0 @@
1
- module Sufia
2
- class OrcidValidator < ActiveModel::Validator
3
- def validate(record)
4
- return if record.orcid.blank?
5
- record.errors.add(:orcid, 'must be a string of 19 characters, e.g., "0000-0000-0000-0000"') unless /\d{4}-\d{4}-\d{4}-\d{4}/.match(record.orcid)
6
- end
7
- end
8
- end
@@ -1,30 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'rails/generators'
3
- require 'rails/generators/migration'
4
-
5
- class Sufia::Models::AbstractMigrationGenerator < Rails::Generators::Base
6
- include Rails::Generators::Migration
7
-
8
- # Implement the required interface for Rails::Generators::Migration.
9
- # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
10
- def self.next_migration_number(path)
11
- if @prev_migration_nr
12
- @prev_migration_nr += 1
13
- else
14
- if last_migration = Dir[File.join(path, '*.rb')].sort.last
15
- @prev_migration_nr = last_migration.sub(File.join(path, '/'), '').to_i + 1
16
- else
17
- @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
18
- end
19
- end
20
- @prev_migration_nr.to_s
21
- end
22
-
23
- protected
24
-
25
- def better_migration_template(file)
26
- migration_template "migrations/#{file}", "db/migrate/#{file}"
27
- rescue Rails::Generators::Error => e
28
- say_status("warning", e.message, :yellow)
29
- end
30
- end
@@ -1,19 +0,0 @@
1
- require_relative 'abstract_migration_generator'
2
-
3
- class Sufia::Models::OrcidFieldGenerator < Sufia::Models::AbstractMigrationGenerator
4
- source_root File.expand_path('../templates', __FILE__)
5
-
6
- desc """
7
- This generator adds a field to hold users' ORCIDs to your application:
8
- 1. Creates a database migration if they do not exist in /db/migrate
9
- """
10
-
11
- def banner
12
- say_status("warning", "ADDING ORCID FIELD TO USER MODEL", :yellow)
13
- end
14
-
15
- # Setup the database migration
16
- def copy_migrations
17
- better_migration_template 'add_orcid_to_users.rb'
18
- end
19
- end
@@ -1,5 +0,0 @@
1
- class AddOrcidToUsers < ActiveRecord::Migration
2
- def change
3
- add_column :users, :orcid, :string
4
- end
5
- end
@@ -1,31 +0,0 @@
1
- require_relative 'abstract_migration_generator'
2
-
3
- class Sufia::Models::UserStatsGenerator < Sufia::Models::AbstractMigrationGenerator
4
- source_root File.expand_path('../templates', __FILE__)
5
- argument :model_name, type: :string , default: "user"
6
-
7
- desc """
8
- This generator adds usage stats methods to the user model in your application:
9
- """
10
-
11
- def banner
12
- say_status("warning", "ADDING USER STATS-RELATED ABILITIES TO SUFIA MODELS", :yellow)
13
- end
14
-
15
- # Setup the database migrations
16
- def copy_migrations
17
- better_migration_template 'create_user_stats.rb'
18
- end
19
-
20
- def add_stats_mixin_to_user_model
21
- file_path = "app/models/#{model_name.underscore}.rb"
22
-
23
- if File.exists?(file_path)
24
- inject_into_file file_path, after: /include Sufia\:\:User.*$/ do
25
- "\n include Sufia::UserUsageStats"
26
- end
27
- else
28
- puts " \e[31mFailure\e[0m Sufia requires a user object. This generator assumes that the model is defined in the file #{file_path}, which does not exist. If you used a different name, please re-run the generator and provide that name as an argument. Such as \b rails g sufia:models:user_stats client"
29
- end
30
- end
31
- end