sufia-models 6.2.0 → 6.3.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.
- checksums.yaml +4 -4
- data/app/actors/sufia/generic_file/actor.rb +4 -7
- data/app/jobs/active_fedora_id_based_job.rb +1 -1
- data/app/jobs/active_fedora_pid_based_job.rb +1 -2
- data/app/jobs/audit_job.rb +1 -1
- data/app/jobs/batch_update_job.rb +6 -6
- data/app/jobs/create_derivatives_job.rb +2 -3
- data/app/jobs/import_url_job.rb +8 -5
- data/app/jobs/ingest_local_file_job.rb +1 -1
- data/app/models/batch.rb +15 -21
- data/app/models/checksum_audit_log.rb +0 -1
- data/app/models/concerns/sufia/ability.rb +5 -0
- data/app/models/concerns/sufia/collection_behavior.rb +3 -2
- data/app/models/concerns/sufia/file_stat_utils.rb +19 -21
- data/app/models/concerns/sufia/generic_file/batches.rb +1 -3
- data/app/models/concerns/sufia/generic_file/characterization.rb +11 -16
- data/app/models/concerns/sufia/generic_file/content.rb +0 -1
- data/app/models/concerns/sufia/generic_file/derivatives.rb +2 -2
- data/app/models/concerns/sufia/generic_file/export.rb +50 -59
- data/app/models/concerns/sufia/generic_file/full_text_indexing.rb +15 -18
- data/app/models/concerns/sufia/generic_file/metadata.rb +0 -2
- data/app/models/concerns/sufia/generic_file/mime_types.rb +9 -9
- data/app/models/concerns/sufia/generic_file/permissions.rb +0 -1
- data/app/models/concerns/sufia/generic_file/proxy_deposit.rb +0 -1
- data/app/models/concerns/sufia/generic_file/querying.rb +9 -5
- data/app/models/concerns/sufia/generic_file/trophies.rb +1 -1
- data/app/models/concerns/sufia/generic_file/versions.rb +0 -4
- data/app/models/concerns/sufia/model_methods.rb +0 -1
- data/app/models/concerns/sufia/user.rb +15 -15
- data/app/models/concerns/sufia/user_usage_stats.rb +0 -2
- data/app/models/datastreams/fits_datastream.rb +25 -25
- data/app/models/domain_term.rb +2 -3
- data/app/models/featured_work.rb +3 -5
- data/app/models/file_download_stat.rb +3 -4
- data/app/models/file_usage.rb +10 -11
- data/app/models/file_view_stat.rb +3 -3
- data/app/models/follow.rb +1 -1
- data/app/models/geo_names_resource.rb +3 -3
- data/app/models/group.rb +1 -3
- data/app/models/local_authority.rb +26 -28
- data/app/models/proxy_deposit_request.rb +9 -9
- data/app/models/single_use_link.rb +10 -18
- data/app/models/sufia/download.rb +2 -2
- data/app/models/sufia/pageview.rb +1 -1
- data/app/models/trophy.rb +2 -4
- data/app/services/sufia/analytics.rb +10 -11
- data/app/services/sufia/generic_file_audit_service.rb +11 -12
- data/app/services/sufia/repository_audit_service.rb +1 -1
- data/config/locales/sufia.en.yml +2 -0
- data/lib/generators/sufia/models/abstract_migration_generator.rb +7 -6
- data/lib/generators/sufia/models/install_generator.rb +3 -3
- data/lib/generators/sufia/models/templates/config/arkivo_constraint.rb +1 -1
- data/lib/generators/sufia/models/templates/config/clamav.rb +1 -1
- data/lib/generators/sufia/models/templates/config/redis_config.rb +13 -5
- data/lib/generators/sufia/models/templates/config/resque_admin.rb +2 -2
- data/lib/generators/sufia/models/templates/config/resque_config.rb +1 -1
- data/lib/generators/sufia/models/templates/config/sufia.rb +10 -4
- data/lib/generators/sufia/models/templates/migrations/create_checksum_audit_logs.rb +1 -1
- data/lib/generators/sufia/models/templates/migrations/create_file_download_stats.rb +1 -1
- data/lib/generators/sufia/models/templates/migrations/create_file_view_stats.rb +1 -1
- data/lib/generators/sufia/models/templates/migrations/create_local_authorities.rb +1 -1
- data/lib/generators/sufia/models/update_content_blocks_generator.rb +0 -1
- data/lib/generators/sufia/models/upgrade600_generator.rb +0 -1
- data/lib/generators/sufia/models/user_stats_generator.rb +2 -2
- data/lib/sufia/messages.rb +17 -17
- data/lib/sufia/models.rb +1 -1
- data/lib/sufia/models/active_fedora/redis.rb +1 -4
- data/lib/sufia/models/active_record/redis.rb +2 -3
- data/lib/sufia/models/engine.rb +12 -7
- data/lib/sufia/models/file_content/versions.rb +0 -1
- data/lib/sufia/models/resque.rb +2 -2
- data/lib/sufia/models/stats/user_stat_importer.rb +65 -67
- data/lib/sufia/models/user_local_directory_behavior.rb +9 -13
- data/lib/sufia/models/utils.rb +1 -2
- data/lib/sufia/models/version.rb +1 -1
- data/lib/sufia/permissions.rb +0 -1
- data/lib/sufia/permissions/readable.rb +0 -1
- data/lib/sufia/permissions/writable.rb +20 -23
- data/lib/tasks/sufia-models_tasks.rake +18 -0
- data/sufia-models.gemspec +1 -1
- metadata +5 -5
@@ -2,17 +2,16 @@ class FileDownloadStat < ActiveRecord::Base
|
|
2
2
|
extend Sufia::FileStatUtils
|
3
3
|
|
4
4
|
def to_flot
|
5
|
-
[
|
5
|
+
[self.class.convert_date(date), downloads]
|
6
6
|
end
|
7
7
|
|
8
|
-
def self.statistics
|
8
|
+
def self.statistics(file_id, start_date, user_id = nil)
|
9
9
|
combined_stats file_id, start_date, :downloads, :totalEvents, user_id
|
10
10
|
end
|
11
11
|
|
12
12
|
# Sufia::Download is sent to Sufia::Analytics.profile as #sufia__download
|
13
13
|
# see Legato::ProfileMethods.method_name_from_klass
|
14
|
-
def self.ga_statistics
|
14
|
+
def self.ga_statistics(start_date, file_id)
|
15
15
|
Sufia::Analytics.profile.sufia__download(sort: 'date', start_date: start_date, end_date: Date.yesterday).for_file(file_id)
|
16
16
|
end
|
17
|
-
|
18
17
|
end
|
data/app/models/file_usage.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
class FileUsage
|
2
|
-
|
3
2
|
attr_accessor :id, :created, :path, :downloads, :pageviews
|
4
3
|
|
5
|
-
def initialize
|
4
|
+
def initialize(id)
|
6
5
|
file = ::GenericFile.find(id)
|
7
6
|
user = User.where(email: file.depositor).first
|
8
7
|
user_id = user ? user.id : nil
|
@@ -14,31 +13,31 @@ class FileUsage
|
|
14
13
|
self.pageviews = FileViewStat.to_flots FileViewStat.statistics(id, created, user_id)
|
15
14
|
end
|
16
15
|
|
17
|
-
# file.date_uploaded reflects the date the file was uploaded by the user
|
18
|
-
# and therefore (if available) the date that we want to use for the stats
|
19
|
-
# file.create_date reflects the date the file was added to Fedora. On data
|
20
|
-
# migrated from one repository to another the created_date can be later
|
16
|
+
# file.date_uploaded reflects the date the file was uploaded by the user
|
17
|
+
# and therefore (if available) the date that we want to use for the stats
|
18
|
+
# file.create_date reflects the date the file was added to Fedora. On data
|
19
|
+
# migrated from one repository to another the created_date can be later
|
21
20
|
# than the date the file was uploaded.
|
22
|
-
def date_for_analytics(file)
|
21
|
+
def date_for_analytics(file)
|
23
22
|
earliest = Sufia.config.analytic_start_date
|
24
23
|
date_uploaded = string_to_date file.date_uploaded
|
25
24
|
date_analytics = date_uploaded ? date_uploaded : file.create_date
|
26
25
|
return date_analytics if earliest.blank?
|
27
|
-
earliest > date_analytics ? earliest : date_analytics
|
26
|
+
earliest > date_analytics ? earliest : date_analytics
|
28
27
|
end
|
29
28
|
|
30
29
|
def string_to_date(date_str)
|
31
|
-
return DateTime.parse(date_str)
|
30
|
+
return DateTime.parse(date_str)
|
32
31
|
rescue ArgumentError, TypeError
|
33
32
|
return nil
|
34
33
|
end
|
35
34
|
|
36
35
|
def total_downloads
|
37
|
-
|
36
|
+
downloads.reduce(0) { |total, result| total + result[1].to_i }
|
38
37
|
end
|
39
38
|
|
40
39
|
def total_pageviews
|
41
|
-
|
40
|
+
pageviews.reduce(0) { |total, result| total + result[1].to_i }
|
42
41
|
end
|
43
42
|
|
44
43
|
# Package data for visualization using JQuery Flot
|
@@ -2,16 +2,16 @@ class FileViewStat < ActiveRecord::Base
|
|
2
2
|
extend Sufia::FileStatUtils
|
3
3
|
|
4
4
|
def to_flot
|
5
|
-
[
|
5
|
+
[self.class.convert_date(date), views]
|
6
6
|
end
|
7
7
|
|
8
|
-
def self.statistics
|
8
|
+
def self.statistics(file_id, start_date, user_id = nil)
|
9
9
|
combined_stats file_id, start_date, :views, :pageviews, user_id
|
10
10
|
end
|
11
11
|
|
12
12
|
# Sufia::Download is sent to Sufia::Analytics.profile as #sufia__download
|
13
13
|
# see Legato::ProfileMethods.method_name_from_klass
|
14
|
-
def self.ga_statistics
|
14
|
+
def self.ga_statistics(start_date, file_id)
|
15
15
|
path = Sufia::Engine.routes.url_helpers.generic_file_path(file_id)
|
16
16
|
Sufia::Analytics.profile.sufia__pageview(sort: 'date', start_date: start_date).for_path(path)
|
17
17
|
end
|
data/app/models/follow.rb
CHANGED
@@ -8,11 +8,11 @@ class GeoNamesResource < ActiveResource::Base
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.instantiate_collection(collection, original_params = {}, prefix_options = {})
|
11
|
-
|
12
|
-
|
11
|
+
col = super(collection["geonames"], original_params, prefix_options)
|
12
|
+
col.map! { |item| { label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName, value: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName } }
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.find_location(location)
|
16
|
-
|
16
|
+
GeoNamesResource.find(:all, params: { q: location, username: "cam156", maxRows: 10 })
|
17
17
|
end
|
18
18
|
end
|
data/app/models/group.rb
CHANGED
@@ -1,37 +1,35 @@
|
|
1
1
|
class LocalAuthority < ActiveRecord::Base
|
2
|
-
|
3
|
-
# TODO we should add an index on this join table and remove the uniq query
|
2
|
+
# TODO: we should add an index on this join table and remove the uniq query
|
4
3
|
has_and_belongs_to_many :domain_terms, -> { uniq }
|
5
|
-
|
4
|
+
|
6
5
|
has_many :local_authority_entries
|
7
6
|
|
8
7
|
def self.harvest_rdf(name, sources, opts = {})
|
9
|
-
return unless
|
10
|
-
authority =
|
8
|
+
return unless where(name: name).empty?
|
9
|
+
authority = create(name: name)
|
11
10
|
format = opts.fetch(:format, :ntriples)
|
12
11
|
predicate = opts.fetch(:predicate, ::RDF::SKOS.prefLabel)
|
13
12
|
entries = []
|
14
13
|
sources.each do |uri|
|
15
14
|
::RDF::Reader.open(uri, format: format) do |reader|
|
16
15
|
reader.each_statement do |statement|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
16
|
+
next unless statement.predicate == predicate
|
17
|
+
entries << LocalAuthorityEntry.new(local_authority: authority,
|
18
|
+
label: statement.object.to_s,
|
19
|
+
uri: statement.subject.to_s)
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
25
23
|
if LocalAuthorityEntry.respond_to? :import
|
26
24
|
LocalAuthorityEntry.import entries
|
27
25
|
else
|
28
|
-
entries.each
|
26
|
+
entries.each(&:save!)
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
32
30
|
def self.harvest_tsv(name, sources, opts = {})
|
33
|
-
return unless
|
34
|
-
authority =
|
31
|
+
return unless where(name: name).empty?
|
32
|
+
authority = create(name: name)
|
35
33
|
prefix = opts.fetch(:prefix, "")
|
36
34
|
entries = []
|
37
35
|
sources.each do |uri|
|
@@ -47,12 +45,12 @@ class LocalAuthority < ActiveRecord::Base
|
|
47
45
|
if LocalAuthorityEntry.respond_to? :import
|
48
46
|
LocalAuthorityEntry.import entries
|
49
47
|
else
|
50
|
-
entries.each
|
48
|
+
entries.each(&:save!)
|
51
49
|
end
|
52
50
|
end
|
53
51
|
|
54
52
|
def self.register_vocabulary(model, term, name)
|
55
|
-
authority =
|
53
|
+
authority = find_by_name(name)
|
56
54
|
return if authority.blank?
|
57
55
|
model = model.to_s.sub(/RdfDatastream$/, '').underscore.pluralize
|
58
56
|
domain_term = DomainTerm.find_or_create_by(model: model, term: term)
|
@@ -62,25 +60,25 @@ class LocalAuthority < ActiveRecord::Base
|
|
62
60
|
|
63
61
|
def self.entries_by_term(model, term, query)
|
64
62
|
return if query.empty?
|
65
|
-
|
63
|
+
low_query = query.downcase
|
66
64
|
hits = []
|
67
|
-
# move lc_subject into it's own table since being part of the usual structure caused it to be too slow.
|
68
|
-
# When/if we move to having multiple dictionaries for subject we will need to also do a check for the appropriate dictionary.
|
69
|
-
if
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
else
|
65
|
+
# move lc_subject into it's own table since being part of the usual structure caused it to be too slow.
|
66
|
+
# When/if we move to having multiple dictionaries for subject we will need to also do a check for the appropriate dictionary.
|
67
|
+
if term == 'subject' && model == 'generic_files' # and local_authoritiy = lc_subject
|
68
|
+
sql = SubjectLocalAuthorityEntry.where("lowerLabel like ?", "#{low_query}%").select("label, uri").limit(25).to_sql
|
69
|
+
SubjectLocalAuthorityEntry.find_by_sql(sql).each do |hit|
|
70
|
+
hits << { uri: hit.uri, label: hit.label }
|
71
|
+
end
|
72
|
+
else
|
75
73
|
dterm = DomainTerm.where(model: model, term: term).first
|
76
74
|
if dterm
|
77
|
-
authorities = dterm.local_authorities.collect(&:id).uniq
|
78
|
-
sql = LocalAuthorityEntry.where("local_authority_id in (?)", authorities).where("lower(label) like ?", "#{
|
75
|
+
authorities = dterm.local_authorities.collect(&:id).uniq
|
76
|
+
sql = LocalAuthorityEntry.where("local_authority_id in (?)", authorities).where("lower(label) like ?", "#{low_query}%").select("label, uri").limit(25).to_sql
|
79
77
|
LocalAuthorityEntry.find_by_sql(sql).each do |hit|
|
80
|
-
hits << {uri: hit.uri, label: hit.label}
|
78
|
+
hits << { uri: hit.uri, label: hit.label }
|
81
79
|
end
|
82
80
|
end
|
83
81
|
end
|
84
|
-
|
82
|
+
hits
|
85
83
|
end
|
86
84
|
end
|
@@ -24,31 +24,31 @@ class ProxyDepositRequest < ActiveRecord::Base
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def sending_user_should_not_be_receiving_user
|
27
|
-
errors.add(:sending_user, 'must specify another user to receive the file') if receiving_user
|
27
|
+
errors.add(:sending_user, 'must specify another user to receive the file') if receiving_user && receiving_user.user_key == sending_user.user_key
|
28
28
|
end
|
29
29
|
|
30
30
|
def should_not_be_already_part_of_a_transfer
|
31
31
|
transfers = ProxyDepositRequest.where(generic_file_id: generic_file_id, status: 'pending')
|
32
|
-
errors.add(:open_transfer, 'must close open transfer on the file before creating a new one') unless transfers.blank? || (
|
32
|
+
errors.add(:open_transfer, 'must close open transfer on the file before creating a new one') unless transfers.blank? || (transfers.count == 1 && transfers[0].id == id)
|
33
33
|
end
|
34
34
|
|
35
35
|
def send_request_transfer_message
|
36
|
-
if
|
36
|
+
if updated_at == created_at
|
37
37
|
message = "#{link_to(sending_user.name, Sufia::Engine.routes.url_helpers.profile_path(sending_user.user_key))} wants to transfer a file to you. Review all <a href='#{Sufia::Engine.routes.url_helpers.transfers_path}'>transfer requests</a>"
|
38
38
|
User.batchuser.send_message(receiving_user, message, "Ownership Change Request")
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
else
|
40
|
+
message = "Your transfer request was #{status}."
|
41
|
+
message += " Comments: #{receiver_comment}" unless receiver_comment.blank?
|
42
|
+
User.batchuser.send_message(sending_user, message, "Ownership Change #{status}")
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
def pending?
|
47
|
-
|
47
|
+
status == 'pending'
|
48
48
|
end
|
49
49
|
|
50
50
|
def accepted?
|
51
|
-
|
51
|
+
status == 'accepted'
|
52
52
|
end
|
53
53
|
|
54
54
|
# @param [Boolean] reset (false) should the access controls be reset. This means revoking edit access from the depositor
|
@@ -1,42 +1,34 @@
|
|
1
1
|
class SingleUseLink < ActiveRecord::Base
|
2
|
-
|
3
2
|
validate :expiration_date_cannot_be_in_the_past
|
4
3
|
validate :cannot_be_destroyed
|
5
4
|
|
6
5
|
after_initialize :set_defaults
|
7
6
|
|
8
|
-
def create_for_path
|
9
|
-
self.class.create
|
7
|
+
def create_for_path(path)
|
8
|
+
self.class.create(itemId: itemId, path: path)
|
10
9
|
end
|
11
10
|
|
12
11
|
def expired?
|
13
12
|
DateTime.now > expires
|
14
13
|
end
|
15
14
|
|
16
|
-
|
17
15
|
def to_param
|
18
16
|
downloadKey
|
19
17
|
end
|
20
18
|
|
21
19
|
protected
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
errors.add(:expires, "can't be in the past")
|
21
|
+
def expiration_date_cannot_be_in_the_past
|
22
|
+
errors.add(:expires, "can't be in the past") if expired?
|
26
23
|
end
|
27
|
-
end
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
errors[:base] << "Single Use Link has already been used"
|
25
|
+
def cannot_be_destroyed
|
26
|
+
errors[:base] << "Single Use Link has already been used" if destroyed?
|
32
27
|
end
|
33
|
-
end
|
34
28
|
|
35
|
-
|
36
|
-
|
37
|
-
self.expires ||= DateTime.now.advance(hours:24)
|
38
|
-
self.downloadKey ||= (Digest::SHA2.new << rand(
|
29
|
+
def set_defaults
|
30
|
+
return unless new_record?
|
31
|
+
self.expires ||= DateTime.now.advance(hours: 24)
|
32
|
+
self.downloadKey ||= (Digest::SHA2.new << rand(1_000_000_000).to_s).to_s
|
39
33
|
end
|
40
|
-
end
|
41
|
-
|
42
34
|
end
|
data/app/models/trophy.rb
CHANGED
@@ -2,9 +2,7 @@ class Trophy < ActiveRecord::Base
|
|
2
2
|
validate :count_within_limit, on: :create
|
3
3
|
|
4
4
|
def count_within_limit
|
5
|
-
if Trophy.where(user_id:
|
6
|
-
|
7
|
-
end
|
5
|
+
return if Trophy.where(user_id: user_id).count < 5
|
6
|
+
errors.add(:base, "Exceeded trophy limit")
|
8
7
|
end
|
9
8
|
end
|
10
|
-
|
@@ -20,29 +20,28 @@ module Sufia
|
|
20
20
|
# @return [OAuth2::AccessToken] An OAuth2 access token for GA
|
21
21
|
def self.token
|
22
22
|
scope = 'https://www.googleapis.com/auth/analytics.readonly'
|
23
|
-
client = Google::APIClient.new(application_name:
|
24
|
-
|
25
|
-
key = Google::APIClient::PKCS12.load_key(
|
26
|
-
|
27
|
-
service_account = Google::APIClient::JWTAsserter.new(
|
28
|
-
|
23
|
+
client = Google::APIClient.new(application_name: config['app_name'],
|
24
|
+
application_version: config['app_version'])
|
25
|
+
key = Google::APIClient::PKCS12.load_key(config['privkey_path'],
|
26
|
+
config['privkey_secret'])
|
27
|
+
service_account = Google::APIClient::JWTAsserter.new(config['client_email'], scope,
|
28
|
+
key)
|
29
29
|
client.authorization = service_account.authorize
|
30
|
-
oauth_client = OAuth2::Client.new('', '',
|
31
|
-
|
32
|
-
token_url: 'https://accounts.google.com/o/oauth2/token'})
|
30
|
+
oauth_client = OAuth2::Client.new('', '', authorize_url: 'https://accounts.google.com/o/oauth2/auth',
|
31
|
+
token_url: 'https://accounts.google.com/o/oauth2/token')
|
33
32
|
OAuth2::AccessToken.new(oauth_client, client.authorization.access_token)
|
34
33
|
end
|
35
34
|
|
36
35
|
# Return a user object linked to a Google Analytics account
|
37
36
|
# @return [Legato::User] A user account wit GA access
|
38
37
|
def self.user
|
39
|
-
Legato::User.new(
|
38
|
+
Legato::User.new(token)
|
40
39
|
end
|
41
40
|
|
42
41
|
# Return a Google Analytics profile matching specified ID
|
43
42
|
# @ return [Legato::Management::Profile] A user profile associated with GA
|
44
43
|
def self.profile
|
45
|
-
|
44
|
+
user.profiles.detect do |profile|
|
46
45
|
profile.web_property_id == Sufia.config.google_analytics_id
|
47
46
|
end
|
48
47
|
end
|
@@ -11,12 +11,12 @@ module Sufia
|
|
11
11
|
def human_readable_audit_status
|
12
12
|
stat = audit_stat
|
13
13
|
case stat
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
when 0
|
15
|
+
'failing'
|
16
|
+
when 1
|
17
|
+
'passing'
|
18
|
+
else
|
19
|
+
stat
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -27,8 +27,8 @@ module Sufia
|
|
27
27
|
audit_content([])
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
30
|
private
|
31
|
+
|
32
32
|
def audit_content(log)
|
33
33
|
if generic_file.content.has_versions?
|
34
34
|
audit_file_versions("content", log)
|
@@ -37,9 +37,9 @@ module Sufia
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
def audit_file_versions
|
40
|
+
def audit_file_versions(file, log)
|
41
41
|
generic_file.attached_files[file].versions.all.each do |version|
|
42
|
-
log << audit_file(file, version.uri,
|
42
|
+
log << audit_file(file, version.uri, version.label)
|
43
43
|
end
|
44
44
|
log
|
45
45
|
end
|
@@ -59,7 +59,7 @@ module Sufia
|
|
59
59
|
audit_results = audit.collect { |result| result["pass"] }
|
60
60
|
|
61
61
|
# check how many non runs we had
|
62
|
-
non_runs = audit_results.reduce(0) { |sum, value| value == NO_RUNS ? sum
|
62
|
+
non_runs = audit_results.reduce(0) { |sum, value| value == NO_RUNS ? sum + 1 : sum }
|
63
63
|
if non_runs == 0
|
64
64
|
audit_results.reduce(true) { |sum, value| sum && value }
|
65
65
|
elsif non_runs < audit_results.length
|
@@ -76,7 +76,7 @@ module Sufia
|
|
76
76
|
def audit_stat_by_id
|
77
77
|
audit_results = ChecksumAuditLog.logs_for(generic_file.id, "content").collect { |result| result["pass"] }
|
78
78
|
|
79
|
-
if audit_results.length >
|
79
|
+
if audit_results.length > 0
|
80
80
|
audit_results.reduce(true) { |sum, value| sum && value }
|
81
81
|
else
|
82
82
|
'Audits have not yet been run on this file.'
|
@@ -102,6 +102,5 @@ module Sufia
|
|
102
102
|
def days_since_last_audit(latest_audit)
|
103
103
|
(DateTime.now - latest_audit.updated_at.to_date).to_i
|
104
104
|
end
|
105
|
-
|
106
105
|
end
|
107
106
|
end
|