sufia-models 6.3.0 → 6.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8aaf1e2e42b84b0e4a1331a69fa75380c39b5d8
4
- data.tar.gz: aa45e5332b4d18964bd006da94f500081a848b46
3
+ metadata.gz: 8330c2299c06f65449dfb7ce36e3d011667d4c2f
4
+ data.tar.gz: cd37e02c1d1d2be11c039430332a5bf103b2f6ff
5
5
  SHA512:
6
- metadata.gz: 78bd0e47f109f0c8eecfc861458d6ba77726f77ca72f1eb42f2e8969a0fc7409c1f7739b2c1f3c649eb847e658788b45c6cfd0a2c1817ef5c640f3e6e9546ce1
7
- data.tar.gz: 991b122862009f831320945391d228c1068259b27d1102e44176ed5dea353cb9d366a93b8776f978da8cd0b688c31734247ea1c97267f07fbe03d0c8692d0ae4
6
+ metadata.gz: 5021bfd98929e7fcbbc1619274308ca853343fc38f974623d809242aa8c6b45d2cfd7897f9cba4df5eb986fc51e060c742c3a0f94a0c63afaa8034dc94bb285e
7
+ data.tar.gz: 8cbbefc5ff16a747880dea64437c343b7420bc103d50db813e632f6288d51d4d8098a2876c9cffacaa6f8c930b4812817b9ba91f4c0ee76016836e2055d04206
@@ -27,15 +27,27 @@ module Sufia::GenericFile
27
27
  yield(generic_file) if block_given?
28
28
  end
29
29
 
30
- def create_content(file, file_name, path, mime_type)
30
+ def create_content(file, file_name, path, mime_type, collection_id = nil)
31
31
  generic_file.add_file(file, path: path, original_name: file_name, mime_type: mime_type)
32
32
  generic_file.label ||= file_name
33
33
  generic_file.title = [generic_file.label] if generic_file.title.blank?
34
- save_characterize_and_record_committer do
34
+ saved = save_characterize_and_record_committer do
35
35
  if Sufia.config.respond_to?(:after_create_content)
36
36
  Sufia.config.after_create_content.call(generic_file, user)
37
37
  end
38
38
  end
39
+ add_file_to_collection(collection_id) if saved
40
+ saved
41
+ end
42
+
43
+ def add_file_to_collection(collection_id)
44
+ return if collection_id.nil? || collection_id == "-1"
45
+ collection = Collection.find(collection_id)
46
+ return unless user.can? :edit, collection
47
+ acquire_lock_for(collection_id) do
48
+ collection.add_members [generic_file.id]
49
+ collection.save
50
+ end
39
51
  end
40
52
 
41
53
  def revert_content(revision_id)
@@ -130,5 +142,16 @@ module Sufia::GenericFile
130
142
  featured_work = FeaturedWork.find_by_generic_file_id(generic_file.id)
131
143
  featured_work.destroy unless featured_work.nil?
132
144
  end
145
+
146
+ def acquire_lock_for(lock_key, &block)
147
+ lock_manager.lock(lock_key, &block)
148
+ end
149
+
150
+ def lock_manager
151
+ @lock_manager ||= Sufia::LockManager.new(
152
+ Sufia.config.lock_time_to_live,
153
+ Sufia.config.lock_retry_count,
154
+ Sufia.config.lock_retry_delay)
155
+ end
133
156
  end
134
157
  end
@@ -1,3 +1,4 @@
1
+ # Resque job that updates files uploaded via the BatchController
1
2
  class BatchUpdateJob
2
3
  include Hydra::PermissionsQuery
3
4
  include Sufia::Messages
@@ -6,67 +7,103 @@ class BatchUpdateJob
6
7
  :batch_update
7
8
  end
8
9
 
9
- attr_accessor :login, :title, :file_attributes, :batch_id, :visibility, :saved, :denied
10
+ attr_reader :login, :batch_id, :title, :file_attributes, :visibility
11
+ attr_writer :saved, :denied
10
12
 
