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.
- checksums.yaml +4 -4
- data/app/actors/sufia/generic_file/actor.rb +8 -10
- data/app/jobs/active_fedora_pid_based_job.rb +2 -3
- data/app/jobs/audit_job.rb +46 -32
- data/app/jobs/batch_update_job.rb +9 -8
- data/app/jobs/import_url_job.rb +2 -2
- data/app/models/batch.rb +11 -12
- data/app/models/checksum_audit_log.rb +12 -10
- data/app/models/concerns/sufia/ability.rb +4 -6
- data/app/models/concerns/sufia/collection.rb +4 -5
- data/app/models/concerns/sufia/generic_file/batches.rb +29 -0
- data/app/models/concerns/sufia/generic_file/characterization.rb +3 -3
- data/app/models/concerns/sufia/generic_file/content.rb +13 -0
- data/app/models/concerns/sufia/generic_file/derivatives.rb +5 -5
- data/app/models/concerns/sufia/generic_file/export.rb +4 -0
- data/app/models/concerns/sufia/generic_file/full_text_indexing.rb +2 -2
- data/app/models/concerns/sufia/generic_file/indexing.rb +23 -0
- data/app/models/concerns/sufia/generic_file/metadata.rb +80 -11
- data/app/models/concerns/sufia/generic_file/proxy_deposit.rb +12 -3
- data/app/models/concerns/sufia/generic_file/versions.rb +4 -4
- data/app/models/concerns/sufia/generic_file/web_form.rb +14 -6
- data/app/models/concerns/sufia/generic_file.rb +3 -86
- data/app/models/concerns/sufia/model_methods.rb +11 -9
- data/app/models/concerns/sufia/user.rb +11 -33
- data/app/models/datastreams/file_content_datastream.rb +1 -1
- data/app/models/datastreams/fits_datastream.rb +1 -1
- data/app/models/file_usage.rb +3 -3
- data/app/models/local_authority.rb +2 -2
- data/app/models/proxy_deposit_request.rb +1 -1
- data/app/services/sufia/generic_file_audit_service.rb +83 -0
- data/app/services/sufia/id_service.rb +5 -5
- data/app/services/sufia/noid.rb +10 -7
- data/app/services/sufia/repository_audit_service.rb +9 -0
- data/lib/generators/sufia/models/cached_stats_generator.rb +47 -3
- data/lib/generators/sufia/models/install_generator.rb +31 -11
- data/lib/generators/sufia/models/proxies_generator.rb +31 -2
- data/lib/generators/sufia/models/templates/config/sufia.rb +10 -0
- data/lib/generators/sufia/models/upgrade400_generator.rb +33 -2
- data/lib/sufia/models/engine.rb +13 -4
- data/lib/sufia/models/file_content/versions.rb +9 -11
- data/lib/sufia/models/stats/user_stat_importer.rb +5 -9
- data/lib/sufia/models/version.rb +1 -1
- data/lib/sufia/permissions/writable.rb +34 -16
- data/sufia-models.gemspec +4 -2
- metadata +54 -33
- data/app/models/concerns/sufia/generic_file/audit.rb +0 -116
- data/app/models/concerns/sufia/generic_file/reload_on_save.rb +0 -18
- data/app/models/concerns/sufia/properties_datastream_behavior.rb +0 -32
- data/app/models/datastreams/batch_rdf_datastream.rb +0 -6
- data/app/models/datastreams/generic_file_rdf_datastream.rb +0 -69
- data/app/models/datastreams/paranoid_rights_datastream.rb +0 -22
- data/app/models/datastreams/properties_datastream.rb +0 -4
- data/app/models/sufia/orcid_validator.rb +0 -8
- data/lib/generators/sufia/models/abstract_migration_generator.rb +0 -30
- data/lib/generators/sufia/models/orcid_field_generator.rb +0 -19
- data/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +0 -5
- 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,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,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,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
|