module Railsless::ActiveRecord::Rake

Constants

TEMPLATES_PATH

Public Instance Methods

load_database_tasks!(config) click to toggle source
# File lib/railsless/active_record/rake.rb, line 20
def load_database_tasks!(config)
  extend ::Rake::DSL

  # ActiveRecord looks to db:load_config for its DatabaseTasks setup.
  # Load it up with our own configuration first.
  namespace :db do
    task :load_config do
      ::ActiveRecord::Tasks::DatabaseTasks.root = config.root
      ::ActiveRecord::Tasks::DatabaseTasks.env = config.env
      ::ActiveRecord::Tasks::DatabaseTasks.db_dir = config.db_path
      ::ActiveRecord::Tasks::DatabaseTasks.database_configuration = config.db_config
      ::ActiveRecord::Tasks::DatabaseTasks.migrations_paths = config.migrations_path
      ::ActiveRecord::Tasks::DatabaseTasks.seed_loader = SeedLoader.new(config.seeds_path)
      ::ActiveRecord::Tasks::DatabaseTasks.fixtures_path = nil # TODO
    end
  end

  # Stub out the :environment task that DatabaseTasks depends on.
  # Ideally, the app using this library loads the app from within an
  # :environment task (as per the README), but provide this as a fallback.
  unless ::Rake::Task.task_defined? :environment
    task :environment
  end

  load 'active_record/railties/databases.rake'
end
load_generator_tasks!(config) click to toggle source

Creates database.yml files and migrations.

# File lib/railsless/active_record/rake.rb, line 48
def load_generator_tasks!(config)
  extend ::Rake::DSL
  namespace :db do
    namespace :generate do

      desc "Generate and write a config/database.yml"
      task :config do
        db_config_path = config.db_config_path
        if File.exists?(db_config_path)
          puts "Database config already exists at #{db_config_path}; skipping..."
        else
          FileUtils.mkdir_p(config.config_path)
          FileUtils.cp(File.join(TEMPLATES_PATH, 'database.yml'), db_config_path)
        end
      end

      desc "Generate a database migration, eg: rake db:generate:migration NAME=CreatePosts"
      task :migration do
        migrations_path = config.migrations_path
        timestamp = Time.now.strftime("%Y%m%d%H%M%S")
        name = ENV.fetch('NAME') do
          fail "Usage: rake db:generate:migration NAME=CreatePosts"
        end

        # Normalise the name to a MigrationClass and a migration_filename
        migration_class    = ActiveSupport::Inflector.camelize(name)
        migration_filename = "#{timestamp}_#{ActiveSupport::Inflector.underscore(name)}.rb"
        migration_path     = File.join(migrations_path, migration_filename)

        template = File.read(File.join(TEMPLATES_PATH, 'migration.erb'))
        FileUtils.mkdir_p(migrations_path)
        File.write(migration_path, ERB.new(template).result(binding))

        puts "Created migration: #{migration_path}"
      end
    end
  end
end
load_tasks!(config=nil) click to toggle source
# File lib/railsless/active_record/rake.rb, line 14
def load_tasks!(config=nil)
  config ||= Railsless::ActiveRecord::Config.new
  load_database_tasks!(config)
  load_generator_tasks!(config)
end