bulkrax 8.2.0 → 8.2.2

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
  SHA256:
3
- metadata.gz: 7886fb5eefc500cc8e567d9097e6930e67cee2908fa7fa0d79ce05fc714db392
4
- data.tar.gz: c6e720816dd152931df91e06be37977216a7ef06875a98386350706e4df1e3ea
3
+ metadata.gz: 35107691013ec9d3827b2e217fb19fc9a5332a6737c63345ebd15f78cb6f2625
4
+ data.tar.gz: 3ae32479f173a61e1c73eb63d615099d09645f2b69aebcfc0c553787db9c4de3
5
5
  SHA512:
6
- metadata.gz: 62971f4eab58de239643d016ec8f8701b6e71953bbb8ccc4bf1d74fd8a88d3798c506004704203107e6f676218bc0dcd337776ecccc423b6c932aeddcd0dacf5
7
- data.tar.gz: f3710a5e394a470753ea83d5e007505afd91a8fcdc3c383465fdaa7f2eb9c0901b3bef7cb69ae2c9bfa6d508231095e44ac7781cc9c52565162adfe2e58a5c3d
6
+ metadata.gz: 006d594d7fe8dd7b0efab965bf4662804ad77e5455d7772b402da5091824c1809652ede97195a1cc47e423eb417d15f44a092b2e7642d9525c76439305a6dfa0
7
+ data.tar.gz: 7cc96869b7dd2f382513568fb8bd4224c906d8e67506cfb292f8c3c2c26c8f98c1bf10b2e47b76aa47b73c184e589d0325ba7246f5fd89c1ad98f2bc7d1fa5b5
data/README.md CHANGED
@@ -24,6 +24,14 @@ $ rails db:migrate
24
24
 
25
25
  If using Sidekiq, set up queues for `import` and `export`.
26
26
 
27
+ ### Bundle errors on ARM
28
+
29
+ If posix-spawn is failing to bundle on an ARM based processor, try the following
30
+
31
+ `bundle config build.posix-spawn --with-cflags="-Wno-incompatible-function-pointer-types"`
32
+
33
+ Then rebundle. See https://github.com/rtomayko/posix-spawn/issues/92
34
+
27
35
  ### Manual Installation
28
36
 
29
37
  Add this line to your application's Gemfile:
@@ -132,7 +132,7 @@ module Bulkrax
132
132
  status_message: status_message_for(e),
133
133
  type: e.type,
134
134
  updated_at: e.updated_at,
135
- errors: e.latest_status&.error_class&.present? ? view_context.link_to(e.latest_status.error_class, view_context.item_entry_path(item, e), title: e.latest_status.error_message) : "",
135
+ errors: e.status_message == 'Failed' ? view_context.link_to(e.error_class, view_context.item_entry_path(item, e)) : "",
136
136
  actions: entry_util_links(e, item)
137
137
  }
138
138
  end
@@ -165,7 +165,10 @@ module Bulkrax
165
165
  end
166
166
 
167
167
  def delete(_user)
168
- find&.delete
168
+ obj = find
169
+ return false unless obj
170
+
171
+ obj.delete(eradicate: true)
169
172
  end
170
173
 
171
174
  private
@@ -10,11 +10,11 @@ module Bulkrax
10
10
  om = parent.ordered_members.to_a
11
11
  om.delete(file_set)
12
12
  parent.ordered_members = om
13
- elsif parent.respond_to?(:member_ids)
13
+ parent.save
14
+ elsif parent&.respond_to?(:member_ids)
14
15
  parent.member_ids.delete(file_set.id)
15
16
  Hyrax.persister.save(resource: parent)
16
17
  end
17
- parent.save
18
18
  end
19
19
 
20
20
  super
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bulkrax
4
4
  class Status < ApplicationRecord
5
- belongs_to :statusable, polymorphic: true, denormalize: { fields: %i[status_message], if: :latest? }
5
+ belongs_to :statusable, polymorphic: true, denormalize: { fields: %i[status_message error_class], if: :latest? }
6
6
  belongs_to :runnable, polymorphic: true
7
7
  serialize :error_backtrace, Array
8
8
 
@@ -26,11 +26,15 @@ module Bulkrax
26
26
 
27
27
  # Prepend the file_set id to ensure a unique filename and also one that is not longer than 255 characters
28
28
  def filename(file_set)
29
- # NOTE: Will this work with Valkyrie?
30
29
  return if file_set.original_file.blank?
