bulkrax 5.3.0 → 5.3.1

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
  SHA256:
3
- metadata.gz: 687e8437db3ceb118fd59fae8d1350379749ec42c60f236833b3b198376281c7
4
- data.tar.gz: 9f4af8b8e5eda6b48f8a97c7a34216a41476df44b723e54d623b3db6584edcf8
3
+ metadata.gz: 1bdc3299c331e345417117694e5da25031db99e181701d6b52db630b5c297470
4
+ data.tar.gz: 105119be729e2ea30a5fceb5b2f47557d5edb933b05663b7905e49665ceb3dfa
5
5
  SHA512:
6
- metadata.gz: 11c7518861a687b5db06ca319f5c3a0c0d9cc6621f55f17e9bb02bdd83f69fb18093f16235c5bcc06a50864b0acfd9f4c242d93477646ca782fdba62cf9ad1d8
7
- data.tar.gz: b3728de99a37f6846e83fd27c54be3c3fccfe03d256296f0a3123311797d7ab8eaa8be7a197de3657532adaadd58dd15fadd6b639158f43d1c77512f258cbfce
6
+ metadata.gz: 027d2ea6005df040daebf48bf431e471b1386141e2e13ae5de149f25125f8d2306576accb8300869ab16fb500f5f2b4d3f88ea28e299648bf588bf5f4d9c8264
7
+ data.tar.gz: a3924a66c3ca3d8e3a243573cbb44ca41f11f687ca02f17bbfad6403883a516b917248cf0f807088e351cc206a6b18d99d9434643ccebebd06dbb126319c9445
@@ -40,7 +40,7 @@ module Bulkrax
40
40
 
41
41
  include DynamicRecordLookup
42
42
 
43
- queue_as :import
43
+ queue_as Bulkrax.config.ingest_queue_name
44
44
 
45
45
  # @param parent_identifier [String] Work/Collection ID or Bulkrax::Entry source_identifiers
46
46
  # @param importer_run [Bulkrax::ImporterRun] current importer run (needed to properly update counters)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bulkrax
4
4
  class DeleteJob < ApplicationJob
5
- queue_as :import
5
+ queue_as Bulkrax.config.ingest_queue_name
6
6
 
7
7
  # rubocop:disable Rails/SkipsModelValidations
8
8
  def perform(entry, importer_run)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bulkrax
4
4
  class DownloadCloudFileJob < ApplicationJob
5
- queue_as :import
5
+ queue_as Bulkrax.config.ingest_queue_name
6
6
 
7
7
  # Retrieve cloud file and write to the imports directory
8
8
  # Note: if using the file system, the mounted directory in
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bulkrax
4
4
  class ImportCollectionJob < ApplicationJob
5
- queue_as :import
5
+ queue_as Bulkrax.config.ingest_queue_name
6
6
 
7
7
  # rubocop:disable Rails/SkipsModelValidations
8
8
  def perform(*args)
@@ -6,7 +6,7 @@ module Bulkrax
6
6
  class ImportFileSetJob < ApplicationJob
7
7
  include DynamicRecordLookup
8
8
 
9
- queue_as :import
9
+ queue_as Bulkrax.config.ingest_queue_name
10
10
 
11
11
  attr_reader :importer_run_id
12
12
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bulkrax
4
4
  class ImportWorkJob < ApplicationJob
5
- queue_as :import
5
+ queue_as Bulkrax.config.ingest_queue_name
6
6
 
7
7
  # rubocop:disable Rails/SkipsModelValidations
8
8
  #
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bulkrax
4
4
  class ImporterJob < ApplicationJob
5
- queue_as :import
5
+ queue_as Bulkrax.config.ingest_queue_name
6
6
 
7
7
  def perform(importer_id, only_updates_since_last_import = false)
8
8
  importer = Importer.find(importer_id)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bulkrax
4
- VERSION = '5.3.0'
4
+ VERSION = '5.3.1'
5
5
  end
data/lib/bulkrax.rb CHANGED
@@ -1,16 +1,16 @@
1
- # frozen_string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
- require "bulkrax/version"
4
- require "bulkrax/engine"
5
- require 'active_support/all'
3
+ require "bulkrax/version"
4
+ require "bulkrax/engine"
5
+ require 'active_support/all'
6
6
 
7
- # rubocop:disable Metrics/ModuleLength
7
+ # rubocop:disable Metrics/ModuleLength
8
8
  module Bulkrax
