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