bulkrax 3.0.0.beta6 → 3.0.0.beta7

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: 744a122509bc57b9b9a24367c2eee3660d3184bd8209543de43e7f9bf3b1c6ef
4
- data.tar.gz: c9156dba83a463872cf700d93d12770b5967a1e28f269aba0141d0ae9a280e8e
3
+ metadata.gz: 33cb77498f84a977101dd70e7de2ae3853a47c9c9fb514a156df759ab35f6b75
4
+ data.tar.gz: 49f433acd439eb004c8d95c668811df214fcd1bef5fdbfb1477cbc6cd6d598b7
5
5
  SHA512:
6
- metadata.gz: 3abe5abd1a882ebe4090a75c8600a9c9e35ede83fdaab22aaf33966d5b412fc256835ccef6ab7eaf3776f5ff7a4b0c27eaf94ac77fccf99985b7ad1dc2172c78
7
- data.tar.gz: 6f1387ce3876c65f23b15cb0cf6824040af2071f59a7f2c3d68377c78994d543f1bd7beced5a334e9467bc7285c1930da9acc6ac7c9e2fdddbdcd0b156541386
6
+ metadata.gz: 58f561feac1a1d3c85f442c2612ed7e52105fb335358dda3eeb07a51433c5edc03d2f4c26402384be1529002e00d5acd46f5d5e51c715d20d27e21bc7198e68d
7
+ data.tar.gz: 35b539c937e0d66427a0d5f8bf801431b33aaa1d26dfef83786a97f3704a9aafbce4dd33903b7b9f6b1026a8d4339d2b6033b80b1e7aa725bc07d7e463b5493d
@@ -143,13 +143,11 @@ module Bulkrax
143
143
  object.attributes = attrs
144
144
  object.apply_depositor_metadata(@user)
145
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
146
  end
148
147
 
149
148
  def update_collection(attrs)
150
149
  object.attributes = attrs
151
150
  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
151
  end
154
152
 
155
153
  # This method is heavily inspired by Hyrax's AttachFilesToWorkJob
@@ -182,37 +180,6 @@ module Bulkrax
182
180
  actor.update_metadata(file_set_attrs)
183
181
  end
184
182
 
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
-
193
- # Add child to parent's #member_collections
194
- # Add parent to child's #member_of_collections
195
- def persist_collection_memberships(parent, child)
196
- parent.reject!(&:blank?) if parent.respond_to?(:reject!)
197
- child.reject!(&:blank?) if child.respond_to?(:reject!)
198
- return if parent.blank? || child.blank?
199
-
200
- ::Hyrax::Collections::NestedCollectionPersistenceService.persist_nested_collection_for(parent: parent, child: child)
201
- end
202
-
203
- def find_collection(id)
204
- case id
205
- when Hash
206
- Collection.find(id[:id])
207
- when String
208
- Collection.find(id) if id.present?
209
- when Array
210
- id.map { |i| find_collection(i) }
211
- else
212
- []
213
- end
214
- end
215
-
216
183
  def clean_attrs(attrs)
217
184
  # avoid the "ArgumentError: Identifier must be a string of size > 0 in order to be treeified" error
218
185
  # when setting object.attributes
@@ -237,7 +204,7 @@ module Bulkrax
237
204
 
238
205
  # Regardless of what the Parser gives us, these are the properties we are prepared to accept.
239
206
  def permitted_attributes
240
- klass.properties.keys.map(&:to_sym) + %i[id edit_users edit_groups read_groups visibility work_members_attributes admin_set_id member_of_collections_attributes]
207
+ klass.properties.keys.map(&:to_sym) + %i[id edit_users edit_groups read_groups visibility work_members_attributes admin_set_id]
241
208
  end
242
209
  end
243
210
  end
@@ -83,17 +83,7 @@ module Bulkrax
83
83
  # This is adding the reverse relationship, from the child to the parent
84
84
  def collection_parent_work_child
85
85
  child_records[:works].each do |child_record|
86
- attrs = { id: child_record.id, member_of_collections_attributes: { 0 => { id: parent_record.id } } }
87
- ObjectFactory.new(
88
- attributes: attrs,
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&.parser&.work_identifier,
91
- related_parents_parsed_mapping: parent_entry&.parser&.related_parents_parsed_mapping,
92
- replace_files: false,
93
- user: user,
94
- klass: child_record.class,
95
- importer_run_id: importer_run_id
96
- ).run
86
+ ::Hyrax::Collections::NestedCollectionPersistenceService.persist_nested_collection_for(parent: parent_record, child: child_record)
97
87
  # TODO: add counters for :processed_parents and :failed_parents
