These are common rake tasks that I include in most of my Rails projects (under lib/tasks)
Author: Ryan McGeary : http://github.com/rmm5t
License: MIT : https://rmm5t.mit-license.org/
These are common rake tasks that I include in most of my Rails projects (under lib/tasks)
Author: Ryan McGeary : http://github.com/rmm5t
License: MIT : https://rmm5t.mit-license.org/
| task :coverage do | |
| sh "COVERAGE=true bundle exec rake" | |
| Rake::Task["coverage:open"].invoke | |
| end | |
| namespace :coverage do | |
| task :open do | |
| require "launchy" | |
| Dir["gems/*"].each(&method(:open_coverage)) | |
| Dir["engines/*"].each(&method(:open_coverage)) | |
| open_coverage(".") | |
| end | |
| def open_coverage(gem_dir) | |
| chdir gem_dir do | |
| Launchy.open("./coverage/index.html") | |
| end | |
| end | |
| end |
| namespace :db do | |
| desc "Kills open connections to the database" | |
| task kill_postgres_conections: :environment do | |
| exit_if_production | |
| db_name = ActiveRecord::Base.connection_config[:database] | |
| sh "ps xa | grep postgres: | grep #{db_name} | grep -v grep | awk '{print $1}' | xargs kill" | |
| end | |
| task drop: :kill_postgres_conections | |
| desc "Load the dummy data from db/dummies.rb" | |
| task dummy: [:sanity_check] do | |
| dummies = Rails.root.join("db", "dummies.rb") | |
| if File.exist?(dummies) | |
| puts "\nLoading #{dummies}" | |
| load(dummies) | |
| end | |
| end | |
| desc "Reset your database, then load seed data, then dummy data" | |
| task bounce: [:sanity_check, "migrate:reset", :seed, :dummy, "test:prepare"] | |
| task sanity_check: :environment do | |
| exit_if_production | |
| end | |
| def exit_if_production | |
| return if ENV["FORCE_BOUNCE"].present? | |
| return unless Rails.env.production? | |
| puts "You're not allowed to do this in production!" | |
| exit 1 | |
| end | |
| end |
| namespace :test do | |
| desc "Run tests for each gem in gems folder" | |
| task :gems do | |
| Dir["gems/*"].each(&method(:test_gems_run)) | |
| end | |
| desc "Run tests for each gem in engines folder" | |
| task :engines do | |
| Dir["engines/*"].each do |dir| | |
| test_gems_run(dir, database: true) | |
| end | |
| end | |
| def test_gems_print_starting(suite) | |
| puts \ | |
| ANSI::Code.magenta <<~MSG | |
| ---------------------------------------- | |
| Testing #{suite} ... | |
| ---------------------------------------- | |
| MSG | |
| end | |
| def test_gems_run(gem_dir, database: false) | |
| test_gems_print_starting(gem_dir) | |
| chdir gem_dir do | |
| Bundler.with_clean_env do | |
| sh "bundle check --path ../../vendor/bundle || bundle install --path ../../vendor/bundle" | |
| sh "bundle exec rake db:migrate:reset db:test:prepare" if database | |
| sh "bundle exec rake" | |
| end | |
| end | |
| end | |
| end | |
| task default: ["test:gems", "test:engines"] do | |
| test_gems_print_starting(Rails.application.class.parent_name) | |
| end |
| namespace :test do | |
| desc "Run tests for javascript assets" | |
| task :javascripts do | |
| # We can't just invoke the built-in teaspoon rake task here, because | |
| # teaspoon requires that it runs in the development environment so a | |
| # server can be booted, but the rest of the test suite runs in the test | |
| # environment. Instead, we exec a new process to keep teaspoon in its own | |
| # environment. | |
| sh "RAILS_ENV=development bundle exec teaspoon" | |
| end | |
| end | |
| task :default do | |
| Rake::Task["test:javascripts"].invoke unless ENV["SKIP_JAVASCRIPT"] | |
| end |
| begin | |
| require 'rubocop/rake_task' | |
| RuboCop::RakeTask.new | |
| rescue LoadError => e | |
| e | |
| end | |
| task :default do | |
| Rake::Task[:rubocop].invoke | |
| end |