31
- fn = file_set.original_file.file_name.first
32
- mime = ::Marcel::MimeType.for(file_set.original_file.mime_type)
33
- ext_mime = ::Marcel::MimeType.for(file_set.original_file.file_name)
30
+ if file_set.original_file.respond_to?(:original_filename) # valkyrie
31
+ fn = file_set.original_file.original_filename
32
+ mime = ::Marcel::MimeType.for(file_set.original_file.file.io)
33
+ else # original non valkyrie version
34
+ fn = file_set.original_file.file_name.first
35
+ mime = ::Marcel::MimeType.for(declared_type: file_set.original_file.mime_type)
36
+ end
37
+ ext_mime = ::Marcel::MimeType.for(name: fn)
34
38
  if fn.include?(file_set.id) || importerexporter.metadata_only?
35
39
  filename = "#{fn}.#{mime.to_sym}"
36
40
  filename = fn if mime.to_s == ext_mime.to_s
@@ -244,7 +244,10 @@ module Bulkrax
244
244
  record = Bulkrax.object_factory.find(identifier)
245
245
  return unless record
246
246
 
247
- file_sets = record.file_set? ? Array.wrap(record) : record.file_sets
247
+ file_sets = Array.wrap(record) if record.file_set?
248
+ if file_sets.nil? # for valkyrie
249
+ file_sets = record.respond_to?(:file_sets) ? record.file_sets : record.members&.select(&:file_set?)
250
+ end
248
251
  file_sets << record.thumbnail if exporter.include_thumbnails && record.thumbnail.present? && record.work?
249
252
  file_sets.each do |fs|
250
253
  path = File.join(exporter_export_path, folder_count, 'files')
@@ -252,7 +255,7 @@ module Bulkrax
252
255
  file = filename(fs)
253
256
  next if file.blank? || fs.original_file.blank?
254
257
 
255
- io = open(fs.original_file.uri)
258
+ io = fs.original_file.respond_to?(:uri) ? open(fs.original_file.uri) : fs.original_file.file.io
256
259
  File.open(File.join(path, file), 'wb') do |f|
257
260
  f.write(io.read)
258
261
  f.close
@@ -173,7 +173,7 @@ module Bulkrax
173
173
  # @see https://github.com/samvera/hyrax/blob/64c0bbf0dc0d3e1b49f040b50ea70d177cc9d8f6/app/indexers/hyrax/work_indexer.rb#L15-L18
174
174
  def file_sets
175
175
  @file_sets ||= ParserExportRecordSet.in_batches(candidate_file_set_ids) do |batch_of_ids|
176
- fsq = "has_model_ssim:#{Bulkrax.file_model_internal_resource} AND id:(\"" + batch_of_ids.join('" OR "') + "\")"
176
+ fsq = "has_model_ssim:\"#{Bulkrax.file_model_internal_resource.demodulize}\" AND id:(\"" + batch_of_ids.join('" OR "') + "\")"
177
177
  fsq += extra_filters if extra_filters.present?