98
88
  Bulkrax::ImporterRun.find(importer_run_id).increment!(:processed_relationships) # rubocop:disable Rails/SkipsModelValidations
99
89
  end
@@ -101,20 +91,10 @@ module Bulkrax
101
91
 
102
92
  # Collection-Collection membership is added to the as member_ids
103
93
  def collection_parent_collection_child
104
- child_record = child_records[:collections].first
105
- attrs = { id: parent_record.id, child_collection_id: child_record.id }
106
- ObjectFactory.new(
107
- attributes: attrs,
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&.parser&.work_identifier,
110
- related_parents_parsed_mapping: parent_entry&.parser&.related_parents_parsed_mapping,
111
- replace_files: false,
112
- user: user,
113
- klass: parent_record.class,
114
- importer_run_id: importer_run_id
115
- ).run
116
- # TODO: add counters for :processed_parents and :failed_parents
117
- Bulkrax::ImporterRun.find(importer_run_id).increment!(:processed_relationships) # rubocop:disable Rails/SkipsModelValidations
94
+ child_records[:collections].each do |child_record|
95
+ ::Hyrax::Collections::NestedCollectionPersistenceService.persist_nested_collection_for(parent: parent_record, child: child_record)
96
+ Bulkrax::ImporterRun.find(importer_run_id).increment!(:processed_relationships) # rubocop:disable Rails/SkipsModelValidations
97
+ end
118
98
  end
119
99
 
120
100
  # Work-Work membership is added to the parent as member_ids
@@ -124,19 +104,11 @@ module Bulkrax
124
104
  records_hash[i] = { id: child_record.id }
125
105
  end
126
106
  attrs = {
127
- id: parent_record.id,
128
107
  work_members_attributes: records_hash
129
108
  }
130
- ObjectFactory.new(
131
- attributes: attrs,
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&.parser&.work_identifier,
134
- related_parents_parsed_mapping: parent_entry&.parser&.related_parents_parsed_mapping,
135
- replace_files: false,
136
- user: user,
137
- klass: parent_record.class,
138
- importer_run_id: importer_run_id
139
- ).run
109
+ parent_record.reindex_extent = Hyrax::Adapters::NestingIndexAdapter::LIMITED_REINDEX if parent_record.respond_to?(:reindex_extent)
110
+ env = Hyrax::Actors::Environment.new(parent_record, Ability.new(user), attrs)
111
+ Hyrax::CurationConcern.actor.update(env)
140
112
  # TODO: add counters for :processed_parents and :failed_parents
141
113
  Bulkrax::ImporterRun.find(importer_run_id).increment!(:processed_relationships) # rubocop:disable Rails/SkipsModelValidations
142
114
  end
@@ -10,7 +10,6 @@ module Bulkrax
10
10
  begin
11
11
  entry.build
12
12
  entry.save
13
- add_user_to_permission_template!(entry)
14
13
  ImporterRun.find(args[1]).increment!(:processed_records)
15
14
  ImporterRun.find(args[1]).increment!(:processed_collections)
16
15
  ImporterRun.find(args[1]).decrement!(:enqueued_records)
@@ -22,22 +21,5 @@ module Bulkrax
22
21
  end
23
22
  end
24
23
  # rubocop:enable Rails/SkipsModelValidations
25
-
26
- private
27
-
28
- def add_user_to_permission_template!(entry)
29
- user = ::User.find(entry.importerexporter.user_id)
30
- collection = entry.factory.find
31
- permission_template = Hyrax::PermissionTemplate.find_or_create_by!(source_id: collection.id)
32
-
33
- Hyrax::PermissionTemplateAccess.find_or_create_by!(
34
- permission_template_id: permission_template.id,
35
- agent_id: user.user_key,
36
- agent_type: 'user',
37
- access: 'manage'
38
- )
39
-
40
- collection.reset_access_controls!
41
- end
42
24
  end
43
25
  end
@@ -11,6 +11,7 @@ module Bulkrax
11
11
  unless self.importerexporter.validate_only
12
12
  raise CollectionsCreatedError unless collections_created?
13
13
  @item = factory.run!
14
+ add_user_to_permission_templates! if self.class.to_s.include?("Collection")
14
15
  parent_jobs if self.parsed_metadata[related_parents_parsed_mapping].present?
15
16
  child_jobs if self.parsed_metadata[related_children_parsed_mapping].present?
16
17
  end
@@ -24,6 +25,25 @@ module Bulkrax
24
25
  return @item
25
26
  end
26
27
 
