Module: ActiveRecord::TestFixtures::ClassMethods
- Defined in:
- lib/active_record/fixtures.rb
Instance Method Summary collapse
- #fixtures(*fixture_names) ⇒ Object
- #require_fixture_classes(fixture_names = nil) ⇒ Object
- #set_fixture_class(class_names = {}) ⇒ Object
- #setup_fixture_accessors(fixture_names = nil) ⇒ Object
- #try_to_load_dependency(file_name) ⇒ Object
- #uses_transaction(*methods) ⇒ Object
- #uses_transaction?(method) ⇒ Boolean
Instance Method Details
#fixtures(*fixture_names) ⇒ Object
753 754 755 756 757 758 759 760 761 762 763 764 |
# File 'lib/active_record/fixtures.rb', line 753 def fixtures(*fixture_names) if fixture_names.first == :all fixture_names = Dir["#{fixture_path}/**/*.{yml}"] fixture_names.map! { |f| f[(fixture_path.size + 1)..-5] } else fixture_names = fixture_names.flatten.map { |n| n.to_s } end self.fixture_table_names |= fixture_names require_fixture_classes(fixture_names) setup_fixture_accessors(fixture_names) end |
#require_fixture_classes(fixture_names = nil) ⇒ Object
778 779 780 781 782 783 784 |
# File 'lib/active_record/fixtures.rb', line 778 def require_fixture_classes(fixture_names = nil) (fixture_names || fixture_table_names).each do |fixture_name| file_name = fixture_name.to_s file_name = file_name.singularize if ActiveRecord::Base.pluralize_table_names try_to_load_dependency(file_name) end end |
#set_fixture_class(class_names = {}) ⇒ Object
749 750 751 |
# File 'lib/active_record/fixtures.rb', line 749 def set_fixture_class(class_names = {}) self.fixture_class_names = self.fixture_class_names.merge(class_names) end |
#setup_fixture_accessors(fixture_names = nil) ⇒ Object
786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 |
# File 'lib/active_record/fixtures.rb', line 786 def setup_fixture_accessors(fixture_names = nil) fixture_names = Array.wrap(fixture_names || fixture_table_names) methods = Module.new do fixture_names.each do |fixture_name| fixture_name = fixture_name.to_s.tr('./', '_') define_method(fixture_name) do |*fixtures| force_reload = fixtures.pop if fixtures.last == true || fixtures.last == :reload @fixture_cache[fixture_name] ||= {} instances = fixtures.map do |fixture| @fixture_cache[fixture_name].delete(fixture) if force_reload if @loaded_fixtures[fixture_name][fixture.to_s] ActiveRecord::IdentityMap.without do @fixture_cache[fixture_name][fixture] ||= @loaded_fixtures[fixture_name][fixture.to_s].find end else raise StandardError, "No fixture with name '#{fixture}' found for table '#{fixture_name}'" end end instances.size == 1 ? instances.first : instances end private fixture_name end end include methods end |
#try_to_load_dependency(file_name) ⇒ Object
766 767 768 769 770 771 772 773 774 775 776 |
# File 'lib/active_record/fixtures.rb', line 766 def try_to_load_dependency(file_name) require_dependency file_name rescue LoadError => e # Let's hope the developer has included it himself # 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
817 818 819 820 |
# File 'lib/active_record/fixtures.rb', line 817 def uses_transaction(*methods) @uses_transaction = [] unless defined?(@uses_transaction) @uses_transaction.concat methods.map { |m| m.to_s } end |
#uses_transaction?(method) ⇒ Boolean
822 823 824 825 |
# File 'lib/active_record/fixtures.rb', line 822 def uses_transaction?(method) @uses_transaction = [] unless defined?(@uses_transaction) @uses_transaction.include?(method.to_s) end |