Module: DumbDelimited

Defined in:
lib/dumb_delimited.rb,
lib/dumb_delimited/version.rb

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Constant Summary collapse

VERSION =
"3.0.0"

Class Method Summary collapse

Class Method Details

.[](*columns) ⇒ Class<Struct>

Returns a model class for delimited data consisting of the specified columns. The returned class inherits from Ruby's +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.

Examples:

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

Parameters:

  • columns (Array<Symbol>)

Returns:

  • (Class<Struct>)


27
28
29
30
31
32
# File 'lib/dumb_delimited.rb', line 27

def self.[](*columns)
  Struct.new(*columns) do
    extend DumbDelimited::ClassMethods
    include DumbDelimited::InstanceMethods
  end
end

.csv(*columns) ⇒ Class<Struct>

Convenience shortcut to create a model class and set DumbDelimited::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 ",".

Examples:

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

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

Parameters:

  • columns (Array<Symbol>)

Returns:

  • (Class<Struct>)


51
52
53
54
55
# File 'lib/dumb_delimited.rb', line 51

def self.csv(*columns)
  klass = self[*columns]
  klass.delimiter = ","
  klass
end

.psv(*columns) ⇒ Class<Struct>

Convenience shortcut to create a model class and set DumbDelimited::ClassMethods#delimiter to "|".

Examples:

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

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

Parameters:

  • columns (Array<Symbol>)

Returns:

  • (Class<Struct>)


70
71
72
73
74
# File 'lib/dumb_delimited.rb', line 70

def self.psv(*columns)
  klass = self[*columns]
  klass.delimiter = "|"
  klass
end

.tsv(*columns) ⇒ Class<Struct>

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

Examples:

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

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

Parameters:

  • columns (Array<Symbol>)

Returns:

  • (Class<Struct>)


89
90
91
92
93
# File 'lib/dumb_delimited.rb', line 89

def self.tsv(*columns)
  klass = self[*columns]
  klass.delimiter = "\t"
  klass
end