app/models/concerns/bulkrax/has_matchers.rb in bulkrax-1.0.2 vs app/models/concerns/bulkrax/has_matchers.rb in bulkrax-2.0.0
- old
+ new
@@ -41,47 +41,47 @@
parsed_metadata[object_name] ||= object_multiple ? [{}] : {}
end
value = if matcher
result = matcher.result(self, node_content)
- next unless result
matched_metadata(multiple, name, result, object_multiple)
elsif multiple
Rails.logger.info("Bulkrax Column automatically matched #{node_name}, #{node_content}")
multiple_metadata(node_content)
else
Rails.logger.info("Bulkrax Column automatically matched #{node_name}, #{node_content}")
single_metadata(node_content)
end
- set_parsed_data(object_multiple, object_name, name, index, value) if value
+ object_name.present? ? set_parsed_object_data(object_multiple, object_name, name, index, value) : set_parsed_data(name, value)
end
end
- def set_parsed_data(object_multiple, object_name, name, index, value)
+ def set_parsed_data(name, value)
+ return parsed_metadata[name] = value unless multiple?(name)
+
+ parsed_metadata[name] ||= []
+ parsed_metadata[name] += Array.wrap(value).flatten
+ end
+
+ def set_parsed_object_data(object_multiple, object_name, name, index, value)
if object_multiple
+ index ||= 0
parsed_metadata[object_name][index] ||= {}
parsed_metadata[object_name][index][name] ||= []
if value.is_a?(Array)
parsed_metadata[object_name][index][name] += value
else
parsed_metadata[object_name][index][name] = value
end
- elsif object_name
+ else
parsed_metadata[object_name][name] ||= []
if value.is_a?(Array)
parsed_metadata[object_name][name] += value
else
parsed_metadata[object_name][name] = value
end
- else
- parsed_metadata[name] ||= []
- if value.is_a?(Array)
- parsed_metadata[name] += value
- else
- parsed_metadata[name] = value
- end
end
end
def single_metadata(content)
content = content.content if content.is_a?(Nokogiri::XML::NodeSet)
@@ -122,15 +122,46 @@
def field_supported?(field)
field = field.gsub('_attributes', '')
return false if excluded?(field)
- return true if ['collections', 'file', 'remote_files', 'model', 'delete'].include?(field)
+ return true if supported_bulkrax_fields.include?(field)
return factory_class.method_defined?(field) && factory_class.properties[field].present?
end
+ def supported_bulkrax_fields
+ ActiveSupport::Deprecation.warn(
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
+ )
+ @supported_bulkrax_fields ||=
+ %W[
+ id
+ file
+ remote_files
+ model
+ delete
+ #{parser.collection_field_mapping}
+ #{related_parents_parsed_mapping}
+ #{related_children_parsed_mapping}
+ ]
+ end
+
def multiple?(field)
- return true if field == 'file' || field == 'remote_files' || field == 'collections'
+ ActiveSupport::Deprecation.warn(
+ 'Creating Collections using the collection_field_mapping will no longer be supported as of Bulkrax version 3.0.' \
+ ' Please configure Bulkrax to use related_parents_field_mapping and related_children_field_mapping instead.'
+ )
+ @multiple_bulkrax_fields ||=
+ %W[
+ file
+ remote_files
+ #{parser.collection_field_mapping}
+ #{related_parents_parsed_mapping}
+ #{related_children_parsed_mapping}
+ ]
+
+ return true if @multiple_bulkrax_fields.include?(field)
return false if field == 'model'
field_supported?(field) && factory_class&.properties&.[](field)&.[]('multiple')
end