sufia-models 5.0.0 → 6.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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