Module: ActiveRecord::TestFixtures::ClassMethods
- Defined in:
- lib/active_record/fixtures.rb
Instance Method Summary collapse
- #fixtures(*fixture_set_names) ⇒ Object
-
#set_fixture_class(class_names = {}) ⇒ Object
Sets the model class for a fixture when the class name cannot be inferred from the fixture name.
- #setup_fixture_accessors(fixture_set_names = nil) ⇒ Object
- #uses_transaction(*methods) ⇒ Object
- #uses_transaction?(method) ⇒ Boolean
Instance Method Details
#fixtures(*fixture_set_names) ⇒ Object
868 869 870 871 872 873 874 875 876 877 878 |
# File 'lib/active_record/fixtures.rb', line 868 def fixtures(*fixture_set_names) if fixture_set_names.first == :all fixture_set_names = Dir["#{fixture_path}/{**,*}/*.{yml}"] fixture_set_names.map! { |f| f[(fixture_path.to_s.size + 1)..-5] } else fixture_set_names = fixture_set_names.flatten.map { |n| n.to_s } end self.fixture_table_names |= fixture_set_names setup_fixture_accessors(fixture_set_names) end |
#set_fixture_class(class_names = {}) ⇒ Object
Sets the model class for a fixture when the class name cannot be inferred from the fixture name.
Examples:
set_fixture_class some_fixture: SomeModel,
'namespaced/fixture' => Another::Model
The keys must be the fixture names, that coincide with the short paths to the fixture files.
864 865 866 |
# File 'lib/active_record/fixtures.rb', line 864 def set_fixture_class(class_names = {}) self.fixture_class_names = self.fixture_class_names.merge(class_names.stringify_keys) end |
#setup_fixture_accessors(fixture_set_names = nil) ⇒ Object
880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 |
# File 'lib/active_record/fixtures.rb', line 880 def setup_fixture_accessors(fixture_set_names = nil) fixture_set_names = Array(fixture_set_names || fixture_table_names) methods = Module.new do fixture_set_names.each do |fs_name| fs_name = fs_name.to_s accessor_name = fs_name.tr('/', '_').to_sym define_method(accessor_name) do |*fixture_names| force_reload = fixture_names.pop if fixture_names.last == true || fixture_names.last == :reload @fixture_cache[fs_name] ||= {} instances = fixture_names.map do |f_name| f_name = f_name.to_s @fixture_cache[fs_name].delete(f_name) if force_reload if @loaded_fixtures[fs_name][f_name] @fixture_cache[fs_name][f_name] ||= @loaded_fixtures[fs_name][f_name].find else raise StandardError, "No fixture named '#{f_name}' found for fixture set '#{fs_name}'" end end instances.size == 1 ? instances.first : instances end private accessor_name end end include methods end |
#uses_transaction(*methods) ⇒ Object
911 912 913 914 |
# File 'lib/active_record/fixtures.rb', line 911 def uses_transaction(*methods) @uses_transaction = [] unless defined?(@uses_transaction) @uses_transaction.concat methods.map { |m| m.to_s } end |
#uses_transaction?(method) ⇒ Boolean
916 917 918 919 |
# File 'lib/active_record/fixtures.rb', line 916 def uses_transaction?(method) @uses_transaction = [] unless defined?(@uses_transaction) @uses_transaction.include?(method.to_s) end |