setup_fixture_accessors(fixture_names = nil) public

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File activerecord/lib/active_record/fixtures.rb, line 832
      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
Register or log in to add new notes.