Sha256: 879c72277d00e43e3d9a88a6e77c50a6796461b90bce5d47d032b4fe58e57b75
Contents?: true
Size: 1.45 KB
Versions: 3
Compression:
Stored size: 1.45 KB
Contents
module ActiveRecordCSVImporter # The CSV Header class Header include Virtus.model attribute :column_definitions, Array[ColumnDefinition] attribute :column_names, Array[String] def columns column_names.map do |column_name| Column.new( name: column_name, definition: find_column_definition(column_name) ) end end # original csv column names def columns_with_definition_names columns.select(&:definition).map(&:name) end # mapped column names def column_definition_names column_definitions.map(&:name).map(&:to_s) end def column_name_for_model_attribute(attribute) column = columns.find { |c| c.definition.attribute == attribute if c.definition } column.name if column end def valid? missing_required_columns.empty? end # Returns Array[String] def required_columns column_definitions.select(&:required?).map(&:name) end # Returns Array[String] def missing_required_columns (column_definitions.select(&:required?) - columns.map(&:definition)) .map(&:name).map(&:to_s) end # Returns Array[String] def missing_columns (column_definitions - columns.map(&:definition)).map(&:name).map(&:to_s) end private def find_column_definition(name) column_definitions.find { |column_definition| column_definition.match?(name) } end end end
Version data entries
3 entries across 3 versions & 1 rubygems