Sha256: 02c5a0e37f8757c672e170a7778fa707ea4d32033ea9b0daeaa553da29b92dd7

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

# frozen_string_literal: true

# CSV Decision: CSV based Ruby decision tables.
# Created December 2017 by Brett Vickers
# See LICENSE and README.md for details.
module CSVDecision
  # Dictionary of all this table's columns - inputs, outputs etc.
  class Columns
    # Value object used for column dictionary entries
    Entry = Struct.new(:name, :text_only)

    # Value object used for any columns with defaults
    Default = Struct.new(:name, :function, :default_if)

    # Dictionary of all data columns.
    # # Note that the key of each hash is the header cell's array column index.
    # Note that input and output columns can be interspersed and need not have unique names.
    class Dictionary
      # Input columns
      attr_accessor :ins

      # Output columns
      attr_accessor :outs

      # Input hash path - optional (planned feature)
      attr_accessor :path

      # Input columns with a default value (planned feature)
      attr_accessor :defaults

      def initialize
        @ins = {}
        @outs = {}
        @path = {}
        @defaults = {}
      end
    end

    # Dictionary of all data columns
    attr_reader :dictionary

    # Input columns
    def ins
      @dictionary.ins
    end

    # Output columns
    def outs
      @dictionary.outs
    end

    # Input columns with defaults specified (planned feature)
    # def defaults
    #   @dictionary.defaults
    # end

    # Input hash path (planned feature)
    # def path
    #   @dictionary.path
    # end

    def initialize(table)
      # If a column does not have a valid header cell, then it's empty of data.
      # Return the stripped header row, and remove it from the data array.
      row = Header.strip_empty_columns(rows: table.rows)

      # Build a dictionary of all valid data columns from the header row.
      @dictionary = Header.dictionary(row: row) if row

      freeze
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
csv_decision-0.0.3 lib/csv_decision/columns.rb