sufia-models 6.3.0 → 6.4.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 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
@@ -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
OSZAR »