Die Niveaukurve ist, obwohl es eigentlich zu erwarten gewesen wäre, noch einmal ganz erheblich gestiegen. Ich musste mich echt unwahrscheinlich lange mit dem method_missing Teil herumschlagen. Aber ich habe es nun doch geschafft und obwohl es hier und da noch ein wenig hakt, fängt die Sprache mir langsam an zu gefallen.

#!/usr/bin/ruby
# Autor: Jan Seeger
# Mail: jan@alphadev.net
# Web: jan.alphadev.net
#
# act_as_csv.rb
# Task of 3rd Day, Seven Languages in Seven Weeks

module ActsAsCsv
  def self.included(base)
    base.extend ClassMethods
  end

  module ClassMethods
    def acts_as_csv
      include InstanceMethods
    end
  end

  module InstanceMethods
    def read
      @csv_contents = []
      file = File.new(self.class.to_s.downcase + '.txt')
      @headers = file.gets.chomp.split(',')

      file.each do |row|
        @csv_contents << row.chomp.split(',')
      end
    end

    def headers
      @headers
    end

    def csv_contents
      @result
    end

    attr_accessor :headers, :csv_contents

    def each &block
      @csv_contents.each do |row|
        block.call CsvRow.new(@headers, row)
      end
    end

    def initialize
      read
    end
  end
end

class RubyCsv
  include ActsAsCsv
  acts_as_csv
end

class CsvRow
  def method_missing name
    @rowdata[@header.find_index(name.to_s)]
  end

  def initialize(header,rowdata)
    @header = header;
    @rowdata = rowdata;
  end
end

csv = RubyCsv.new
csv.each {|row| puts row.one }