178
178
  Bulkrax.object_factory.query(
179
179
  fsq,
@@ -0,0 +1,7 @@
1
+ class EntryErrorDenormalization < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :bulkrax_entries, :error_class, :string unless column_exists?(:bulkrax_entries, :error_class)
4
+ add_column :bulkrax_importers, :error_class, :string unless column_exists?(:bulkrax_importers, :error_class)
5
+ add_column :bulkrax_exporters, :error_class, :string unless column_exists?(:bulkrax_exporters, :error_class)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ class FasterFirstEntry < ActiveRecord::Migration[5.2]
3
+ def change
4
+ add_index :bulkrax_entries, [:importerexporter_id, :importerexporter_type, :id], name: 'index_bulkrax_entries_on_importerexporter_id_type_and_id' unless index_exists?(:bulkrax_entries, [:importerexporter_id, :importerexporter_type, :id],
5
+ name: 'index_bulkrax_entries_on_importerexporter_id_type_and_id')
6
+ end
7
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bulkrax
4
- VERSION = '8.2.0'
4
+ VERSION = '8.2.2'
5
5
  end
data/lib/bulkrax.rb CHANGED
@@ -98,7 +98,20 @@ module Bulkrax
98
98
  attr_writer :collection_model_class
99
99
 
100
100
  def collection_model_internal_resource
101
- collection_model_class.try(:internal_resource) || collection_model_class.to_s
101
+ # WARN: Using #try on :internal_resource can yield unexpected results.
102
+ # If the method is undefined, it can return a truthy value instead of
103
+ # the typical nil.
104
+ #
105
+ # E.g.
106
+ # ```ruby
107
+ # Hyrax::FileSet.try(:internal_resource) || 'hi'
108
+ # => #<Dry::Types::Result::Failure input=:internal_resource error=...
109
+ # ```
110
+ if collection_model_class.respond_to?(:internal_resource)
111
+ collection_model_class.internal_resource
112
+ else
113
+ collection_model_class.to_s
114
+ end
102
115
  end
103
116
 
104
117
  def file_model_class
@@ -108,7 +121,20 @@ module Bulkrax
108
121
  attr_writer :file_model_class
109
122
 
110
123
  def file_model_internal_resource
111
- file_model_class.try(:internal_resource) || file_model_class.to_s
124
+ # WARN: Using #try on :internal_resource can yield unexpected results.
125
+ # If the method is undefined, it can return a truthy value instead of
126
+ # the typical nil.
127
+ #
128
+ # E.g.
129
+ # ```ruby
130
+ # Hyrax::FileSet.try(:internal_resource) || 'hi'
131
+ # => #<Dry::Types::Result::Failure input=:internal_resource error=...
132
+ # ```
133
+ if file_model_class.respond_to?(:internal_resource)
134
+ file_model_class.internal_resource
135
+ else
136
+ file_model_class.to_s
137
+ end
112
138
  end
113
139
 
114
140
  def curation_concerns
@@ -118,7 +144,18 @@ module Bulkrax
118
144
  attr_writer :curation_concerns
119
145
 
120
146
  def curation_concern_internal_resources
121
- curation_concerns.map { |cc| cc.try(:internal_resource) || cc.to_s }.uniq
147
+ curation_concerns.map do |cc|
148
+ # WARN: Using #try on :internal_resource can yield unexpected results.
149
+ # If the method is undefined, it can return a truthy value instead of
150
+ # the typical nil.
151
+ #
152
+ # E.g.
153
+ # ```ruby
154
+ # Hyrax::FileSet.try(:internal_resource) || 'hi'
155
+ # => #<Dry::Types::Result::Failure input=:internal_resource error=...
156
+ # ```
157
+ cc.respond_to?(:internal_resource) ? cc.internal_resource : cc.to_s
158
+ end.uniq
122
159
  end
123
160
 
124
161
  attr_writer :ingest_queue_name
@@ -9,7 +9,7 @@ namespace :bulkrax do
9
9
  progress_mark: ' ',
10
10
  remainder_mark: "\u{FF65}")
11
11
  Bulkrax::Status.latest_by_statusable.includes(:statusable).find_each do |status|
12
- status.statusable.update(status_message: status.status_message)
12
+ status.statusable.update(status_message: status.status_message, error_class: status.error_class)
13
13
  @progress.increment
14
14
  end
15
15
  end
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: 8.2.0
4
+ version: 8.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Kaufman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-19 00:00:00.000000000 Z
11
+ date: 2024-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.4.6
33
+ version: 0.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.4.6
40
+ version: 0.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: coderay
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -134,14 +134,14 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: 3.2.4
137
+ version: '5.0'
138
138
  type: :runtime
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: 3.2.4
144
+ version: '5.0'
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: loofah
147
147
  requirement: !ruby/object:Gem::Requirement
@@ -486,6 +486,8 @@ files:
486
486
  - db/migrate/20240823173525_add_error_tracking_to_pending_relationships.rb
487
487
  - db/migrate/20240916182737_add_last_imported_at_to_bulkrax_importers.rb
488
488
  - db/migrate/20240916182823_add_next_import_at_to_bulkrax_importers.rb
489
+ - db/migrate/20241203010707_entry_error_denormalization.rb
490
+ - db/migrate/20241205212513_faster_first_entry.rb
489
491
  - lib/bulkrax.rb
490
492
  - lib/bulkrax/engine.rb
491
493
  - lib/bulkrax/entry_spec_helper.rb
@@ -518,7 +520,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
518
520
  - !ruby/object:Gem::Version
519
521
  version: '0'
520
522
  requirements: []
521
- rubygems_version: 3.4.10
523
+ rubygems_version: 3.1.4
522
524
  signing_key:
523
525
  specification_version: 4
524
526
  summary: Import and export tool for Hyrax and Hyku