From c228227bc1cac766c15f89513063da5d554fb1d1 Mon Sep 17 00:00:00 2001 From: Lucas Mazza Date: Mon, 15 Feb 2016 10:16:43 -0200 Subject: [PATCH] Tweak no ORM check on `InstallGenerator`. * Expand the explanation of why it fail. * Raise a subclass of `Thor::Error` so the Thor doesn't output the exception backtrace as it isn't useful for developers facing this error. --- lib/generators/devise/install_generator.rb | 16 +++++++++++++++- test/generators/install_generator_test.rb | 13 ++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/generators/devise/install_generator.rb b/lib/generators/devise/install_generator.rb index 2717d2aa..6c6626b1 100644 --- a/lib/generators/devise/install_generator.rb +++ b/lib/generators/devise/install_generator.rb @@ -3,6 +3,8 @@ require 'securerandom' module Devise module Generators + MissingORMError = Class.new(Thor::Error) + class InstallGenerator < Rails::Generators::Base source_root File.expand_path("../../templates", __FILE__) @@ -10,7 +12,19 @@ module Devise class_option :orm def copy_initializer - raise "An ORM must be set to install Devise" unless options[:orm] + unless options[:orm] + raise MissingORMError, <<-ERROR.strip_heredoc + An ORM must be set to install Devise in your application. + + Be sure to have an ORM like Active Record or Mongoid loaded in your + app or configure your own at `config/application.rb`. + + config.generators do |g| + g.orm :your_orm_gem + end + ERROR + end + template "devise.rb", "config/initializers/devise.rb" end diff --git a/test/generators/install_generator_test.rb b/test/generators/install_generator_test.rb index 6a4657e1..daf386d9 100644 --- a/test/generators/install_generator_test.rb +++ b/test/generators/install_generator_test.rb @@ -5,17 +5,20 @@ class InstallGeneratorTest < Rails::Generators::TestCase destination File.expand_path("../../tmp", __FILE__) setup :prepare_destination - test "Assert all files are properly created" do - run_generator(['--orm=active_record']) + test "assert all files are properly created" do + run_generator(["--orm=active_record"]) assert_file "config/initializers/devise.rb", /devise\/orm\/active_record/ assert_file "config/locales/devise.en.yml" end - test "Fail if no ORM is specified" do - error = assert_raises RuntimeError do + test "fails if no ORM is specified" do + stderr = capture(:stderr) do run_generator end - assert_match /An ORM must be set to install Devise/, error.message + assert_match %r{An ORM must be set to install Devise}, stderr + + assert_no_file "config/initializers/devise.rb" + assert_no_file "config/locales/devise.en.yml" end end