13
+ # Called from BatchController
14
+ # @param [String] login of the current user
15
+ # @param [String] batch_id for the Batch object containing the files
16
+ # @param [Hash] title contains the filename of each file
17
+ # @param [Hash] file_attributes applied to every file in the batch
18
+ # @param [String] visibility
11
19
  def initialize(login, batch_id, title, file_attributes, visibility)
12
- self.login = login
13
- self.title = title || {}
14
- self.file_attributes = file_attributes
15
- self.visibility = visibility
16
- self.batch_id = batch_id
17
- self.saved = []
18
- self.denied = []
20
+ @login = login
21
+ @batch_id = batch_id
22
+ @title = title || {}
23
+ @file_attributes = file_attributes
24
+ @visibility = visibility
19
25
  end
20
26
 
21
27
  def run
22
- batch = Batch.find_or_create(batch_id)
23
- user = User.find_by_user_key(login)
24
-
25
- batch.generic_files.each do |gf|
26
- update_file(gf, user)
27
- end
28
-
28
+ batch.generic_files.each { |gf| update_file(gf) }
29
29
  batch.update(status: ["Complete"])
30
-
31
- if denied.empty?
32
- send_user_success_message(user, batch) unless saved.empty?
33
- else
34
- send_user_failure_message(user, batch)
35
- end
30
+ send_user_message
36
31
  end
37
32
 
38
- def update_file(gf, user)
39
- unless user.can? :edit, gf
40
- ActiveFedora::Base.logger.error "User #{user.user_key} DENIED access to #{gf.id}!"
41
- denied << gf
42
- return
43
- end
33
+ # Updates the metadata for one file in the batch. Override this method if you wish to perform
34
+ # additional operations to these files.
35
+ # @param [GenericFile] gf
36
+ def apply_metadata(gf)
44
37
  gf.title = title[gf.id] if title[gf.id]
45
38
  gf.attributes = file_attributes
46
39
  gf.visibility = visibility
40
+ end
47
41
 
48
- save_tries = 0
49
- begin
50
- gf.save!
51
- rescue RSolr::Error::Http => error
52
- save_tries += 1
53
- ActiveFedora::Base.logger.warn "BatchUpdateJob caught RSOLR error on #{gf.id}: #{error.inspect}"
54
- # fail for good if the tries is greater than 3
55
- raise error if save_tries >= 3
56
- sleep 0.01
57
- retry
58
- end #
42
+ # Queues jobs to run on each file. By default, this includes ContentUpdateEventJob, but
43
+ # can be augmented with additional custom jobs
44
+ # @param [GenericFile] gf
45
+ def queue_additional_jobs(gf)
59
46
  Sufia.queue.push(ContentUpdateEventJob.new(gf.id, login))
60
- saved << gf
61
47
  end
62
48
 
63
- def send_user_success_message(user, batch)
49
+ def send_user_success_message
64
50
  message = saved.count > 1 ? multiple_success(batch.id, saved) : single_success(batch.id, saved.first)
65
51
  User.batchuser.send_message(user, message, success_subject, false)
66
52
  end
67
53
 
68
- def send_user_failure_message(user, batch)
54
+ def send_user_failure_message
69
55
  message = denied.count > 1 ? multiple_failure(batch.id, denied) : single_failure(batch.id, denied.first)
70
56
  User.batchuser.send_message(user, message, failure_subject, false)
71
57
  end
