Module: ActiveRecord::TestFixtures::ClassMethods
- Defined in:
- activerecord/lib/active_record/fixtures.rb
Instance Method Summary collapse
- #fixtures(*fixture_set_names) ⇒ Object
- #require_fixture_classes(fixture_set_names = nil, config = ActiveRecord::Base) ⇒ 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
- #try_to_load_dependency(file_name) ⇒ Object
- #uses_transaction(*methods) ⇒ Object
- #uses_transaction?(method) ⇒ Boolean
Instance Method Details
#fixtures(*fixture_set_names) ⇒ Object
848 849 850 851 852 853 854 855 856 857 858 859 |
# File 'activerecord/lib/active_record/fixtures.rb', line 848 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 require_fixture_classes(fixture_set_names, self.config) setup_fixture_accessors(fixture_set_names) end |
#require_fixture_classes(fixture_set_names = nil, config = ActiveRecord::Base) ⇒ Object
872 873 874 875 876 877 878 879 880 881 882 883 |
# File 'activerecord/lib/active_record/fixtures.rb', line 872 def require_fixture_classes(fixture_set_names = nil, config = ActiveRecord::Base) if fixture_set_names fixture_set_names = fixture_set_names.map { |n| n.to_s } else fixture_set_names = fixture_table_names end fixture_set_names.each do |file_name| file_name = file_name.singularize if config.pluralize_table_names try_to_load_dependency(file_name) end 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.
844 845 846 |
# File 'activerecord/lib/active_record/fixtures.rb', line 844 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
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 910 911 912 913 914 |
# File 'activerecord/lib/active_record/fixtures.rb', line 885 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 |
#try_to_load_dependency(file_name) ⇒ Object
861 862 863 864 865 866 867 868 869 870 |
# File 'activerecord/lib/active_record/fixtures.rb', line 861 def try_to_load_dependency(file_name) require_dependency file_name rescue LoadError => e # Let's hope the developer has included it # Let's warn in case this is a subdependency, otherwise # subdependency error messages are totally cryptic if ActiveRecord::Base.logger ActiveRecord::Base.logger.warn("Unable to load #{file_name}, underlying cause #{e.} \n\n #{e.backtrace.join("\n")}") end end |
#uses_transaction(*methods) ⇒ Object
916 917 918 919 |
# File 'activerecord/lib/active_record/fixtures.rb', line 916 def uses_transaction(*methods) @uses_transaction = [] unless defined?(@uses_transaction) @uses_transaction.concat methods.map { |m| m.to_s } end |
#uses_transaction?(method) ⇒ Boolean
921 922 923 924 |
# File 'activerecord/lib/active_record/fixtures.rb', line 921 def uses_transaction?(method) @uses_transaction = [] unless defined?(@uses_transaction) @uses_transaction.include?(method.to_s) end |