Class: Bulkrax::ObjectFactory
Overview
rubocop:disable Metrics/ClassLength
Instance Attribute Summary
#attributes, #importer_run_id, #klass, #object, #related_parents_parsed_mapping, #replace_files, #source_identifier_value, #update_files, #user, #work_identifier, #work_identifier_search_field
Class Method Interface
collapse
-
.add_child_to_parent_work(parent:, child:) ⇒ Object
-
.add_resource_to_collection(collection:, resource:, user:) ⇒ Object
-
.clean! ⇒ Object
-
.export_properties ⇒ Object
-
.field_multi_value?(field:, model:) ⇒ Boolean
-
.field_supported?(field:, model:) ⇒ Boolean
-
.file_sets_for(resource:) ⇒ Object
-
.filename_for(fileset:) ⇒ String
#input [Fileset or FileMetadata].
-
.find(id) ⇒ Object
-
.find_or_create_default_admin_set ⇒ Object
-
.model_name(resource:) ⇒ String
The name of the model class for the given resource/object.
-
.ordered_file_sets_for(object) ⇒ Object
-
.original_file(fileset:) ⇒ File
-
.publish ⇒ Object
-
.query(q, **kwargs) ⇒ Object
rubocop:enable Metrics/ParameterLists.
-
.save!(resource:) ⇒ Object
-
.search_by_property(value:, klass:, field: nil, search_field: nil, name_field: nil, verify_property: false) ⇒ NilClass, ActiveFedora::Base
rubocop:disable Metrics/ParameterLists.
-
.solr_name(field_name) ⇒ Object
-
.thumbnail_for(resource:) ⇒ File or FileMetadata
A thumbnail is linked to a work rather than the file set itself.
-
.update_index(resources: []) ⇒ Object
-
.update_index_for_file_sets_of(resource:) ⇒ Object
Instance Method Summary
collapse
add_user_to_collection_permissions, #add_user_to_collection_permissions, #base_permitted_attributes, #create, default_admin_set_id, default_admin_set_or_nil, #find, #find_or_create, find_or_nil, #initialize, #run, #run!, #search_by_identifier, #transformation_removes_blank_hash_values, #update
Methods included from Loggable
#log_created, #log_deleted_fs, #log_updated
#find_record
Class Method Details
.add_child_to_parent_work(parent:, child:) ⇒ Object
Note:
This does not save either object. We need to do that in another loop. Why? Because we might be adding many items to the parent.
14
15
16
17
18
|
# File 'app/factories/bulkrax/object_factory.rb', line 14
def self.add_child_to_parent_work(parent:, child:)
return true if parent.ordered_members.to_a.include?(child)
parent.ordered_members << child
end
|
.add_resource_to_collection(collection:, resource:, user:) ⇒ Object
20
21
22
23
24
25
|
# File 'app/factories/bulkrax/object_factory.rb', line 20
def self.add_resource_to_collection(collection:, resource:, user:)
collection.try(:reindex_extent=, Hyrax::Adapters::NestingIndexAdapter::LIMITED_REINDEX) if
defined?(Hyrax::Adapters::NestingIndexAdapter)
resource.member_of_collections << collection
save!(resource: resource, user: user)
end
|
.clean! ⇒ Object
163
164
165
166
167
|
# File 'app/factories/bulkrax/object_factory.rb', line 163
def self.clean!
super do
ActiveFedora::Cleaner.clean!
end
end
|
.export_properties ⇒ Object
67
68
69
70
71
|
# File 'app/factories/bulkrax/object_factory.rb', line 67
def self.export_properties
properties = Bulkrax.curation_concerns.map { |work| work.properties.keys }.flatten.uniq.sort
properties.reject { |prop| Bulkrax.reserved_properties.include?(prop) }
end
|
.field_multi_value?(field:, model:) ⇒ Boolean
73
74
75
76
77
78
|
# File 'app/factories/bulkrax/object_factory.rb', line 73
def self.field_multi_value?(field:, model:)
return false unless field_supported?(field: field, model: model)
return false unless model.singleton_methods.include?(:properties)
model&.properties&.[](field)&.[]("multiple")
end
|
.field_supported?(field:, model:) ⇒ Boolean
80
81
82
|
# File 'app/factories/bulkrax/object_factory.rb', line 80
def self.field_supported?(field:, model:)
model.method_defined?(field) && model.properties[field].present?
end
|
.file_sets_for(resource:) ⇒ Object
84
85
86
87
88
89
|
# File 'app/factories/bulkrax/object_factory.rb', line 84
def self.file_sets_for(resource:)
return [] if resource.blank?
return [resource] if resource.is_a?(Bulkrax.file_model_class)
resource.file_sets
end
|
.filename_for(fileset:) ⇒ String
#input [Fileset or FileMetadata]
58
59
60
61
62
63
|
# File 'app/factories/bulkrax/object_factory.rb', line 58
def self.filename_for(fileset:)
file = original_file(fileset: fileset)
file.file_name.first
rescue NoMethodError
nil
end
|
.find(id) ⇒ Object
94
95
96
97
98
|
# File 'app/factories/bulkrax/object_factory.rb', line 94
def self.find(id)
ActiveFedora::Base.find(id)
rescue ActiveFedora::ObjectNotFoundError => e
raise ObjectFactoryInterface::ObjectNotFoundError, e.message
end
|
.find_or_create_default_admin_set ⇒ Object
100
101
102
103
|
# File 'app/factories/bulkrax/object_factory.rb', line 100
def self.find_or_create_default_admin_set
AdminSet.find_or_create_default_admin_set_id
end
|
.model_name(resource:) ⇒ String
Returns the name of the model class for the given resource/object.
33
34
35
|
# File 'app/factories/bulkrax/object_factory.rb', line 33
def self.model_name(resource:)
resource.has_model.first
end
|
.ordered_file_sets_for(object) ⇒ Object
177
178
179
|
# File 'app/factories/bulkrax/object_factory.rb', line 177
def self.ordered_file_sets_for(object)
object&.ordered_members.to_a.select(&:file_set?)
end
|
.original_file(fileset:) ⇒ File
Returns the original file.
51
52
53
|
# File 'app/factories/bulkrax/object_factory.rb', line 51
def self.original_file(fileset:)
fileset.try(:original_file)
end
|
.publish ⇒ Object
105
106
107
|
# File 'app/factories/bulkrax/object_factory.rb', line 105
def self.publish(**)
return true
end
|
.query(q, **kwargs) ⇒ Object
rubocop:enable Metrics/ParameterLists
159
160
161
|
# File 'app/factories/bulkrax/object_factory.rb', line 159
def self.query(q, **kwargs)
ActiveFedora::SolrService.query(q, **kwargs)
end
|
.save!(resource:) ⇒ Object
181
182
183
|
# File 'app/factories/bulkrax/object_factory.rb', line 181
def self.save!(resource:, **)
resource.save!
end
|
.search_by_property(value:, klass:, field: nil, search_field: nil, name_field: nil, verify_property: false) ⇒ NilClass, ActiveFedora::Base
Note:
HEY WE’RE USING THIS FOR A WINGS CUSTOM QUERY. BE CAREFUL WITH REMOVING IT.
rubocop:disable Metrics/ParameterLists
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# File 'app/factories/bulkrax/object_factory.rb', line 129
def self.search_by_property(value:, klass:, field: nil, search_field: nil, name_field: nil, verify_property: false)
return nil unless klass.respond_to?(:where)
return if value.blank?
return if verify_property && !klass.properties.keys.include?(search_field)
search_field ||= field
name_field ||= field
raise "You must provide either (search_field AND name_field) OR field parameters" if search_field.nil? || name_field.nil?
match = klass.where(search_field => value).detect do |m|
Array(m.send(name_field)).include?(value)
end
return match if match
end
|
.solr_name(field_name) ⇒ Object
169
170
171
172
173
174
175
|
# File 'app/factories/bulkrax/object_factory.rb', line 169
def self.solr_name(field_name)
if defined?(Hyrax)
Hyrax.index_field_mapper.solr_name(field_name)
else
ActiveFedora.index_field_mapper.solr_name(field_name)
end
end
|
.thumbnail_for(resource:) ⇒ File or FileMetadata
A thumbnail is linked to a work rather than the file set itself.
40
41
42
43
44
45
46
|
# File 'app/factories/bulkrax/object_factory.rb', line 40
def self.thumbnail_for(resource:)
return nil unless resource.respond_to?(:thumbnail)
return resource.thumbnail if resource.thumbnail.present?
return nil unless resource.respond_to?(:parent) && resource.parent.present?
return nil unless resource.parent.respond_to?(:thumbnail)
resource.parent.thumbnail
end
|
.update_index(resources: []) ⇒ Object
185
186
187
|
# File 'app/factories/bulkrax/object_factory.rb', line 185
def self.update_index(resources: [])
Array(resources).each(&:update_index)
end
|
.update_index_for_file_sets_of(resource:) ⇒ Object
27
28
29
|
# File 'app/factories/bulkrax/object_factory.rb', line 27
def self.update_index_for_file_sets_of(resource:)
resource.file_sets.each(&:update_index) if resource.respond_to?(:file_sets)
end
|
Instance Method Details
#delete(_user) ⇒ Object
201
202
203
204
205
206
|
# File 'app/factories/bulkrax/object_factory.rb', line 201
def delete(_user)
obj = find
raise ObjectFactoryInterface::ObjectNotFoundError, "Object not found to delete" unless obj
obj.delete(eradicate: true)
end
|
#find_by_id ⇒ Object
191
192
193
194
195
196
197
198
199
|
# File 'app/factories/bulkrax/object_factory.rb', line 191
def find_by_id
return false if attributes[:id].blank?
method_name = klass.respond_to?(:exist?) ? :exist? : :exists?
klass.find(attributes[:id]) if klass.send(method_name, attributes[:id])
rescue Valkyrie::Persistence::ObjectNotFoundError
false
end
|