class CSVStepImporter::Model::Model
Attributes
dao_values[RW]
Public Class Methods
cache_key(pluralize: false)
click to toggle source
Configuration
# File lib/csv_step_importer/model/model.rb, line 36 def self.cache_key(pluralize: false) key = name.underscore.gsub("/", "_") (pluralize ? key.pluralize : key.singularize).to_sym end
new(**attributes)
click to toggle source
Logic
Calls superclass method
CSVStepImporter::Node::new
# File lib/csv_step_importer/model/model.rb, line 24 def initialize(**attributes) super **attributes add_daos filter_daos! if composite_key_columns add_model_children end
Public Instance Methods
add_daos()
click to toggle source
# File lib/csv_step_importer/model/model.rb, line 61 def add_daos dao_node_children = rows.collect do |row| build_daos_for_row row end.flatten.compact link_rows_to_daos daos: dao_node_children dao_node.add_children dao_node_children end
add_model_children()
click to toggle source
Logic
# File lib/csv_step_importer/model/model.rb, line 45 def add_model_children add_children dao_node, prepend: true end
build_daos_for_row(row)
click to toggle source
can return nil, a single object or an array of objects
# File lib/csv_step_importer/model/model.rb, line 72 def build_daos_for_row(row) dao_class.new parent: dao_node, row: row end
dao_node()
click to toggle source
# File lib/csv_step_importer/model/model.rb, line 57 def dao_node @dao_node ||= CSVStepImporter::Node.new parent: self end
daos()
click to toggle source
# File lib/csv_step_importer/model/model.rb, line 49 def daos dao_node.children end
filter_daos!()
click to toggle source
TODO a possible feature would be to add validation errors if the duplicates do not match in all columns (columns other than the composite key)
# File lib/csv_step_importer/model/model.rb, line 77 def filter_daos! unique_daos = {} daos.keep_if do |dao| hash = dao.values_for(composite_key_columns).hash keep = (unique_daos[hash] ||= dao) == dao # unlink to be deleted dao and add a link to dao.unlink! replace_with: unique_daos[hash] unless keep keep end end
link_rows_to_daos(daos:)
click to toggle source
# File lib/csv_step_importer/model/model.rb, line 91 def link_rows_to_daos(daos:) daos.each(&:link!) end