bulkrax 3.0.0.beta4 → 3.0.0.beta5
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 +4 -4
- data/app/factories/bulkrax/object_factory.rb +11 -3
- data/app/jobs/bulkrax/create_relationships_job.rb +10 -10
- data/app/models/bulkrax/csv_entry.rb +10 -7
- data/app/models/bulkrax/importer_run.rb +3 -1
- data/app/models/concerns/bulkrax/dynamic_record_lookup.rb +2 -1
- data/app/models/concerns/bulkrax/import_behavior.rb +0 -7
- data/app/views/bulkrax/exporters/show.html.erb +4 -10
- data/app/views/bulkrax/importers/show.html.erb +2 -3
- data/db/migrate/20211203195233_rename_children_counters_to_relationships.rb +2 -2
- data/db/migrate/20220301001839_create_bulkrax_pending_relationships.rb +7 -5
- data/db/migrate/20220303212810_add_order_to_bulkrax_pending_relationships.rb +1 -1
- data/lib/bulkrax/version.rb +1 -1
- metadata +1 -3
- data/db/migrate/20220301020307_add_parents_to_bulkrax_importer_runs.rb +0 -5
- data/db/migrate/20220330165510_remove_array_true_from_importer_run_parents_column.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 994ee06cdd4ed63d0dfa79e0e77b1fb6b017528926a7b891d8ff702a15cf7347
|
4
|
+
data.tar.gz: 55298f93ce2078f1157a1426ce63823b78ae8a04cd4b076947a2ba1ad93ad05c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 512b254802875cca2dae6377a1317439b25d35038aacd56ce2db18ee2aaaf9d0f1d22bb2f521ce16366a7a5630d5768468f3949579216fc02502b36e06e6159a
|
7
|
+
data.tar.gz: b25f1d98da59db8bc91f02d90fe44003350d7bf7eb7b67d5610d2006f7e0f5e1b72e9d37601b3a41f01faf34c8c07d8c388e173084edc6ebaf985e5f124f7d4a
|
@@ -140,16 +140,16 @@ module Bulkrax
|
|
140
140
|
def create_collection(attrs)
|
141
141
|
attrs = clean_attrs(attrs)
|
142
142
|
attrs = collection_type(attrs)
|
143
|
-
persist_collection_memberships(parent: find_collection(attributes[related_parents_parsed_mapping]), child: object) if attributes[related_parents_parsed_mapping].present?
|
144
143
|
object.attributes = attrs
|
145
144
|
object.apply_depositor_metadata(@user)
|
146
145
|
object.save!
|
146
|
+
pass_collection_to_be_persisted(parent: find_collection(attributes[related_parents_parsed_mapping]), child: object) if attributes[related_parents_parsed_mapping].present?
|
147
147
|
end
|
148
148
|
|
149
149
|
def update_collection(attrs)
|
150
|
-
persist_collection_memberships(parent: find_collection(attributes[related_parents_parsed_mapping]), child: object) if attributes[related_parents_parsed_mapping].present?
|
151
150
|
object.attributes = attrs
|
152
151
|
object.save!
|
152
|
+
pass_collection_to_be_persisted(parent: find_collection(attributes[related_parents_parsed_mapping]), child: object) if attributes[related_parents_parsed_mapping].present?
|
153
153
|
end
|
154
154
|
|
155
155
|
# This method is heavily inspired by Hyrax's AttachFilesToWorkJob
|
@@ -182,9 +182,17 @@ module Bulkrax
|
|
182
182
|
actor.update_metadata(file_set_attrs)
|
183
183
|
end
|
184
184
|
|
185
|
+
def pass_collection_to_be_persisted(parent:, child:)
|
186
|
+
if parent.is_a? Array
|
187
|
+
parent.each { |par| persist_collection_memberships(par, child) }
|
188
|
+
else
|
189
|
+
persist_collection_memberships(parent, child)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
185
193
|
# Add child to parent's #member_collections
|
186
194
|
# Add parent to child's #member_of_collections
|
187
|
-
def persist_collection_memberships(parent
|
195
|
+
def persist_collection_memberships(parent, child)
|
188
196
|
parent.reject!(&:blank?) if parent.respond_to?(:reject!)
|
189
197
|
child.reject!(&:blank?) if child.respond_to?(:reject!)
|
190
198
|
return if parent.blank? || child.blank?
|
@@ -21,7 +21,7 @@ module Bulkrax
|
|
21
21
|
|
22
22
|
queue_as :import
|
23
23
|
|
24
|
-
attr_accessor :child_records, :parent_record, :parent_entry, :importer_run_id
|
24
|
+
attr_accessor :child_records, :child_entry, :parent_record, :parent_entry, :importer_run_id
|
25
25
|
|
26
26
|
# @param parent_identifier [String] Work/Collection ID or Bulkrax::Entry source_identifiers
|
27
27
|
# @param importer_run [Bulkrax::ImporterRun] current importer run (needed to properly update counters)
|
@@ -31,7 +31,7 @@ module Bulkrax
|
|
31
31
|
# Whether the @base_entry is the parent or the child in the relationship is determined by the presence of a
|
32
32
|
# parent_identifier or child_identifier param. For example, if a parent_identifier is passed, we know @base_entry
|
33
33
|
# is the child in the relationship, and vice versa if a child_identifier is passed.
|
34
|
-
def perform(parent_identifier:, importer_run_id:)
|
34
|
+
def perform(parent_identifier:, importer_run_id:) # rubocop:disable Metrics/AbcSize
|
35
35
|
pending_relationships = Bulkrax::PendingRelationship.find_each.select do |rel|
|
36
36
|
rel.bulkrax_importer_run_id == importer_run_id && rel.parent_id == parent_identifier
|
37
37
|
end.sort_by(&:order)
|
@@ -41,7 +41,7 @@ module Bulkrax
|
|
41
41
|
@child_records = { works: [], collections: [] }
|
42
42
|
pending_relationships.each do |rel|
|
43
43
|
raise ::StandardError, %("#{rel}" needs either a child or a parent to create a relationship) if rel.child_id.nil? || rel.parent_id.nil?
|
44
|
-
|
44
|
+
@child_entry, child_record = find_record(rel.child_id, importer_run_id)
|
45
45
|
child_record.is_a?(::Collection) ? @child_records[:collections] << child_record : @child_records[:works] << child_record
|
46
46
|
end
|
47
47
|
|
@@ -59,7 +59,7 @@ module Bulkrax
|
|
59
59
|
create_relationships
|
60
60
|
pending_relationships.each(&:destroy)
|
61
61
|
rescue ::StandardError => e
|
62
|
-
parent_entry.status_info(e)
|
62
|
+
parent_entry ? parent_entry.status_info(e) : child_entry.status_info(e)
|
63
63
|
Bulkrax::ImporterRun.find(importer_run_id).increment!(:failed_relationships) # rubocop:disable Rails/SkipsModelValidations
|
64
64
|
end
|
65
65
|
|
@@ -87,8 +87,8 @@ module Bulkrax
|
|
87
87
|
ObjectFactory.new(
|
88
88
|
attributes: attrs,
|
89
89
|
source_identifier_value: nil, # sending the :id in the attrs means the factory doesn't need a :source_identifier_value
|
90
|
-
work_identifier: parent_entry
|
91
|
-
related_parents_parsed_mapping: parent_entry
|
90
|
+
work_identifier: parent_entry&.parser&.work_identifier,
|
91
|
+
related_parents_parsed_mapping: parent_entry&.parser&.related_parents_parsed_mapping,
|
92
92
|
replace_files: false,
|
93
93
|
user: user,
|
94
94
|
klass: child_record.class,
|
@@ -106,8 +106,8 @@ module Bulkrax
|
|
106
106
|
ObjectFactory.new(
|
107
107
|
attributes: attrs,
|
108
108
|
source_identifier_value: nil, # sending the :id in the attrs means the factory doesn't need a :source_identifier_value
|
109
|
-
work_identifier: parent_entry
|
110
|
-
related_parents_parsed_mapping: parent_entry
|
109
|
+
work_identifier: parent_entry&.parser&.work_identifier,
|
110
|
+
related_parents_parsed_mapping: parent_entry&.parser&.related_parents_parsed_mapping,
|
111
111
|
replace_files: false,
|
112
112
|
user: user,
|
113
113
|
klass: parent_record.class,
|
@@ -130,8 +130,8 @@ module Bulkrax
|
|
130
130
|
ObjectFactory.new(
|
131
131
|
attributes: attrs,
|
132
132
|
source_identifier_value: nil, # sending the :id in the attrs means the factory doesn't need a :source_identifier_value
|
133
|
-
work_identifier: parent_entry
|
134
|
-
related_parents_parsed_mapping: parent_entry
|
133
|
+
work_identifier: parent_entry&.parser&.work_identifier,
|
134
|
+
related_parents_parsed_mapping: parent_entry&.parser&.related_parents_parsed_mapping,
|
135
135
|
replace_files: false,
|
136
136
|
user: user,
|
137
137
|
klass: parent_record.class,
|
@@ -240,8 +240,8 @@ module Bulkrax
|
|
240
240
|
Bulkrax::CsvMatcher
|
241
241
|
end
|
242
242
|
|
243
|
-
def
|
244
|
-
return @
|
243
|
+
def collection_identifiers
|
244
|
+
return @collection_identifiers if @collection_identifiers.present?
|
245
245
|
|
246
246
|
parent_field_mapping = self.class.parent_field(parser)
|
247
247
|
return [] unless parent_field_mapping.present? && record[parent_field_mapping].present?
|
@@ -249,22 +249,25 @@ module Bulkrax
|
|
249
249
|
identifiers = []
|
250
250
|
split_references = record[parent_field_mapping].split(/\s*[;|]\s*/)
|
251
251
|
split_references.each do |c_reference|
|
252
|
-
matching_collection_entries = importerexporter.entries.select
|
252
|
+
matching_collection_entries = importerexporter.entries.select do |e|
|
253
|
+
(e.raw_metadata[source_identifier] == c_reference) &&
|
254
|
+
e.is_a?(CsvCollectionEntry)
|
255
|
+
end
|
253
256
|
raise ::StandardError, 'Only expected to find one matching entry' if matching_collection_entries.count > 1
|
254
257
|
identifiers << matching_collection_entries.first&.identifier
|
255
258
|
end
|
256
259
|
|
257
|
-
@
|
260
|
+
@collection_identifiers = identifiers.compact.presence || []
|
258
261
|
end
|
259
262
|
|
260
263
|
def collections_created?
|
261
|
-
|
264
|
+
collection_identifiers.length == self.collection_ids.length
|
262
265
|
end
|
263
266
|
|
264
267
|
def find_collection_ids
|
265
268
|
return self.collection_ids if collections_created?
|
266
|
-
if
|
267
|
-
|
269
|
+
if collection_identifiers.present?
|
270
|
+
collection_identifiers.each do |collection_id|
|
268
271
|
c = find_collection(collection_id)
|
269
272
|
skip = c.blank? || self.collection_ids.include?(c.id)
|
270
273
|
self.collection_ids << c.id unless skip
|
@@ -11,7 +11,8 @@ module Bulkrax
|
|
11
11
|
def find_record(identifier, importer_run_id = nil)
|
12
12
|
# check for our entry in our current importer first
|
13
13
|
importer_id = ImporterRun.find(importer_run_id).importer_id
|
14
|
-
|
14
|
+
default_scope = { identifier: identifier, importerexporter_type: 'Bulkrax::Importer' }
|
15
|
+
record = Entry.find_by(default_scope, importerexporter_id: importer_id) || Entry.find_by(default_scope)
|
15
16
|
|
16
17
|
# TODO(alishaevn): discuss whether we are only looking for Collection models here
|
17
18
|
# use ActiveFedora::Base.find(identifier) instead?
|
@@ -28,7 +28,6 @@ module Bulkrax
|
|
28
28
|
self.parsed_metadata[related_parents_parsed_mapping].each do |parent_identifier|
|
29
29
|
next if parent_identifier.blank?
|
30
30
|
|
31
|
-
add_parent_to_import_run(parent_identifier, importerexporter.last_run)
|
32
31
|
PendingRelationship.create!(child_id: self.identifier, parent_id: parent_identifier, bulkrax_importer_run_id: importerexporter.last_run.id, order: self.id)
|
33
32
|
end
|
34
33
|
end
|
@@ -37,16 +36,10 @@ module Bulkrax
|
|
37
36
|
self.parsed_metadata[related_children_parsed_mapping].each do |child_identifier|
|
38
37
|
next if child_identifier.blank?
|
39
38
|
|
40
|
-
add_parent_to_import_run(self.identifier, importerexporter.last_run)
|
41
39
|
PendingRelationship.create!(parent_id: self.identifier, child_id: child_identifier, bulkrax_importer_run_id: importerexporter.last_run.id, order: self.id)
|
42
40
|
end
|
43
41
|
end
|
44
42
|
|
45
|
-
def add_parent_to_import_run(parent_id, run)
|
46
|
-
run.parents << parent_id
|
47
|
-
run.save
|
48
|
-
end
|
49
|
-
|
50
43
|
def find_collection_ids
|
51
44
|
self.collection_ids
|
52
45
|
end
|
@@ -79,13 +79,12 @@
|
|
79
79
|
<%= @exporter.exporter_runs.last&.total_work_entries %>
|
80
80
|
</p>
|
81
81
|
<br>
|
82
|
-
<div class=
|
82
|
+
<div class='bulkrax-nav-tab-table-left-align'>
|
83
83
|
<h2>Entries</h2>
|
84
84
|
<table class='table table-striped'>
|
85
85
|
<thead>
|
86
86
|
<tr>
|
87
87
|
<th>Identifier</th>
|
88
|
-
<th>Collection</th>
|
89
88
|
<th>Entry ID</th>
|
90
89
|
<th>Status</th>
|
91
90
|
<th>Errors</th>
|
@@ -97,17 +96,12 @@
|
|
97
96
|
<% @work_entries.each do |e| %>
|
98
97
|
<tr>
|
99
98
|
<td><%= link_to e.identifier, bulkrax.exporter_entry_path(@exporter.id, e.id) %></td>
|
100
|
-
<% if e.parsed_metadata.present? && e.parsed_metadata.dig('collections').present? %>
|
101
|
-
<td><%= e.parsed_metadata.dig('collections').map {|c| c['id'] }.join('; ') %></td>
|
102
|
-
<% elsif e.raw_metadata.present? %>
|
103
|
-
<td><%= Array.wrap(e.raw_metadata.dig('collection')).join(';') %></td>
|
104
|
-
<% else %>
|
105
|
-
<td></td>
|
106
|
-
<% end %>
|
107
99
|
<td><%= e.id %></td>
|
108
100
|
<% if e.status == 'Complete' %>
|
109
101
|
<td><span class='glyphicon glyphicon-ok' style='color: green;'></span> <%= e.status %></td>
|
110
|
-
|
102
|
+
<% elsif e.status == 'Pending' %>
|
103
|
+
<td><span class='glyphicon glyphicon-option-horizontal' style='color: blue;'></span> <%= e.status %></td>
|
104
|
+
<% else %>
|
111
105
|
<td><span class='glyphicon glyphicon-remove' style='color: red;'></span> <%= e.status %></td>
|
112
106
|
<% end %>
|
113
107
|
<% if e.last_error.present? %>
|
@@ -85,7 +85,6 @@
|
|
85
85
|
<thead>
|
86
86
|
<tr>
|
87
87
|
<th>Identifier</th>
|
88
|
-
<th>Collection</th>
|
89
88
|
<th>Entry ID</th>
|
90
89
|
<th>Status</th>
|
91
90
|
<th>Errors</th>
|
@@ -97,8 +96,6 @@
|
|
97
96
|
<% @work_entries.each do |e| %>
|
98
97
|
<tr>
|
99
98
|
<td><%= link_to e.identifier, bulkrax.importer_entry_path(@importer.id, e.id) %></td>
|
100
|
-
<% collection_titles = e.collection_ids.map {|id| c = Collection.find id; c.title.first } %>
|
101
|
-
<td><%= collection_titles.join('; ') %></td>
|
102
99
|
<td><%= e.id %></td>
|
103
100
|
<% if e.status == "Complete" %>
|
104
101
|
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
@@ -178,6 +175,8 @@
|
|
178
175
|
<td><%= e.id %></td>
|
179
176
|
<% if e.status == "Complete" %>
|
180
177
|
<td><span class="glyphicon glyphicon-ok" style="color: green;"></span> <%= e.status %></td>
|
178
|
+
<% elsif e.status == "Pending" %>
|
179
|
+
<td><span class="glyphicon glyphicon-option-horizontal" style="color: blue;"></span> <%= e.status %></td>
|
181
180
|
<% else %>
|
182
181
|
<td><span class="glyphicon glyphicon-remove" style="color: red;"></span> <%= e.status %></td>
|
183
182
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class RenameChildrenCountersToRelationships < ActiveRecord::Migration[5.2]
|
2
2
|
def change
|
3
|
-
rename_column :bulkrax_importer_runs, :processed_children, :processed_relationships
|
4
|
-
rename_column :bulkrax_importer_runs, :failed_children, :failed_relationships
|
3
|
+
rename_column :bulkrax_importer_runs, :processed_children, :processed_relationships unless column_exists?(:bulkrax_importer_runs, :processed_relationships)
|
4
|
+
rename_column :bulkrax_importer_runs, :failed_children, :failed_relationships unless column_exists?(:bulkrax_importer_runs, :failed_relationships)
|
5
5
|
end
|
6
6
|
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
class CreateBulkraxPendingRelationships < ActiveRecord::Migration[5.2]
|
2
2
|
def change
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
unless table_exists?(:bulkrax_pending_relationships)
|
4
|
+
create_table :bulkrax_pending_relationships do |t|
|
5
|
+
t.belongs_to :bulkrax_importer_run, foreign_key: true, null: false
|
6
|
+
t.string :parent_id, null: false
|
7
|
+
t.string :child_id, null: false
|
7
8
|
|
8
|
-
|
9
|
+
t.timestamps
|
10
|
+
end
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class AddOrderToBulkraxPendingRelationships < ActiveRecord::Migration[5.2]
|
2
2
|
def change
|
3
|
-
add_column :bulkrax_pending_relationships, :order, :integer, default: 0
|
3
|
+
add_column :bulkrax_pending_relationships, :order, :integer, default: 0 unless column_exists?(:bulkrax_pending_relationships, :order)
|
4
4
|
end
|
5
5
|
end
|
data/lib/bulkrax/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bulkrax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
4
|
+
version: 3.0.0.beta5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Kaufman
|
@@ -366,9 +366,7 @@ files:
|
|
366
366
|
- db/migrate/20220118001339_add_import_attempts_to_entries.rb
|
367
367
|
- db/migrate/20220119213325_add_work_counters_to_importer_runs.rb
|
368
368
|
- db/migrate/20220301001839_create_bulkrax_pending_relationships.rb
|
369
|
-
- db/migrate/20220301020307_add_parents_to_bulkrax_importer_runs.rb
|
370
369
|
- db/migrate/20220303212810_add_order_to_bulkrax_pending_relationships.rb
|
371
|
-
- db/migrate/20220330165510_remove_array_true_from_importer_run_parents_column.rb
|
372
370
|
- lib/bulkrax.rb
|
373
371
|
- lib/bulkrax/engine.rb
|
374
372
|
- lib/bulkrax/version.rb
|