58
+
59
+ private
60
+
61
+ def update_file(gf, you = nil)
62
+ you ||= user
63
+ unless you.can? :edit, gf
64
+ ActiveFedora::Base.logger.error "User #{you.user_key} DENIED access to #{gf.id}!"
65
+ denied << gf
66
+ return
67
+ end
68
+
69
+ apply_metadata(gf)
70
+
71
+ save_tries = 0
72
+ begin
73
+ gf.save!
74
+ rescue RSolr::Error::Http => error
75
+ save_tries += 1
76
+ ActiveFedora::Base.logger.warn "BatchUpdateJob caught RSOLR error on #{gf.id}: #{error.inspect}"
77
+ # fail for good if the tries is greater than 3
78
+ raise error if save_tries >= 3
79
+ sleep 0.01
80
+ retry
81
+ end
82
+ queue_additional_jobs(gf)
83
+ saved << gf
84
+ end
85
+
86
+ def send_user_message
87
+ if denied.empty?
88
+ send_user_success_message unless saved.empty?
89
+ else
90
+ send_user_failure_message
91
+ end
92
+ end
93
+
94
+ def batch
95
+ @batch ||= Batch.find_or_create(batch_id)
96
+ end
97
+
98
+ def user
99
+ @user ||= User.find_by_user_key(login)
100
+ end
101
+
102
+ def saved
103
+ @saved ||= []
104
+ end
105
+
106
+ def denied
107
+ @denied ||= []
108
+ end
72
109
  end
@@ -18,33 +18,33 @@ module Sufia
18
18
  index.as :symbol
19
19
  end
20
20
 
21
- property :part_of, predicate: ::RDF::DC.isPartOf
22
- property :resource_type, predicate: ::RDF::DC.type do |index|
21
+ property :part_of, predicate: RDF::Vocab::DC.isPartOf
22
+ property :resource_type, predicate: RDF::Vocab::DC.type do |index|
23
23
  index.as :stored_searchable, :facetable
24
24
  end
25
- property :title, predicate: ::RDF::DC.title do |index|
25
+ property :title, predicate: RDF::Vocab::DC.title do |index|
26
26
  index.as :stored_searchable, :facetable
27
27
  end
28
- property :creator, predicate: ::RDF::DC.creator do |index|
28
+ property :creator, predicate: RDF::Vocab::DC.creator do |index|
29
29
  index.as :stored_searchable, :facetable
30
30
  end
31
- property :contributor, predicate: ::RDF::DC.contributor do |index|
31
+ property :contributor, predicate: RDF::Vocab::DC.contributor do |index|
32
32
  index.as :stored_searchable, :facetable
33
33
  end
34
- property :description, predicate: ::RDF::DC.description do |index|
34
+ property :description, predicate: RDF::Vocab::DC.description do |index|
35
35
  index.type :text
36
36
  index.as :stored_searchable
37
37
  end
38
- property :tag, predicate: ::RDF::DC.relation do |index|
38
+ property :tag, predicate: RDF::Vocab::DC.relation do |index|
39
39
  index.as :stored_searchable, :facetable
40
40
  end
41
- property :rights, predicate: ::RDF::DC.rights do |index|
41
+ property :rights, predicate: RDF::Vocab::DC.rights do |index|
42
42
  index.as :stored_searchable
43
43
  end
44
- property :publisher, predicate: ::RDF::DC.publisher do |index|
44
+ property :publisher, predicate: RDF::Vocab::DC.publisher do |index|
45
45
  index.as :stored_searchable, :facetable
46
46
  end
47
- property :date_created, predicate: ::RDF::DC.created do |index|
47
+ property :date_created, predicate: RDF::Vocab::DC.created do |index|
48
48
  index.as :stored_searchable
49
49
  end
50
50
 
@@ -53,34 +53,34 @@ module Sufia
53
53
  # fedora's system created date will reflect the date when the record
54
54
  # was created in fedora4, but the date_uploaded will preserve the
55
55
  # original creation date from the old repository.
56
- property :date_uploaded, predicate: ::RDF::DC.dateSubmitted, multiple: false do |index|
56
+ property :date_uploaded, predicate: RDF::Vocab::DC.dateSubmitted, multiple: false do |index|
57
57
  index.type :date
58
58
  index.as :stored_sortable
59
59
  end
60
60
 
61
- property :date_modified, predicate: ::RDF::DC.modified, multiple: false do |index|
61
+ property :date_modified, predicate: RDF::Vocab::DC.modified, multiple: false do |index|
62
62
  index.type :date
63
63
  index.as :stored_sortable
64
64
  end
