提交 ad3f0eec 编写于 作者: A Aaron Patterson

adding AR::Fixtures::File class to wrap a fixture file

上级 1170ccea
......@@ -14,6 +14,7 @@
require 'active_support/core_ext/logger'
require 'active_support/ordered_hash'
require 'active_support/core_ext/module/deprecation'
require 'active_record/fixtures/file'
if defined? ActiveRecord
class FixtureClassNotFound < ActiveRecord::ActiveRecordError #:nodoc:
......
begin
require 'psych'
rescue LoadError
end
require 'erb'
require 'yaml'
module ActiveRecord
class Fixtures
class File
include Enumerable
##
# Open a fixture file named +file+. When called with a block, the block
# is called with the filehandle and the filehandle is automatically closed
# when the block finishes.
def self.open(file)
x = new file
block_given? ? yield(x) : x
end
def initialize(file)
@file = file
@rows = nil
end
def each(&block)
rows.each(&block)
end
private
def rows
return @rows if @rows
@rows = YAML.load(render(IO.read(@file))).to_a
end
def render(content)
ERB.new(content).result
end
end
end
end
require "cases/helper"
require 'tempfile'
module ActiveRecord
class Fixtures
class FileTest < ActiveRecord::TestCase
def test_open
fh = File.open(::File.join(FIXTURES_ROOT, "accounts.yml"))
assert_equal 6, fh.to_a.length
end
def test_open_with_block
called = false
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
called = true
assert_equal 6, fh.to_a.length
end
assert called, 'block called'
end
def test_names
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
assert_equal ["signals37",
"unknown",
"rails_core_account",
"last_account",
"rails_core_account_2",
"odegy_account"], fh.to_a.map(&:first)
end
end
def test_values
File.open(::File.join(FIXTURES_ROOT, "accounts.yml")) do |fh|
assert_equal [1,2,3,4,5,6], fh.to_a.map(&:last).map { |x| x['id'] }
end
end
def test_erb_processing
File.open(::File.join(FIXTURES_ROOT, "developers.yml")) do |fh|
devs = Array.new(8) { |i| "dev_#{i + 3}" }
assert_equal [], devs - fh.to_a.map(&:first)
end
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册