require 'bundler/gem_tasks' require 'rspec/core/rake_task' require 'rubocop/rake_task' require 'appraisal' RSpec::Core::RakeTask.new RuboCop::RakeTask.new task :default => [:spec] namespace :db do desc 'Build the databases for tests' task :build_databases do pg_spec = { :adapter => 'postgresql', :host => 'localhost', :username => (ENV['POSTGRES_USER'] || 'postgres'), :encoding => 'utf8', } mysql_spec = { :adapter => 'mysql2', :host => 'localhost', :username => (ENV['MYSQL_USER'] || 'root'), :encoding => 'utf8', } ` rm -f /tmp/database.sqlite3 ` require 'active_record' # Connects to PostgreSQL ActiveRecord::Base.establish_connection(pg_spec.merge('database' => 'postgres', 'schema_search_path' => 'public')) (1..2).map do |i| # drop the old database (if it exists) ActiveRecord::Base.connection.drop_database("octopus_shard_#{i}") # create new database ActiveRecord::Base.connection.create_database("octopus_shard_#{i}") end # Connect to MYSQL ActiveRecord::Base.establish_connection(mysql_spec) (1..5).map do |i| # drop the old database (if it exists) ActiveRecord::Base.connection.drop_database("octopus_shard_#{i}") # create new database ActiveRecord::Base.connection.create_database("octopus_shard_#{i}") end end desc 'Create tables on tests databases' task :create_tables do require 'octopus' # Set the octopus variable directory to spec dir, in order to load the config/shards.yml file. Octopus.instance_variable_set(:@directory, "#{File.dirname(__FILE__)}/spec/") # Require the database connection require "#{File.dirname(__FILE__)}/spec/support/database_connection" shard_symbols = [:master, :brazil, :canada, :russia, :alone_shard, :postgresql_shard, :sqlite_shard] shard_symbols << :protocol_shard shard_symbols.each do |shard_symbol| # Rails 3.1 needs to do some introspection around the base class, which requires # the model be a descendent of ActiveRecord::Base. class BlankModel < ActiveRecord::Base; end BlankModel.using(shard_symbol).connection.initialize_schema_migrations_table BlankModel.using(shard_symbol).connection.create_table(:users) do |u| u.string :name u.integer :number u.boolean :admin u.datetime :created_at u.datetime :updated_at end BlankModel.using(shard_symbol).connection.create_table(:clients) do |u| u.string :country u.string :name end BlankModel.using(shard_symbol).connection.create_table(:cats) do |u| u.string :name end BlankModel.using(shard_symbol).connection.create_table(:items) do |u| u.string :name u.integer :client_id end BlankModel.using(shard_symbol).connection.create_table(:computers) do |u| u.string :name end BlankModel.using(shard_symbol).connection.create_table(:keyboards) do |u| u.string :name u.integer :computer_id end BlankModel.using(shard_symbol).connection.create_table(:roles) do |u| u.string :name end BlankModel.using(shard_symbol).connection.create_table(:permissions) do |u| u.string :name end BlankModel.using(shard_symbol).connection.create_table(:permissions_roles, :id => false) do |u| u.integer :role_id u.integer :permission_id end BlankModel.using(shard_symbol).connection.create_table(:assignments) do |u| u.integer :programmer_id u.integer :project_id end BlankModel.using(shard_symbol).connection.create_table(:programmers) do |u| u.string :name end BlankModel.using(shard_symbol).connection.create_table(:projects) do |u| u.string :name end BlankModel.using(shard_symbol).connection.create_table(:comments) do |u| u.string :name u.string :commentable_type u.integer :commentable_id end BlankModel.using(shard_symbol).connection.create_table(:parts) do |u| u.string :name u.integer :item_id end BlankModel.using(shard_symbol).connection.create_table(:yummy) do |u| u.string :name end BlankModel.using(shard_symbol).connection.create_table(:adverts) do |u| u.string :name end if shard_symbol == :alone_shard BlankModel.using(shard_symbol).connection.create_table(:mmorpg_players) do |u| u.string :player_name end BlankModel.using(shard_symbol).connection.create_table(:weapons) do |u| u.integer :mmorpg_player_id u.string :name u.string :hand end BlankModel.using(shard_symbol).connection.create_table(:skills) do |u| u.integer :mmorpg_player_id u.integer :weapon_id u.string :name end end end end desc 'Prepare the test databases' task :prepare => [:build_databases, :create_tables] end