65
- property :subject, predicate: ::RDF::DC.subject do |index|
65
+ property :subject, predicate: RDF::Vocab::DC.subject do |index|
66
66
  index.as :stored_searchable, :facetable
67
67
  end
68
- property :language, predicate: ::RDF::DC.language do |index|
68
+ property :language, predicate: RDF::Vocab::DC.language do |index|
69
69
  index.as :stored_searchable, :facetable
70
70
  end
71
- property :identifier, predicate: ::RDF::DC.identifier do |index|
71
+ property :identifier, predicate: RDF::Vocab::DC.identifier do |index|
72
72
  index.as :stored_searchable
73
73
  end
74
- property :based_near, predicate: ::RDF::FOAF.based_near do |index|
74
+ property :based_near, predicate: RDF::Vocab::FOAF.based_near do |index|
75
75
  index.as :stored_searchable, :facetable
76
76
  end
77
77
  property :related_url, predicate: ::RDF::RDFS.seeAlso do |index|
78
78
  index.as :stored_searchable
79
79
  end
80
- property :bibliographic_citation, predicate: ::RDF::DC.bibliographicCitation do |index|
80
+ property :bibliographic_citation, predicate: RDF::Vocab::DC.bibliographicCitation do |index|
81
81
  index.as :stored_searchable
82
82
  end
83
- property :source, predicate: ::RDF::DC.source do |index|
83
+ property :source, predicate: RDF::Vocab::DC.source do |index|
84
84
  index.as :stored_searchable
85
85
  end
86
86
 
@@ -38,6 +38,14 @@ module Sufia
38
38
  where Solrizer.solr_name('read_access_group', :symbol) => access_level
39
39
  end
40
40
 
41
+ def where_digest_is(digest_string)
42
+ where Solrizer.solr_name('digest', :symbol) => urnify(digest_string)
43
+ end
44
+
45
+ def urnify(digest_string)
46
+ "urn:sha1:#{digest_string}"
47
+ end
48
+
41
49
  def date_format
42
50
  "%Y-%m-%dT%H:%M:%SZ"
43
51
  end
@@ -13,6 +13,6 @@ class GeoNamesResource < ActiveResource::Base
13
13
  end
14
14
 
15
15
  def self.find_location(location)
16
- GeoNamesResource.find(:all, params: { q: location, username: "cam156", maxRows: 10 })
16
+ GeoNamesResource.find(:all, params: { q: location, username: Sufia.config.geonames_username, maxRows: 10 })
17
17
  end
18
18
  end
@@ -0,0 +1,41 @@
1
+ module Sufia
2
+ #
3
+ # Generates CSV from a Generic_File
4
+ #
5
+ # @attr_reader [GenericFile] generic_file file that will be examined to generate the CSVs
6
+ # @attr_reader [Array] terms list of terms that will be output in CSV form
7
+ # @attr_reader [String] multi_value_separator separator for terms that have more than one value
8
+ class GenericFileCSVService
9
+ attr_reader :generic_file, :terms, :multi_value_separator
10
+
11
+ # @param [GenericFile] generic_file file that will be examined to generate the CSVs
12
+ # @param [Array] terms list of terms that will be output in CSV form
13
+ # defaults if nil to list below
14
+ # @param [String] multi_value_separator separator for terms that have more than one value
15
+ # defaults to '|'
16
+ def initialize(file, terms = nil, multi_value_separator = '|')
17
+ @generic_file = file
18
+ @terms = terms
19
+ @terms ||= [:id, :title, :depositor, :creator, :visibility, :resource_type, :rights, :file_format]
20
+ @multi_value_separator = multi_value_separator
21
+ end
22
+
23
+ # provide csv version of the GenericFile
24
+ def csv
25
+ ::CSV.generate do |csv|
26
+ csv << terms.map do |term|
27
+ values = generic_file.send(term)
28
+ values = Array(values) # make sure we have an array
29
+ values.join(multi_value_separator)
30
+ end
31
+ end
32
+ end
33
+
34
+ # provide csv header line for a GenericFile
35
+ def csv_header
36
+ ::CSV.generate do |csv|
37
+ csv << terms
38
+ end
39
+ end
40
+ end
41
+ end
@@ -9,7 +9,18 @@ module Sufia
9
9
  solr_doc[Solrizer.solr_name('file_format', :facetable)] = object.file_format