9
- extend self # rubocop:disable Style/ModuleFunction
10
- extend Forwardable
9
+ extend self # rubocop:disable Style/ModuleFunction
10
+ extend Forwardable
11
11
 
12
- ##
13
- # @api public
12
+ ##
13
+ # @api public
14
14
  class Configuration
15
15
  attr_accessor :api_definition,
16
16
  :curation_concerns,
@@ -35,6 +35,15 @@ module Bulkrax
35
35
  :reserved_properties,
36
36
  :server_name
37
37
 
38
+ attr_writer :ingest_queue_name
39
+ ##
40
+ # @return [String, Proc]
41
+ def ingest_queue_name
42
+ return @ingest_queue_name if @ingest_queue_name.present?
43
+ return Hyrax.config.ingest_queue_name if defined?(Hyrax)
44
+ :import
45
+ end
46
+
38
47
  attr_writer :use_locking
39
48
 
40
49
  def use_locking
@@ -45,61 +54,61 @@ module Bulkrax
45
54
  alias use_locking? use_locking
46
55
  end
47
56
 
48
- def config
49
- @config ||= Configuration.new
50
- yield @config if block_given?
51
- @config
52
- end
53
- alias setup config
57
+ def config
58
+ @config ||= Configuration.new
59
+ yield @config if block_given?
60
+ @config
61
+ end
62
+ alias setup config
54
63
 
55
- def_delegators :@config,
56
- :api_definition,
57
- :api_definition=,
58
- :curation_concerns,
59
- :curation_concerns=,
60
- :default_field_mapping,
61
- :default_field_mapping=,
62
- :default_work_type,
63
- :default_work_type=,
64
- :export_path,
65
- :export_path=,
66
- :field_mappings,
67
- :field_mappings=,
68
- :file_model_class,
69
- :file_model_class=,
70
- :fill_in_blank_source_identifiers,
71
- :fill_in_blank_source_identifiers=,
72
- :generated_metadata_mapping,
73
- :generated_metadata_mapping=,
74
- :import_path,
75
- :import_path=,
76
- :multi_value_element_join_on,
77
- :multi_value_element_join_on=,
78
- :multi_value_element_split_on,
79
- :multi_value_element_split_on=,
80
- :object_factory,
81
- :object_factory=,
82
- :parsers,
83
- :parsers=,
84
- :qa_controlled_properties,
85
- :qa_controlled_properties=,
86
- :related_children_field_mapping,
87
- :related_children_field_mapping=,
88
- :related_parents_field_mapping,
89
- :related_parents_field_mapping=,
90
- :relationship_job_class,
91
- :relationship_job_class=,
92
- :removed_image_path,
93
- :removed_image_path=,
94
- :required_elements,
95
- :required_elements=,
96
- :reserved_properties,
97
- :reserved_properties=,
98
- :server_name,
99
- :server_name=,
100
- :use_locking,
101
- :use_locking=,
102
- :use_locking?
64
+ def_delegators :@config,
65
+ :api_definition,
66
+ :api_definition=,
67
+ :curation_concerns,
68
+ :curation_concerns=,
69
+ :default_field_mapping,
70
+ :default_field_mapping=,
71
+ :default_work_type,
72
+ :default_work_type=,
73
+ :export_path,
74
+ :export_path=,
75
+ :field_mappings,
76
+ :field_mappings=,
77
+ :file_model_class,
78
+ :file_model_class=,
79
+ :fill_in_blank_source_identifiers,
80
+ :fill_in_blank_source_identifiers=,
81
+ :generated_metadata_mapping,
82
+ :generated_metadata_mapping=,
83
+ :import_path,
84
+ :import_path=,
85
+ :multi_value_element_join_on,
86
+ :multi_value_element_join_on=,
87
+ :multi_value_element_split_on,
88
+ :multi_value_element_split_on=,
89
+ :object_factory,
90
+ :object_factory=,
91
+ :parsers,
92
+ :parsers=,
93
+ :qa_controlled_properties,
94
+ :qa_controlled_properties=,
95
+ :related_children_field_mapping,
96
+ :related_children_field_mapping=,
97
+ :related_parents_field_mapping,
98
+ :related_parents_field_mapping=,
99
+ :relationship_job_class,
100
+ :relationship_job_class=,
101
+ :removed_image_path,
102
+ :removed_image_path=,
103
+ :required_elements,
104
+ :required_elements=,
105
+ :reserved_properties,
106
+ :reserved_properties=,
107
+ :server_name,
108
+ :server_name=,
109
+ :use_locking,
110
+ :use_locking=,
111
+ :use_locking?
103
112
 
