Module: DumbDelimited

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

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Constant Summary collapse

VERSION =
"2.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]


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 = ","


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 = "|"


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"


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

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