def self.load(io_or_str, options = Hash.new)
csv = FasterCSV.new(io_or_str, options)
meta = Hash[*csv.shift]
cls = meta["class"].split("::").inject(Object) do |c, const|
c.const_get(const)
end
headers = csv.shift
results = csv.inject(Array.new) do |all, row|
begin
obj = cls.csv_load(meta, headers, row)
rescue NoMethodError
obj = cls.allocate
headers.zip(row) do |name, value|
if name[0] == ?@
obj.instance_variable_set(name, value)
else
obj.send(name, value)
end
end
end
all << obj
end
csv.close unless io_or_str.is_a? String
results
end