Seven Languages in Seven Weeks: Ruby - Tag 3
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 }