module DumbDelimited

Constants

VERSION

Public Class Methods

[](*columns) click to toggle source

Returns a model class for delimited data consisting of the specified columns. The returned class inherits from Ruby's {docs.ruby-lang.org/en/trunk/Struct.html Struct}, allowing data manipulation via accessor methods, via indexing by column name, and via indexing by column number. See {ClassMethods} and {InstanceMethods} for the additional methods the returned class provides.

@example

class Product < DumbDelimited[:sku, :name, :base_price, :sale_price]
  def on_sale?
    sale_price.to_f < base_price.to_f
  end
end

@example

Customer = DumbDelimited[:name, :email, :address]

@param columns [Array<Symbol>] @return [Class<Struct>]

# File lib/dumb_delimited.rb, line 27
def self.[](*columns)
  Struct.new(*columns) do
    extend DumbDelimited::ClassMethods
    include DumbDelimited::InstanceMethods
  end
end
csv(*columns) click to toggle source

Convenience shortcut to create a model class and set {ClassMethods#delimiter} to +“,”+.

Note: This method exists mostly for parity with {psv} and {tsv}. Unless CSV::DEFAULT_OPTIONS has been modified, the delimiter will already default to +“,”+.

@example

# This...
Point = DumbDelimited.csv(:x, :y, :z)

# ...is equivalent to:
Point = DumbDelimited[:x, :y, :z]
Point.delimiter = ","

@param columns [Array<Symbol>] @return [Class<Struct>]

# File lib/dumb_delimited.rb, line 51
def self.csv(*columns)
  klass = self[*columns]
  klass.delimiter = ","
  klass
end
psv(*columns) click to toggle source

Convenience shortcut to create a model class and set {ClassMethods#delimiter} to +“|”+.

@example

# This...
Point = DumbDelimited.psv(:x, :y, :z)

# ...is equivalent to:
Point = DumbDelimited[:x, :y, :z]
Point.delimiter = "|"

@param columns [Array<Symbol>] @return [Class<Struct>]

# File lib/dumb_delimited.rb, line 70
def self.psv(*columns)
  klass = self[*columns]
  klass.delimiter = "|"
  klass
end
tsv(*columns) click to toggle source

Convenience shortcut to create a model class and set {ClassMethods#delimiter} to "\t".

@example

# This...
Point = DumbDelimited.tsv(:x, :y, :z)

# ...is equivalent to:
Point = DumbDelimited[:x, :y, :z]
Point.delimiter = "\t"

@param columns [Array<Symbol>] @return [Class<Struct>]

# File lib/dumb_delimited.rb, line 89
def self.tsv(*columns)
  klass = self[*columns]
  klass.delimiter = "\t"
  klass
end