Sha256: 43636e2e0c962e8b49320485c45b18c36d7c9adae16bd50c9d93e2c856390929

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

module Radiant
  module FixtureLoadingExtension
    def self.included(base)
      class << base
        include ClassMethods
        alias_method_chain :create_fixtures, :multiple_paths
      end
    end
  end
  
  module ClassMethods
    def create_fixtures_with_multiple_paths(fixtures_directory, table_names, class_names = {})
      table_names = [table_names].flatten.map { |n| n.to_s }
      connection = block_given? ? yield : ActiveRecord::Base.connection
      ActiveRecord::Base.silence do
        fixtures_map = {}
        fixtures = table_names.map do |table_name|
          paths = fixtures_directory.dup
          begin
            directory = paths.pop
            fixtures_map[table_name] = Fixtures.new(connection, File.split(table_name.to_s).last, class_names[table_name.to_sym], File.join(directory, table_name))
          rescue e
            retry unless paths.empty?
            raise e
          end
        end               
        all_loaded_fixtures.merge! fixtures_map  
  
        connection.transaction(Thread.current['open_transactions'] == 0) do
          fixtures.reverse.each { |fixture| fixture.delete_existing_fixtures }
          fixtures.each { |fixture| fixture.insert_fixtures }
  
          # Cap primary key sequences to max(pk).
          if connection.respond_to?(:reset_pk_sequence!)
            table_names.each do |table_name|
              connection.reset_pk_sequence!(table_name)
            end
          end
        end
  
        return fixtures.size > 1 ? fixtures : fixtures.first
      end
    end  
  end
  
end

require 'active_record/fixtures'
Fixtures.class_eval { include Radiant::FixtureLoadingExtension }

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
radiant-0.6.0 lib/plugins/extension_patches/lib/fixture_loading_extension.rb