10
10
  solr_doc['all_text_timv'] = object.full_text.content
11
11
  solr_doc[Solrizer.solr_name('file_size', STORED_INTEGER)] = object.content.size.to_i
12
+ # Index the Fedora-generated SHA1 digest to create a linkage
13
+ # between files on disk (in fcrepo.binary-store-path) and objects
14
+ # in the repository.
15
+ solr_doc[Solrizer.solr_name('digest', :symbol)] = digest_from_content
12
16
  end
13
17
  end
18
+
19
+ private
20
+
21
+ def digest_from_content
22
+ return unless object.content.has_content?
23
+ object.content.digest.first.to_s
24
+ end
14
25
  end
15
26
  end
@@ -0,0 +1,43 @@
1
+ require 'redlock'
2
+ module Sufia
3
+ class LockManager
4
+ class UnableToAcquireLockError < StandardError; end
5
+
6
+ # TODO: This file is the same as curation_concerns/curation_concerns-models/app/services/curation_concerns/lock_manager.rb.
7
+ # During the merge of Sufia to use Curation Concerns, this file may be replaced by the Curation Concerns version.
8
+
9
+ attr_reader :client
10
+
11
+ # @param [Fixnum] time_to_live How long to hold the lock in milliseconds
12
+ # @param [Fixnum] retry_count How many times to retry to acquire the lock before raising UnableToAcquireLockError
13
+ # @param [Fixnum] retry_delay Maximum wait time in milliseconds before retrying. Wait time is a random value between 0 and retry_delay.
14
+ def initialize(time_to_live, retry_count, retry_delay)
15
+ @ttl = time_to_live
16
+ @client = Redlock::Client.new([uri], retry_count: retry_count, retry_delay: retry_delay)
17
+ end
18
+
19
+ # Blocks until lock is acquired or timeout.
20
+ def lock(key)
21
+ client.lock(key, @ttl) do |locked|
22
+ if locked
23
+ yield
24
+ else
25
+ raise UnableToAcquireLockError
26
+ end
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def uri
33
+ @uri ||= begin
34
+ opts = options
35
+ URI("#{opts[:scheme]}://#{opts[:host]}:#{opts[:port]}").to_s
36
+ end
37
+ end
38
+
39
+ def options
40
+ ::Resque.redis.redis.client.options
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,22 @@
1
+ require 'rails/generators'
2
+
3
+ class Sufia::Models::CitationConfigGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc """
7
+ This Generator makes the following changes to your application:
8
+ 1. Updates existing sufia.rb initializer to include a citation configuration
9
+ """
10
+
11
+ def banner
12
+ say_status("info", "ADDING CITATIONS OPTION TO SUFIA CONFIG", :blue)
13
+ end
14
+
15
+ def inject_config_initializer
16
+ inject_into_file 'config/initializers/sufia.rb', before: "# Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)" do
17
+ "# Enables a link to the citations page for a generic_file.\n" +
18
+ "# Default is false\n" +
19
+ "# config.citations = false\n"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ require 'rails/generators'
2
+
3
+ class Sufia::Models::GeonamesUsernameConfigGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc """
7
+ This Generator makes the following changes to your application:
8
+ 1. Updates existing sufia.rb initializer to include a geonames_username configuration
9
+ """
10
+
11
+ def banner
12
+ say_status("info", "ADDING GEONAMES_USERNAME OPTION TO SUFIA CONFIG", :blue)
13
+ end
14
+
15
+ def inject_config_initializer
16
+ inject_into_file 'config/initializers/sufia.rb', before: "# Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)" do
17
+ "config.geonames_username = ''\n"
18
+ end
19
+ end
20
+ end
@@ -15,6 +15,7 @@ This generator makes the following changes to your application:
15
15
  8. Runs cached stats generator
