提交 8ec085bf 编写于 作者: A Andrew White 提交者: José Valim

Support fixtures for namespaced models [#2965 state:resolved]

Signed-off-by: NJosé Valim <jose.valim@gmail.com>
上级 77c099c2
......@@ -493,6 +493,7 @@ def self.instantiate_all_loaded_fixtures(object, load_instances = true)
def self.create_fixtures(fixtures_directory, table_names, class_names = {})
table_names = [table_names].flatten.map { |n| n.to_s }
table_names.each { |n| class_names[n.tr('/', '_').to_sym] = n.classify if n.include?('/') }
connection = block_given? ? yield : ActiveRecord::Base.connection
table_names_to_fetch = table_names.reject { |table_name| fixture_is_cached?(connection, table_name) }
......@@ -503,7 +504,7 @@ def self.create_fixtures(fixtures_directory, table_names, class_names = {})
fixtures_map = {}
fixtures = table_names_to_fetch.map do |table_name|
fixtures_map[table_name] = Fixtures.new(connection, File.split(table_name.to_s).last, class_names[table_name.to_sym], File.join(fixtures_directory, table_name.to_s))
fixtures_map[table_name] = Fixtures.new(connection, table_name.tr('/', '_'), class_names[table_name.tr('/', '_').to_sym], File.join(fixtures_directory, table_name))
end
all_loaded_fixtures.update(fixtures_map)
......@@ -837,8 +838,8 @@ def set_fixture_class(class_names = {})
def fixtures(*table_names)
if table_names.first == :all
table_names = Dir["#{fixture_path}/*.yml"] + Dir["#{fixture_path}/*.csv"]
table_names.map! { |f| File.basename(f).split('.')[0..-2].join('.') }
table_names = Dir["#{fixture_path}/**/*.{yml,csv}"]
table_names.map! { |f| f[(fixture_path.size + 1)..-5] }
else
table_names = table_names.flatten.map { |n| n.to_s }
end
......@@ -871,7 +872,7 @@ def require_fixture_classes(table_names = nil)
def setup_fixture_accessors(table_names = nil)
table_names = Array.wrap(table_names || fixture_table_names)
table_names.each do |table_name|
table_name = table_name.to_s.tr('.', '_')
table_name = table_name.to_s.tr('./', '_')
define_method(table_name) do |*fixtures|
force_reload = fixtures.pop if fixtures.last == true || fixtures.last == :reload
......
......@@ -258,8 +258,8 @@ namespace :db do
base_dir = ENV['FIXTURES_PATH'] ? File.join(Rails.root, ENV['FIXTURES_PATH']) : File.join(Rails.root, 'test', 'fixtures')
fixtures_dir = ENV['FIXTURES_DIR'] ? File.join(base_dir, ENV['FIXTURES_DIR']) : base_dir
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir.glob(File.join(fixtures_dir, '*.{yml,csv}'))).each do |fixture_file|
Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir["#{fixtures_dir}/**/*.{yml,csv}"]).each do |fixture_file|
Fixtures.create_fixtures(fixtures_dir, fixture_file[(fixtures_dir.size + 1)..-5])
end
end
......
......@@ -16,6 +16,9 @@
require 'models/matey'
require 'models/ship'
require 'models/book'
require 'models/admin'
require 'models/admin/account'
require 'models/admin/user'
class FixturesTest < ActiveRecord::TestCase
self.use_instantiated_fixtures = true
......@@ -507,7 +510,7 @@ def test_cache
end
class FoxyFixturesTest < ActiveRecord::TestCase
fixtures :parrots, :parrots_pirates, :pirates, :treasures, :mateys, :ships, :computers, :developers
fixtures :parrots, :parrots_pirates, :pirates, :treasures, :mateys, :ships, :computers, :developers, :"admin/accounts", :"admin/users"
def test_identifies_strings
assert_equal(Fixtures.identify("foo"), Fixtures.identify("foo"))
......@@ -629,6 +632,11 @@ def test_supports_sti
assert_kind_of DeadParrot, parrots(:polly)
assert_equal pirates(:blackbeard), parrots(:polly).killer
end
def test_namespaced_models
assert admin_accounts(:signals37).users.include?(admin_users(:david))
assert_equal 2, admin_accounts(:signals37).users.size
end
end
class ActiveSupportSubclassWithFixturesTest < ActiveRecord::TestCase
......
david:
name: David
account: signals37
jamis:
name: Jamis
account: signals37
module Admin
def self.table_name_prefix
'admin_'
end
end
\ No newline at end of file
class Admin::Account < ActiveRecord::Base
has_many :users
end
\ No newline at end of file
class Admin::User < ActiveRecord::Base
belongs_to :account
end
\ No newline at end of file
......@@ -26,6 +26,15 @@ def create_table(*args, &block)
t.integer :credit_limit
end
create_table :admin_accounts, :force => true do |t|
t.string :name
end
create_table :admin_users, :force => true do |t|
t.string :name
t.references :account
end
create_table :audit_logs, :force => true do |t|
t.column :message, :string, :null=>false
t.column :developer_id, :integer, :null=>false
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册