28
+ def add_user_to_permission_templates!
29
+ permission_template = Hyrax::PermissionTemplate.find_or_create_by!(source_id: @item.id)
30
+
31
+ Hyrax::PermissionTemplateAccess.find_or_create_by!(
32
+ permission_template_id: permission_template.id,
33
+ agent_id: user.user_key,
34
+ agent_type: 'user',
35
+ access: 'manage'
36
+ )
37
+ Hyrax::PermissionTemplateAccess.find_or_create_by!(
38
+ permission_template_id: permission_template.id,
39
+ agent_id: 'admin',
40
+ agent_type: 'group',
41
+ access: 'manage'
42
+ )
43
+
44
+ @item.reset_access_controls!
45
+ end
46
+
27
47
  def parent_jobs
28
48
  self.parsed_metadata[related_parents_parsed_mapping].each do |parent_identifier|
29
49
  next if parent_identifier.blank?
@@ -4,6 +4,8 @@ require 'csv'
4
4
  module Bulkrax
5
5
  class CsvParser < ApplicationParser # rubocop:disable Metrics/ClassLength
6
6
  include ErroredEntries
7
+ attr_writer :collections, :file_sets, :works
8
+
7
9
  def self.export_supported?
8
10
  true
9
11
  end
@@ -17,37 +19,48 @@ module Bulkrax
17
19
  @records ||= csv_data.map { |record_data| entry_class.data_for_entry(record_data, nil, self) }
18
20
  end
19
21
 
20
- def collections
21
- # retrieve a list of unique collections
22
+ def build_records
23
+ @collections = []
24
+ @works = []
25
+ @file_sets = []
22
26
  records.map do |r|
23
- collections = []
24
27
  model_field_mappings.each do |model_mapping|
25
- collections << r if r[model_mapping.to_sym]&.downcase == 'collection'
28
+ if r[model_mapping.to_sym]&.downcase == 'collection'
29
+ @collections << r
30
+ elsif r[model_mapping.to_sym]&.downcase == 'fileset'
31
+ @file_sets << r
32
+ else
33
+ @works << r
34
+ end
26
35
  end
27
- collections
28
- end.flatten.compact.uniq
36
+ end
37
+ @collections = @collections.flatten.compact.uniq
38
+ @file_sets = @file_sets.flatten.compact.uniq
39
+ @works = @works.flatten.compact.uniq
40
+ true
29
41
  end
30
42
 
31
- def collections_total
32
- collections.size
43
+ def collections
44
+ build_records if @collections.nil?
45
+ @collections
33
46
  end
34
47
 
35
48
  def works
36
- records - collections - file_sets
49
+ build_records if @works.nil?
50
+ @works
37
51
  end
38
52
 
39
- def works_total
40
- works.size
53
+ def file_sets
54
+ build_records if @file_sets.nil?
55
+ @file_sets
41
56
  end
42
57
 
43
- def file_sets
44
- records.map do |r|
45
- file_sets = []
46
- model_field_mappings.each do |model_mapping|
47
- file_sets << r if r[model_mapping.to_sym]&.downcase == 'fileset'
48
- end
49
- file_sets
50
- end.flatten.compact.uniq
58
+ def collections_total
59
+ collections.size
60
+ end
61
+
62
+ def works_total
63
+ works.size
51
64
  end
52
65
 
53
66
  def file_sets_total
@@ -96,21 +109,24 @@ module Bulkrax
96
109
  end
97
110
 
98
111
  def create_objects(types_array = nil)
112
+ index = 0
99
113
  (types_array || %w[work collection file_set relationship]).each do |type|
100
114
  if type.eql?('relationship')
101
115
  ScheduleRelationshipsJob.set(wait: 5.minutes).perform_later(importer_id: importerexporter.id)
102
116
  next
103
117
  end
104
- send(type.pluralize).each_with_index do |current_record, index|
105
- next unless record_has_source_identifier(current_record, records.find_index(current_record))
106
- break if limit_reached?(limit, records.find_index(current_record))
118
+ send(type.pluralize).each do |current_record|
119
+ next unless record_has_source_identifier(current_record, index)
120
+ break if limit_reached?(limit, index)
107
121
 
108
122
  seen[current_record[source_identifier]] = true
109
123
  create_entry_and_job(current_record, type)
110
124
  increment_counters(index, "#{type}": true)
125
+ index += 1
111
126
  end
112
127
  importer.record_status
113
128
  end
129
+ true
114
130
  rescue StandardError => e
115
131
  status_info(e)
116
132
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bulkrax
4
- VERSION = '3.0.0.beta6'
4
+ VERSION = '3.0.0.beta7'
5
5
  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: 3.0.0.beta6
4
+ version: 3.0.0.beta7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Kaufman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-27 00:00:00.000000000 Z
11
+ date: 2022-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails