Sha256: 958798ca23a222b81e4727e4e864baf0a0e02a62a8bd4bceb1064ad93d149b55

Contents?: true

Size: 1.41 KB

Versions: 14

Compression:

Stored size: 1.41 KB

Contents

module CSVImporter

  # 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

    def column_name_for_model_attribute(attribute)
      if column = columns.find { |column| column.definition.attribute == attribute if column.definition }
        column.name
      end
    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 extra_columns
      columns.reject(&:definition).map(&:name).map(&:to_s)
    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 do |column_definition|
        column_definition.match?(name)
      end
    end

    def column_definition_names
      column_definitions.map(&:name).map(&:to_s)
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
csv-importer-0.8.1 lib/csv_importer/header.rb
csv-importer-0.8.0 lib/csv_importer/header.rb
csv-importer-0.7.0 lib/csv_importer/header.rb
csv-importer-0.6.0 lib/csv_importer/header.rb
csv-importer-0.5.0 lib/csv_importer/header.rb
csv-importer-0.4.0 lib/csv_importer/header.rb
csv-importer-0.3.2 lib/csv_importer/header.rb
csv-importer-0.3.1 lib/csv_importer/header.rb
csv-importer-0.3.0 lib/csv_importer/header.rb
csv-importer-0.2.0 lib/csv_importer/header.rb
csv-importer-0.1.3 lib/csv_importer/header.rb
csv-importer-0.1.2 lib/csv_importer/header.rb
csv-importer-0.1.1 lib/csv_importer/header.rb
csv-importer-0.1.0 lib/csv_importer/header.rb