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