16
16
  9. Runs ORCID field generator
17
17
  10. Runs user stats generator
18
+ 11. Generates mini-magick config
18
19
  """
19
20
  def banner
20
21
  say_status("info", "GENERATING SUFIA MODELS", :blue)
@@ -109,4 +110,9 @@ This generator makes the following changes to your application:
109
110
  def clamav
110
111
  generate 'sufia:models:clamav'
111
112
  end
113
+
114
+ # Add mini-magick configuration
115
+ def minimagick_config
116
+ generate 'sufia:models:minimagick_config'
117
+ end
112
118
  end
@@ -0,0 +1,28 @@
1
+ require 'rails/generators'
2
+
3
+ class Sufia::Models::LockManagerConfigGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc """
7
+ This Generator makes the following changes to your application:
8
+ 1. Updates existing sufia.rb initializer to include lock manager configurations
9
+ """
10
+
11
+ def banner
12
+ say_status("info", "ADDING LOCK MANAGER OPTION TO SUFIA CONFIG", :blue)
13
+ end
14
+
15
+ def inject_config_initializer
16
+ inject_into_file 'config/initializers/sufia.rb', before: "# Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)" do
17
+ "\n # How many times to retry to acquire the lock before raising UnableToAcquireLockError\n" +
18
+ " # Default is 600ms\n" +
19
+ " # config.lock_retry_count = 600 # Up to 2 minutes of trying at intervals up to 200ms\n" +
20
+ "\n # How long to hold the lock in milliseconds\n" +
21
+ " # Default is 60_000ms\n" +
22
+ " # config.lock_time_to_live = 60_000 # milliseconds\n" +
23
+ "\n # Maximum wait time in milliseconds before retrying. Wait time is a random value between 0 and retry_delay.\n" +
24
+ " # Default is 200ms\n" +
25
+ " # config.lock_retry_delay = 200 # milliseconds\n\n"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ require 'rails/generators'
2
+
3
+ class Sufia::Models::MinimagickConfigGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc """
7
+ This Generator makes the following changes to your application:
8
+ 1. Creates new mini_magick.rb initializer configuring use of posix-spawn
9
+ """
10
+
11
+ def banner
12
+ say_status("info", "ADDING MINIMAGICK CONFIG", :blue)
13
+ end
14
+
15
+ def create_configuration_file
16
+ copy_file 'config/mini_magick.rb', 'config/initializers/mini_magick.rb'
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ require 'mini_magick'
2
+
3
+ MiniMagick.configure do |config|
4
+ config.shell_api = "posix-spawn"
5
+ end
@@ -91,6 +91,26 @@ Sufia.config do |config|
91
91
  # Specify a date you wish to start collecting Google Analytic statistics for.
92
92
  # config.analytic_start_date = DateTime.new(2014,9,10)
93
93
 
94
+ # Enables a link to the citations page for a generic_file.
95
+ # Default is false
96
+ # config.citations = false
97
+
98
+ # Enables a select menu on the batch upload page to select a collection into which to add newly uploaded files.
99
+ # Default is false
100
+ # config.upload_to_collection = false
101
+
102
+ # How many times to retry to acquire the lock before raising UnableToAcquireLockError
103
+ # Default is 600ms
104
+ # config.lock_retry_count = 600 # Up to 2 minutes of trying at intervals up to 200ms
105
+
106
+ # How long to hold the lock in milliseconds
107
+ # Default is 60_000ms
108
+ # config.lock_time_to_live = 60_000 # milliseconds
109
+
110
+ # Maximum wait time in milliseconds before retrying. Wait time is a random value between 0 and retry_delay.
111
+ # Default is 200ms
112
+ # config.lock_retry_delay = 200 # milliseconds
113
+
94
114
  # Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)
95
115
  # config.temp_file_base = '/home/developer1'
96
116
 
@@ -132,6 +152,8 @@ Sufia.config do |config|
132
152
  # NOTE: if you have always sent analytics to GA for downloads and page views leave this commented out
133
153
  # config.analytic_start_date = DateTime.new(2014,9,10)
134
154
 
155
+ config.geonames_username = ''
156
+
135
157
  # If browse-everything has been configured, load the configs. Otherwise, set to nil.
136
158
  begin
137
159
  if defined? BrowseEverything
@@ -0,0 +1,22 @@
1
+ require 'rails/generators'
2
+
3
+ class Sufia::Models::UploadToCollectionConfigGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc """
7
+ This Generator makes the following changes to your application:
8
+ 1. Updates existing sufia.rb initializer to include a update_to_collection configuration
9
+ """
10
+
11
+ def banner
12
+ say_status("info", "ADDING UPLOAD_TO_COLLECTION OPTION TO SUFIA CONFIG", :blue)
13
+ end
14
+
15
+ def inject_config_initializer
16
+ inject_into_file 'config/initializers/sufia.rb', before: "# Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)" do
17
+ "# Enables a select menu on the batch upload page to select a collection into which to add newly uploaded files.\n" +
18
+ "# Default is false\n" +
19
+ "# config.upload_to_collection = false\n"
20
+ end
21
+ end
22
+ end
@@ -24,11 +24,17 @@ module Sufia
24
24
  config.browse_everything = nil
25
25
  config.enable_local_ingest = nil
26
26
  config.analytics = false
27
+ config.citations = false
28
+ config.upload_to_collection = false
29
+ config.lock_retry_count = 600 # Up to 2 minutes of trying at intervals up to 200ms
30
+ config.lock_time_to_live = 60_000 # milliseconds
31
+ config.lock_retry_delay = 200 # milliseconds
27
32
  config.queue = Sufia::Resque::Queue
28
33
  config.max_notifications_for_dashboard = 5
29
34
  config.activity_to_show_default_seconds_since_now = 24 * 60 * 60
30
35
  config.arkivo_api = false
31
36
  config.retry_unless_sleep = 0.0
37
+ config.geonames_username = ""
32
38
 
33
39
  # Noid identifiers
34
40
  config.enable_noids = true
@@ -1,5 +1,5 @@
1
1
  module Sufia
2
2
  module Models
3
- VERSION = "6.3.0"
3
+ VERSION = "6.4.0"
4
4
  end
5
5
  end
data/sufia-models.gemspec CHANGED
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency 'activeresource', "~> 4.0" # No longer a dependency of rails 4.0
31
31
 
32
32
  spec.add_dependency "hydra-head", "~> 9.0"
33
- spec.add_dependency "active-fedora", "~> 9.1", ">= 9.1.1"
34
- spec.add_dependency "hydra-collections", [">= 5.0.2", "< 6.0"]
33
+ spec.add_dependency "active-fedora", "~> 9.4"
34
+ spec.add_dependency "hydra-collections", [">= 5.0.3", "< 6.0"]
35
35
  spec.add_dependency 'hydra-derivatives', '~> 1.0'
36
36
  spec.add_dependency 'active_fedora-noid', '~> 1.0'
37
37
  spec.add_dependency 'nest', '~> 1.1'
@@ -49,4 +49,5 @@ Gem::Specification.new do |spec|
49
49
  else
50
50
  spec.add_dependency 'mini_magick'
51
51
  end
52
+ spec.add_dependency 'posix-spawn'
52
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sufia-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.0
4
+ version: 6.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Friesen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-12 00:00:00.000000000 Z
11
+ date: 2015-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,27 +86,21 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '9.1'
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: 9.1.1
89
+ version: '9.4'
93
90
  type: :runtime
94
91
  prerelease: false
95
92
  version_requirements: !ruby/object:Gem::Requirement
96
93
  requirements:
97
94
  - - "~>"
98
95
  - !ruby/object:Gem::Version
99
- version: '9.1'
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: 9.1.1
96
+ version: '9.4'
103
97
  - !ruby/object:Gem::Dependency
104
98
  name: hydra-collections
105
99
  requirement: !ruby/object:Gem::Requirement
106
100
  requirements:
107
101
  - - ">="
108
102
  - !ruby/object:Gem::Version
109
- version: 5.0.2
103
+ version: 5.0.3
110
104
  - - "<"
111
105
  - !ruby/object:Gem::Version
112
106
  version: '6.0'
@@ -116,7 +110,7 @@ dependencies:
116
110
  requirements:
117
111
  - - ">="
118
112
  - !ruby/object:Gem::Version
119
- version: 5.0.2
113
+ version: 5.0.3
120
114
  - - "<"
121
115
  - !ruby/object:Gem::Version
122
116
  version: '6.0'
@@ -308,6 +302,20 @@ dependencies:
308
302
  - - ">="
309
303
  - !ruby/object:Gem::Version
310
304
  version: '0'
305
+ - !ruby/object:Gem::Dependency
306
+ name: posix-spawn
307
+ requirement: !ruby/object:Gem::Requirement
308
+ requirements:
309
+ - - ">="
310
+ - !ruby/object:Gem::Version
311
+ version: '0'
312
+ type: :runtime
313
+ prerelease: false
314
+ version_requirements: !ruby/object:Gem::Requirement
315
+ requirements:
316
+ - - ">="
317
+ - !ruby/object:Gem::Version
318
+ version: '0'
311
319
  description: Models and services for sufia
312
320
  email:
313
321
  - jeremy.n.friesen@gmail.com
@@ -383,16 +391,22 @@ files:
383
391
  - app/models/version_committer.rb
384
392
  - app/services/sufia/analytics.rb
385
393
  - app/services/sufia/generic_file_audit_service.rb
394
+ - app/services/sufia/generic_file_csv_service.rb
386
395
  - app/services/sufia/generic_file_indexing_service.rb
396
+ - app/services/sufia/lock_manager.rb
387
397
  - app/services/sufia/noid.rb
388
398
  - app/services/sufia/repository_audit_service.rb
389
399
  - config/locales/sufia.en.yml
390
400
  - lib/generators/sufia/models/abstract_migration_generator.rb
391
401
  - lib/generators/sufia/models/arkivo_api_generator.rb
392
402
  - lib/generators/sufia/models/cached_stats_generator.rb
403
+ - lib/generators/sufia/models/citation_config_generator.rb
393
404
  - lib/generators/sufia/models/clamav_generator.rb
394
405
  - lib/generators/sufia/models/fulltext_generator.rb
406
+ - lib/generators/sufia/models/geonames_username_config_generator.rb
395
407
  - lib/generators/sufia/models/install_generator.rb
408
+ - lib/generators/sufia/models/lock_manager_config_generator.rb
409
+ - lib/generators/sufia/models/minimagick_config_generator.rb
396
410
  - lib/generators/sufia/models/orcid_field_generator.rb
397
411
  - lib/generators/sufia/models/proxies_generator.rb
398
412
  - lib/generators/sufia/models/templates/app/models/collection.rb
@@ -401,6 +415,7 @@ files:
401
415
  - lib/generators/sufia/models/templates/config/arkivo_constraint.rb
402
416
  - lib/generators/sufia/models/templates/config/clamav.rb
403
417
  - lib/generators/sufia/models/templates/config/mime_types.rb
418
+ - lib/generators/sufia/models/templates/config/mini_magick.rb
404
419
  - lib/generators/sufia/models/templates/config/redis.yml
405
420
  - lib/generators/sufia/models/templates/config/redis_config.rb
406
421
  - lib/generators/sufia/models/templates/config/resque-pool.yml
@@ -438,6 +453,7 @@ files:
438
453
  - lib/generators/sufia/models/update_content_blocks_generator.rb
439
454
  - lib/generators/sufia/models/upgrade400_generator.rb
440
455
  - lib/generators/sufia/models/upgrade600_generator.rb
456
+ - lib/generators/sufia/models/upload_to_collection_config_generator.rb
441
457
  - lib/generators/sufia/models/usagestats_generator.rb
442
458
  - lib/generators/sufia/models/user_stats_generator.rb
443
459
  - lib/sufia/messages.rb