mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
adding AR::Fixtures::File class to wrap a fixture file
This commit is contained in:
parent
1170cceaae
commit
ad3f0eec75
3 changed files with 90 additions and 0 deletions
|
@ -14,6 +14,7 @@ require 'active_support/core_ext/object/blank'
|
|||
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:
|
||||
|
|
43
activerecord/lib/active_record/fixtures/file.rb
Normal file
43
activerecord/lib/active_record/fixtures/file.rb
Normal file
|
@ -0,0 +1,43 @@
|
|||
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
|
46
activerecord/test/cases/fixtures/file_test.rb
Normal file
46
activerecord/test/cases/fixtures/file_test.rb
Normal file
|
@ -0,0 +1,46 @@
|
|||
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
|
Loading…
Reference in a new issue