#!/usr/bin/env ruby module Csv class CsvRow def initialize keys, values @content = Hash[] keys.each do |k| @content[k] = values[keys.index(k)] end end def method_missing name, *args @content[name.to_s] end end def self.included(base) base.extend ClassMethods end module ClassMethods def acts_as_csv include InstanceMethods end end module InstanceMethods attr_accessor :headers, :csv_contents def initialize read end def read @csv_contents = [] filename = self.class.to_s.downcase + '.txt' file = File.new(filename) @headers = file.gets.chomp.split(',') file.each do |row| @csv_contents << row.chomp.split(',') end end def each @csv_contents.each {|line| yield CsvRow.new(@headers, line)} end end end class MyCsv include Csv acts_as_csv end csv = MyCsv.new csv.each {|row| puts row.one} puts csv.each {|row| puts row.two} puts csv.each {|row| puts row.three}