104
113
  config do |conf|
105
114
  conf.parsers = [
@@ -138,149 +147,149 @@ module Bulkrax
138
147
  # Based on Hyrax CoreMetadata && BasicMetadata
139
148
  # Override at application level to change
140
149
  conf.field_mappings = {
141
- "Bulkrax::OaiDcParser" => {
142
- "contributor" => { from: ["contributor"] },
143
- # no appropriate mapping for coverage (based_near needs id)
144
- # ""=>{:from=>["coverage"]},
145
- "creator" => { from: ["creator"] },
146
- "date_created" => { from: ["date"] },
147
- "description" => { from: ["description"] },
148
- # no appropriate mapping for format
149
- # ""=>{:from=>["format"]},
150
- "identifier" => { from: ["identifier"] },
151
- "language" => { from: ["language"], parsed: true },
152
- "publisher" => { from: ["publisher"] },
153
- "related_url" => { from: ["relation"] },
154
- "rights_statement" => { from: ["rights"] },
155
- "source" => { from: ["source"] },
156
- "subject" => { from: ["subject"], parsed: true },
157
- "title" => { from: ["title"] },
158
- "resource_type" => { from: ["type"], parsed: true },
159
- "remote_files" => { from: ["thumbnail_url"], parsed: true }
150
+ "Bulkrax::OaiDcParser" => {
151
+ "contributor" => { from: ["contributor"] },
152
+ # no appropriate mapping for coverage (based_near needs id)
153
+ # ""=>{:from=>["coverage"]},
154
+ "creator" => { from: ["creator"] },
155
+ "date_created" => { from: ["date"] },
156
+ "description" => { from: ["description"] },
157
+ # no appropriate mapping for format
158
+ # ""=>{:from=>["format"]},
159
+ "identifier" => { from: ["identifier"] },
160
+ "language" => { from: ["language"], parsed: true },
161
+ "publisher" => { from: ["publisher"] },
162
+ "related_url" => { from: ["relation"] },
163
+ "rights_statement" => { from: ["rights"] },
164
+ "source" => { from: ["source"] },
165
+ "subject" => { from: ["subject"], parsed: true },
166
+ "title" => { from: ["title"] },
167
+ "resource_type" => { from: ["type"], parsed: true },
168
+ "remote_files" => { from: ["thumbnail_url"], parsed: true }
160
169
  },
161
- "Bulkrax::OaiQualifiedDcParser" => {
162
- "abstract" => { from: ["abstract"] },
163
- "alternative_title" => { from: ["alternative"] },
170
+ "Bulkrax::OaiQualifiedDcParser" => {
171
+ "abstract" => { from: ["abstract"] },
172
+ "alternative_title" => { from: ["alternative"] },
164
173
  "bibliographic_citation" => { from: ["bibliographicCitation"] },
165
- "contributor" => { from: ["contributor"] },
166
- "creator" => { from: ["creator"] },
167
- "date_created" => { from: ["created"] },
168
- "description" => { from: ["description"] },
169
- "language" => { from: ["language"] },
170
- "license" => { from: ["license"] },
171
- "publisher" => { from: ["publisher"] },
172
- "related_url" => { from: ["relation"] },
173
- "rights_holder" => { from: ["rightsHolder"] },
174
- "rights_statement" => { from: ["rights"] },
175
- "source" => { from: ["source"] },
176
- "subject" => { from: ["subject"], parsed: true },
177
- "title" => { from: ["title"] },
178
- "resource_type" => { from: ["type"], parsed: true },
179
- "remote_files" => { from: ["thumbnail_url"], parsed: true }
180
- },
181
- # When empty, a default_field_mapping will be generated
182
- "Bulkrax::CsvParser" => {},
183
- 'Bulkrax::BagitParser' => {},
184
- 'Bulkrax::XmlParser' => {}
185
- }
174
+ "contributor" => { from: ["contributor"] },
175
+ "creator" => { from: ["creator"] },
176
+ "date_created" => { from: ["created"] },
177
+ "description" => { from: ["description"] },
178
+ "language" => { from: ["language"] },
179
+ "license" => { from: ["license"] },
180
+ "publisher" => { from: ["publisher"] },
181
+ "related_url" => { from: ["relation"] },
182
+ "rights_holder" => { from: ["rightsHolder"] },
183
+ "rights_statement" => { from: ["rights"] },
184
+ "source" => { from: ["source"] },
185
+ "subject" => { from: ["subject"], parsed: true },
186
+ "title" => { from: ["title"] },
187
+ "resource_type" => { from: ["type"], parsed: true },
188
+ "remote_files" => { from: ["thumbnail_url"], parsed: true }
189
+ },
190
+ # When empty, a default_field_mapping will be generated
191
+ "Bulkrax::CsvParser" => {},
192
+ 'Bulkrax::BagitParser' => {},
193
+ 'Bulkrax::XmlParser' => {}
194
+ }
186
195
 
187
- # Lambda to set the default field mapping
188
- conf.default_field_mapping = lambda do |field|
189
- return if field.blank?
190
- {
191
- field.to_s =>
192
- {
193
- from: [field.to_s],
194
- split: false,
195
- parsed: Bulkrax::ApplicationMatcher.method_defined?("parse_#{field}"),
196
- if: nil,
197
- excluded: false
198
- }
199
- }
200
- end
196
+ # Lambda to set the default field mapping
197
+ conf.default_field_mapping = lambda do |field|
198
+ return if field.blank?
199
+ {
200
+ field.to_s =>
201
+ {
202
+ from: [field.to_s],
203
+ split: false,
204
+ parsed: Bulkrax::ApplicationMatcher.method_defined?("parse_#{field}"),
205
+ if: nil,
206
+ excluded: false
207
+ }
208
+ }
209
+ end
201
210
 
202
- # Properties that should not be used in imports. They are reserved for use by Hyrax.
203
- conf.reserved_properties = %w[
204
- create_date
205
- modified_date
206
- date_modified
207
- date_uploaded
208
- depositor
209
- arkivo_checksum
210
- has_model
211
- head
212
- label
213
- import_url
214
- on_behalf_of
215
- proxy_depositor
216
- owner
217
- state
218
- tail
219
- original_url
220
- relative_path
221
- ]
211
+ # Properties that should not be used in imports. They are reserved for use by Hyrax.
212
+ conf.reserved_properties = %w[
213
+ create_date
214
+ modified_date
215
+ date_modified
216
+ date_uploaded
217
+ depositor
218
+ arkivo_checksum
219
+ has_model
220
+ head
221
+ label
222
+ import_url
223
+ on_behalf_of
224
+ proxy_depositor
225
+ owner
226
+ state
227
+ tail
228
+ original_url
229
+ relative_path
230
+ ]
222
231
 
223
- # List of Questioning Authority properties that are controlled via YAML files in
224
- # the config/authorities/ directory. For example, the :rights_statement property
225
- # is controlled by the active terms in config/authorities/rights_statements.yml
226
- conf.qa_controlled_properties = %w[rights_statement license]
227
- end
232
+ # List of Questioning Authority properties that are controlled via YAML files in
233
+ # the config/authorities/ directory. For example, the :rights_statement property
234
+ # is controlled by the active terms in config/authorities/rights_statements.yml
235
+ conf.qa_controlled_properties = %w[rights_statement license]
236
+ end
228
237
 
229
- def api_definition
230
- @api_definition ||= ActiveSupport::HashWithIndifferentAccess.new(
231
- YAML.safe_load(
232
- ERB.new(
233
- File.read(Rails.root.join('config', 'bulkrax_api.yml'))
234
- ).result
235
- )
236
- )
237
- end
238
+ def api_definition
239
+ @api_definition ||= ActiveSupport::HashWithIndifferentAccess.new(
240
+ YAML.safe_load(
241
+ ERB.new(
242
+ File.read(Rails.root.join('config', 'bulkrax_api.yml'))
243
+ ).result
244
+ )
245
+ )
246
+ end
238
247
 
239
- DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON = ' | '
240
- # Specify the delimiter for joining an attribute's multi-value array into a string.
241
- #
242
- # @note the specific delimiter should likely be present in the multi_value_element_split_on
243
- # expression.
244
- def multi_value_element_join_on
245
- @multi_value_element_join_on ||= DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON
246
- end
248
+ DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON = ' | '
249
+ # Specify the delimiter for joining an attribute's multi-value array into a string.
250
+ #
251
+ # @note the specific delimiter should likely be present in the multi_value_element_split_on
252
+ # expression.
253
+ def multi_value_element_join_on
254
+ @multi_value_element_join_on ||= DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON
255
+ end
247
256
 
248
- DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON = /\s*[:;|]\s*/.freeze
249
- # @return [RegexClass] the regular express to use to "split" an attribute's values. If set to
250
- # `true` use the DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON.
251
- #
252
- # @note The "true" value is to preserve backwards compatibility.
253
- # @see DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON
257
+ DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON = /\s*[:;|]\s*/.freeze
258
+ # @return [RegexClass] the regular express to use to "split" an attribute's values. If set to
259
+ # `true` use the DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON.
260
+ #
261
+ # @note The "true" value is to preserve backwards compatibility.
262
+ # @see DEFAULT_MULTI_VALUE_ELEMENT_JOIN_ON
254
263
  def multi_value_element_split_on
255
- if @multi_value_element_join_on.is_a?(TrueClass)
256
- DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON
264
+ if @multi_value_element_join_on.is_a?(TrueClass)
265
+ DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON
257
266
  else
258
- @multi_value_element_split_on ||= DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON
267
+ @multi_value_element_split_on ||= DEFAULT_MULTI_VALUE_ELEMENT_SPLIT_ON
259
268
  end
260
269
  end
261
270
 
262
- # Responsible for stripping hidden characters from the given string.
263
- #
264
- # @param value [#to_s]
265
- # @return [String] with hidden characters removed
266
- #
267
- # @see https://github.com/samvera-labs/bulkrax/issues/688
268
- def normalize_string(value)
269
- # Removing [Byte Order Mark (BOM)](https://en.wikipedia.org/wiki/Byte_order_mark)
270
- value.to_s.delete("\xEF\xBB\xBF")
271
- end
271
+ # Responsible for stripping hidden characters from the given string.
272
+ #
273
+ # @param value [#to_s]
274
+ # @return [String] with hidden characters removed
275
+ #
276
+ # @see https://github.com/samvera-labs/bulkrax/issues/688
277
+ def normalize_string(value)
278
+ # Removing [Byte Order Mark (BOM)](https://en.wikipedia.org/wiki/Byte_order_mark)
279
+ value.to_s.delete("\xEF\xBB\xBF")
280
+ end
272
281
 
273
- def fallback_user_for_importer_exporter_processing
274
- return User.batch_user if defined?(Hyrax) && User.respond_to?(:batch_user)
282
+ def fallback_user_for_importer_exporter_processing
283
+ return User.batch_user if defined?(Hyrax) && User.respond_to?(:batch_user)
275
284
 
276
- raise "We have no fallback user available for Bulkrax.fallback_user_for_importer_exporter_processing"
277
- end
285
+ raise "We have no fallback user available for Bulkrax.fallback_user_for_importer_exporter_processing"
286
+ end
278
287
 
279
- # This class confirms to the Active::Support.serialize interface. It's job is to ensure that we
280
- # don't have keys with the tricksy Byte Order Mark character.
281
- #
282
- # @see https://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html#method-i-serialize
283
- class NormalizedJson
288
+ # This class confirms to the Active::Support.serialize interface. It's job is to ensure that we
289
+ # don't have keys with the tricksy Byte Order Mark character.
290
+ #
291
+ # @see https://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html#method-i-serialize
292
+ class NormalizedJson
284
293
  def self.normalize_keys(hash)
285
294
  return hash unless hash.respond_to?(:each_pair)
286
295
  returning_value = {}
@@ -292,18 +301,18 @@ module Bulkrax
292
301
 
293
302
  # When we write the serialized data to the database, we "dump" the value into that database
294
303
  # column.
295
- def self.dump(value)
296
- JSON.dump(normalize_keys(value))
297
- end
304
+ def self.dump(value)
305
+ JSON.dump(normalize_keys(value))
306
+ end
298
307
 
299
308
  # When we load the serialized data from the database, we pass the database's value into "load"
300
309
  # function.
301
310
  #
302
311
  # rubocop:disable Security/JSONLoad
303
- def self.load(string)
304
- normalize_keys(JSON.load(string))
305
- end
312
+ def self.load(string)
313
+ normalize_keys(JSON.load(string))
314
+ end
306
315
  # rubocop:enable Security/JSONLoad
307
- end
316
+ end
308
317
  end
309
- # rubocop:disable Metrics/ModuleLength
318
+ # rubocop:disable Metrics/ModuleLength
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bulkrax
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 5.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Kaufman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-02 00:00:00.000000000 Z
11
+ date: 2024-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails