Created
April 5, 2011 02:11
-
-
Save willrjmarshall/902898 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def read_fixture_files | |
if File.file?(yaml_file_path) | |
read_yaml_fixture_files | |
elsif File.file?(csv_file_path) | |
read_csv_fixture_files | |
else | |
raise FixturesFileNotFound, "Could not find #{yaml_file_path} or #{csv_file_path}" | |
end | |
end | |
def read_yaml_fixture_files | |
yaml_string = (Dir["#{@fixture_path}/**/*.yml"].select { |f| | |
File.file?(f) | |
} + [yaml_file_path]).map { |file_path| IO.read(file_path) }.join | |
if yaml = parse_yaml_string(yaml_string) | |
# If the file is an ordered map, extract its children. | |
yaml_value = | |
if yaml.respond_to?(:type_id) && yaml.respond_to?(:value) | |
yaml.value | |
else | |
[yaml] | |
end | |
yaml_value.each do |fixture| | |
raise Fixture::FormatError, "Bad data for #{@class_name} fixture named #{fixture}" unless fixture.respond_to?(:each) | |
fixture.each do |name, data| | |
unless data | |
raise Fixture::FormatError, "Bad data for #{@class_name} fixture named #{name} (nil)" | |
end | |
self[name] = Fixture.new(data, model_class, @connection) | |
end | |
end | |
end | |
end | |
def read_csv_fixture_files | |
reader = CSV.parse(erb_render(IO.read(csv_file_path))) | |
header = reader.shift | |
i = 0 | |
reader.each do |row| | |
data = {} | |
row.each_with_index { |cell, j| data[header[j].to_s.strip] = cell.to_s.strip } | |
self["#{@class_name.to_s.underscore}_#{i+=1}"] = Fixture.new(data, model_class, @connection) | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment