solidus_auth_devise 2.2.0 → 2.5.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_auth_devise might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gem_release.yml +3 -8
- data/.github/stale.yml +17 -0
- data/.gitignore +12 -8
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +350 -163
- data/Gemfile +20 -22
- data/{LICENSE.md → LICENSE} +2 -2
- data/README.md +4 -28
- data/Rakefile +2 -0
- data/app/mailers/spree/user_mailer.rb +4 -2
- data/app/models/spree/user.rb +21 -19
- data/app/overrides/spree/admin/users/edit/_add_reset_password_form.html.erb.deface +20 -0
- data/bin/console +17 -0
- data/bin/rails +12 -4
- data/bin/setup +8 -0
- data/config/initializers/devise.rb +11 -3
- data/config/initializers/warden.rb +4 -2
- data/config/locales/en.yml +3 -1
- data/config/locales/it.yml +4 -4
- data/config/routes.rb +5 -11
- data/db/default/users.rb +10 -8
- data/db/migrate/20101026184949_create_users.rb +9 -7
- data/db/migrate/20101026184950_rename_columns_for_devise.rb +3 -0
- data/db/migrate/20101214150824_convert_user_remember_field.rb +2 -0
- data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +2 -0
- data/db/migrate/20120605211305_make_users_email_index_unique.rb +4 -2
- data/db/migrate/20140904000425_add_deleted_at_to_users.rb +2 -0
- data/db/migrate/20141002154641_add_confirmable_to_users.rb +2 -0
- data/db/migrate/20190125170630_add_reset_password_token_index_to_spree_users.rb +4 -2
- data/db/migrate/20200417153503_add_unconfirmed_email_to_spree_users.rb +7 -0
- data/db/seeds.rb +2 -0
- data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +5 -3
- data/lib/controllers/backend/spree/admin/user_sessions_controller.rb +11 -8
- data/lib/controllers/frontend/spree/user_confirmations_controller.rb +2 -0
- data/lib/controllers/frontend/spree/user_passwords_controller.rb +4 -1
- data/lib/controllers/frontend/spree/user_registrations_controller.rb +4 -0
- data/lib/controllers/frontend/spree/user_sessions_controller.rb +2 -0
- data/lib/controllers/frontend/spree/users_controller.rb +17 -14
- data/lib/decorators/backend/controllers/spree/admin/base_controller_decorator.rb +20 -0
- data/lib/decorators/backend/controllers/spree/admin/orders/customer_details_controller_decorator.rb +22 -0
- data/lib/{controllers/frontend → decorators/frontend/controllers}/spree/checkout_controller_decorator.rb +29 -19
- data/lib/generators/solidus/auth/install/install_generator.rb +16 -4
- data/lib/generators/solidus/auth/install/templates/config/initializers/devise.rb +2 -0
- data/lib/solidus/auth.rb +2 -0
- data/lib/solidus_auth_devise.rb +12 -12
- data/lib/spree/auth/devise.rb +2 -7
- data/lib/spree/auth/engine.rb +51 -36
- data/lib/spree/auth/version.rb +1 -1
- data/{app/models → lib}/spree/auth_configuration.rb +2 -0
- data/lib/spree/authentication_helpers.rb +5 -11
- data/lib/tasks/auth.rake +3 -1
- data/lib/views/backend/spree/admin/shared/_navigation_footer.html.erb +3 -3
- data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +4 -4
- data/lib/views/backend/spree/admin/user_passwords/new.html.erb +5 -7
- data/lib/views/backend/spree/admin/user_sessions/authorization_failure.html.erb +1 -1
- data/lib/views/backend/spree/admin/user_sessions/new.html.erb +9 -9
- data/lib/views/backend/spree/layouts/admin/_login_nav.html.erb +4 -4
- data/lib/views/frontend/spree/checkout/registration.html.erb +4 -4
- data/lib/views/frontend/spree/shared/_login.html.erb +4 -4
- data/lib/views/frontend/spree/shared/_login_bar_items.html.erb +3 -3
- data/lib/views/frontend/spree/shared/_user_form.html.erb +3 -3
- data/lib/views/frontend/spree/user_passwords/edit.html.erb +4 -4
- data/lib/views/frontend/spree/user_passwords/new.html.erb +5 -7
- data/lib/views/frontend/spree/user_registrations/new.html.erb +3 -3
- data/lib/views/frontend/spree/user_sessions/authorization_failure.html.erb +1 -1
- data/lib/views/frontend/spree/user_sessions/new.html.erb +2 -2
- data/lib/views/frontend/spree/users/edit.html.erb +2 -2
- data/lib/views/frontend/spree/users/show.html.erb +13 -13
- data/solidus_auth_devise.gemspec +40 -35
- data/spec/controllers/spree/admin/base_controller_spec.rb +53 -0
- data/spec/controllers/spree/admin/user_passwords_controller_spec.rb +2 -0
- data/spec/controllers/spree/base_controller_spec.rb +53 -0
- data/spec/controllers/spree/checkout_controller_spec.rb +5 -9
- data/spec/controllers/spree/products_controller_spec.rb +5 -8
- data/spec/controllers/spree/user_passwords_controller_spec.rb +4 -3
- data/spec/controllers/spree/user_registrations_controller_spec.rb +3 -2
- data/spec/controllers/spree/user_sessions_controller_spec.rb +14 -0
- data/spec/controllers/spree/users_controller_spec.rb +2 -2
- data/spec/factories/confirmed_user.rb +5 -3
- data/spec/features/account_spec.rb +4 -3
- data/spec/features/admin/password_reset_spec.rb +66 -10
- data/spec/features/admin/products_spec.rb +2 -1
- data/spec/features/admin/sign_in_spec.rb +2 -1
- data/spec/features/admin/sign_out_spec.rb +2 -1
- data/spec/features/admin_permissions_spec.rb +2 -1
- data/spec/features/change_email_spec.rb +3 -2
- data/spec/features/checkout_spec.rb +14 -37
- data/spec/features/confirmation_spec.rb +4 -3
- data/spec/features/order_spec.rb +2 -1
- data/spec/features/password_reset_spec.rb +23 -10
- data/spec/features/sign_in_spec.rb +2 -1
- data/spec/features/sign_out_spec.rb +4 -3
- data/spec/features/sign_up_spec.rb +2 -1
- data/spec/mailers/user_mailer_spec.rb +2 -1
- data/spec/models/order_spec.rb +2 -1
- data/spec/models/user_spec.rb +15 -9
- data/spec/spec_helper.rb +13 -9
- data/spec/support/ability.rb +3 -1
- data/spec/support/authentication_helpers.rb +2 -0
- data/spec/support/confirm_helpers.rb +21 -10
- data/spec/support/email.rb +2 -0
- data/spec/support/features/fill_addresses_fields.rb +29 -0
- data/spec/support/preferences.rb +10 -2
- data/spec/support/spree.rb +2 -0
- metadata +305 -212
- data/.travis.yml +0 -18
- data/app/overrides/auth_admin_login_navigation_bar.rb +0 -10
- data/app/overrides/auth_shared_login_bar.rb +0 -10
- data/lib/assets/javascripts/spree/backend/solidus_auth.js +0 -1
- data/lib/assets/javascripts/spree/frontend/solidus_auth.js +0 -1
- data/lib/assets/stylesheets/spree/backend/solidus_auth.css +0 -3
- data/lib/assets/stylesheets/spree/frontend/solidus_auth.css +0 -3
- data/lib/controllers/backend/spree/admin/admin_controller_decorator.rb +0 -11
- data/lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb +0 -15
- data/spec/features/admin/orders_spec.rb +0 -30
@@ -1,17 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class CreateUsers < SolidusSupport::Migration[4.2]
|
2
4
|
def up
|
3
5
|
unless table_exists?("spree_users")
|
4
|
-
create_table "spree_users", :
|
5
|
-
t.string "crypted_password", :
|
6
|
-
t.string "salt", :
|
6
|
+
create_table "spree_users", force: true do |t|
|
7
|
+
t.string "crypted_password", limit: 128
|
8
|
+
t.string "salt", limit: 128
|
7
9
|
t.string "email"
|
8
10
|
t.string "remember_token"
|
9
11
|
t.string "remember_token_expires_at"
|
10
12
|
t.string "persistence_token"
|
11
13
|
t.string "single_access_token"
|
12
14
|
t.string "perishable_token"
|
13
|
-
t.integer "login_count", :
|
14
|
-
t.integer "failed_login_count", :
|
15
|
+
t.integer "login_count", default: 0, null: false
|
16
|
+
t.integer "failed_login_count", default: 0, null: false
|
15
17
|
t.datetime "last_request_at"
|
16
18
|
t.datetime "current_login_at"
|
17
19
|
t.datetime "last_login_at"
|
@@ -20,8 +22,8 @@ class CreateUsers < SolidusSupport::Migration[4.2]
|
|
20
22
|
t.string "login"
|
21
23
|
t.integer "ship_address_id"
|
22
24
|
t.integer "bill_address_id"
|
23
|
-
t.datetime "created_at", :
|
24
|
-
t.datetime "updated_at", :
|
25
|
+
t.datetime "created_at", null: false
|
26
|
+
t.datetime "updated_at", null: false
|
25
27
|
t.string "openid_identifier"
|
26
28
|
end
|
27
29
|
end
|
@@ -1,6 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class RenameColumnsForDevise < SolidusSupport::Migration[4.2]
|
2
4
|
def up
|
3
5
|
return if column_exists?(:spree_users, :password_salt)
|
6
|
+
|
4
7
|
rename_column :spree_users, :crypted_password, :encrypted_password
|
5
8
|
rename_column :spree_users, :salt, :password_salt
|
6
9
|
rename_column :spree_users, :remember_token_expires_at, :remember_created_at
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class MakeUsersEmailIndexUnique < SolidusSupport::Migration[4.2]
|
2
4
|
def up
|
3
|
-
add_index "spree_users", ["email"], :
|
5
|
+
add_index "spree_users", ["email"], name: "email_idx_unique", unique: true
|
4
6
|
end
|
5
7
|
|
6
8
|
def down
|
7
|
-
remove_index "spree_users", :
|
9
|
+
remove_index "spree_users", name: "email_idx_unique"
|
8
10
|
end
|
9
11
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class AddResetPasswordTokenIndexToSpreeUsers < SolidusSupport::Migration[4.2]
|
2
4
|
# We're not using the standard Rails index name because somebody could have
|
3
|
-
#
|
5
|
+
# already added that index to the table. By using a custom name we ensure
|
4
6
|
# that the index can effectively be added and removed via migrations/rollbacks
|
5
|
-
#
|
7
|
+
# without having any impact on such installations. The index name is Rails
|
6
8
|
# standard name + "_solidus_auth_devise"; the length is 61 chars which is
|
7
9
|
# still OK for Sqlite, mySQL and Postgres.
|
8
10
|
def custom_index_name
|
data/db/seeds.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Spree::Admin::UserPasswordsController < Devise::PasswordsController
|
2
4
|
helper 'spree/base'
|
3
5
|
|
@@ -20,9 +22,10 @@ class Spree::Admin::UserPasswordsController < Devise::PasswordsController
|
|
20
22
|
def create
|
21
23
|
self.resource = resource_class.send_reset_password_instructions(params[resource_name])
|
22
24
|
|
25
|
+
set_flash_message(:notice, :send_instructions) if is_navigational_format?
|
26
|
+
|
23
27
|
if resource.errors.empty?
|
24
|
-
|
25
|
-
respond_with resource, location: spree.admin_login_path
|
28
|
+
respond_with resource, location: admin_user_path(resource)
|
26
29
|
else
|
27
30
|
respond_with_navigational(resource) { render :new }
|
28
31
|
end
|
@@ -39,5 +42,4 @@ class Spree::Admin::UserPasswordsController < Devise::PasswordsController
|
|
39
42
|
super
|
40
43
|
end
|
41
44
|
end
|
42
|
-
|
43
45
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Spree::Admin::UserSessionsController < Devise::SessionsController
|
2
4
|
helper 'spree/base'
|
3
5
|
|
@@ -19,7 +21,7 @@ class Spree::Admin::UserSessionsController < Devise::SessionsController
|
|
19
21
|
}
|
20
22
|
format.js {
|
21
23
|
user = resource.record
|
22
|
-
render json: {ship_address: user.ship_address, bill_address: user.bill_address}.to_json
|
24
|
+
render json: { ship_address: user.ship_address, bill_address: user.bill_address }.to_json
|
23
25
|
}
|
24
26
|
end
|
25
27
|
else
|
@@ -32,12 +34,13 @@ class Spree::Admin::UserSessionsController < Devise::SessionsController
|
|
32
34
|
end
|
33
35
|
|
34
36
|
private
|
35
|
-
def accurate_title
|
36
|
-
I18n.t('spree.login')
|
37
|
-
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
def accurate_title
|
39
|
+
I18n.t('spree.login')
|
40
|
+
end
|
41
|
+
|
42
|
+
def redirect_back_or_default(default)
|
43
|
+
redirect_to(session["spree_user_return_to"] || default)
|
44
|
+
session["spree_user_return_to"] = nil
|
45
|
+
end
|
43
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Spree::UserPasswordsController < Devise::PasswordsController
|
2
4
|
helper 'spree/base', 'spree/store'
|
3
5
|
|
@@ -16,8 +18,9 @@ class Spree::UserPasswordsController < Devise::PasswordsController
|
|
16
18
|
def create
|
17
19
|
self.resource = resource_class.send_reset_password_instructions(params[resource_name])
|
18
20
|
|
21
|
+
set_flash_message(:notice, :send_instructions) if is_navigational_format?
|
22
|
+
|
19
23
|
if resource.errors.empty?
|
20
|
-
set_flash_message(:notice, :send_instructions) if is_navigational_format?
|
21
24
|
respond_with resource, location: spree.login_path
|
22
25
|
else
|
23
26
|
respond_with_navigational(resource) { render :new }
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Spree::UserRegistrationsController < Devise::RegistrationsController
|
2
4
|
helper 'spree/base', 'spree/store'
|
3
5
|
|
@@ -25,6 +27,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
|
|
25
27
|
end
|
26
28
|
|
27
29
|
protected
|
30
|
+
|
28
31
|
def translation_scope
|
29
32
|
'devise.user_registrations'
|
30
33
|
end
|
@@ -34,6 +37,7 @@ class Spree::UserRegistrationsController < Devise::RegistrationsController
|
|
34
37
|
end
|
35
38
|
|
36
39
|
private
|
40
|
+
|
37
41
|
def spree_user_params
|
38
42
|
params.require(:spree_user).permit(Spree::PermittedAttributes.user_attributes | [:email])
|
39
43
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Spree::UsersController < Spree::StoreController
|
2
4
|
skip_before_action :set_current_order, only: :show, raise: false
|
3
5
|
prepend_before_action :load_object, only: [:show, :edit, :update]
|
@@ -24,7 +26,7 @@ class Spree::UsersController < Spree::StoreController
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def update
|
27
|
-
if @user.
|
29
|
+
if @user.update(user_params)
|
28
30
|
spree_current_user.reload
|
29
31
|
|
30
32
|
if params[:user][:password].present?
|
@@ -40,20 +42,21 @@ class Spree::UsersController < Spree::StoreController
|
|
40
42
|
end
|
41
43
|
|
42
44
|
private
|
43
|
-
def user_params
|
44
|
-
params.require(:user).permit(Spree::PermittedAttributes.user_attributes | [:email])
|
45
|
-
end
|
46
45
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
46
|
+
def user_params
|
47
|
+
params.require(:user).permit(Spree::PermittedAttributes.user_attributes | [:email])
|
48
|
+
end
|
51
49
|
|
52
|
-
|
53
|
-
|
54
|
-
|
50
|
+
def load_object
|
51
|
+
@user ||= Spree::User.find_by(id: spree_current_user&.id)
|
52
|
+
authorize! params[:action].to_sym, @user
|
53
|
+
end
|
55
54
|
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
def authorize_actions
|
56
|
+
authorize! params[:action].to_sym, Spree::User.new
|
57
|
+
end
|
58
|
+
|
59
|
+
def accurate_title
|
60
|
+
I18n.t('spree.my_account')
|
61
|
+
end
|
59
62
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Admin
|
5
|
+
module BaseControllerDecorator
|
6
|
+
protected
|
7
|
+
|
8
|
+
def model_class
|
9
|
+
const_name = controller_name.classify
|
10
|
+
if Spree.const_defined?(const_name, false)
|
11
|
+
return "Spree::#{const_name}".constantize
|
12
|
+
end
|
13
|
+
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
::Spree::Admin::BaseController.prepend self
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/decorators/backend/controllers/spree/admin/orders/customer_details_controller_decorator.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree::Admin::Orders::CustomerDetailsControllerDecorator
|
4
|
+
def self.prepended(base)
|
5
|
+
base.before_action :check_authorization
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def check_authorization
|
11
|
+
load_order
|
12
|
+
session[:access_token] ||= params[:token]
|
13
|
+
|
14
|
+
resource = @order
|
15
|
+
action = params[:action].to_sym
|
16
|
+
action = :edit if action == :show # show route renders :edit for this controller
|
17
|
+
|
18
|
+
authorize! action, resource, session[:access_token]
|
19
|
+
end
|
20
|
+
|
21
|
+
Spree::Admin::Orders::CustomerDetailsController.prepend self
|
22
|
+
end
|
@@ -1,27 +1,32 @@
|
|
1
|
-
|
2
|
-
prepend_before_action :check_registration,
|
3
|
-
except: [:registration, :update_registration]
|
4
|
-
prepend_before_action :check_authorization
|
1
|
+
# frozen_string_literal: true
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
module Spree
|
4
|
+
module CheckoutControllerDecorator
|
5
|
+
def self.prepended(base)
|
6
|
+
base.before_action :check_registration, except: [:registration, :update_registration]
|
7
|
+
base.before_action :check_authorization
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
# This action builds some associations on the order, ex. addresses, which we
|
10
|
+
# don't to build or save here.
|
11
|
+
base.skip_before_action :setup_for_current_state, only: [:registration, :update_registration]
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
if params[:order][:email] =~ Devise.email_regexp && current_order.update_attributes(email: params[:order][:email])
|
16
|
-
redirect_to spree.checkout_path
|
17
|
-
else
|
18
|
-
flash[:registration_error] = t(:email_is_invalid, scope: [:errors, :messages])
|
14
|
+
def registration
|
19
15
|
@user = Spree::User.new
|
20
|
-
render 'registration'
|
21
16
|
end
|
22
|
-
end
|
23
17
|
|
24
|
-
|
18
|
+
def update_registration
|
19
|
+
if params[:order][:email] =~ Devise.email_regexp && current_order.update(email: params[:order][:email])
|
20
|
+
redirect_to spree.checkout_path
|
21
|
+
else
|
22
|
+
flash[:registration_error] = t(:email_is_invalid, scope: [:errors, :messages])
|
23
|
+
@user = Spree::User.new
|
24
|
+
render 'registration'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
25
30
|
def order_params
|
26
31
|
params.
|
27
32
|
fetch(:order, {}).
|
@@ -39,6 +44,7 @@ Spree::CheckoutController.class_eval do
|
|
39
44
|
# Introduces a registration step whenever the +registration_step+ preference is true.
|
40
45
|
def check_registration
|
41
46
|
return unless registration_required?
|
47
|
+
|
42
48
|
store_location
|
43
49
|
redirect_to spree.checkout_registration_path
|
44
50
|
end
|
@@ -53,7 +59,7 @@ Spree::CheckoutController.class_eval do
|
|
53
59
|
end
|
54
60
|
|
55
61
|
def guest_authenticated?
|
56
|
-
current_order
|
62
|
+
current_order&.email.present? &&
|
57
63
|
Spree::Config[:allow_guest_checkout]
|
58
64
|
end
|
59
65
|
|
@@ -61,6 +67,10 @@ Spree::CheckoutController.class_eval do
|
|
61
67
|
# are redirected to the tokenized order url unless authenticated as a registered user.
|
62
68
|
def completion_route
|
63
69
|
return spree.order_path(@order) if spree_current_user
|
70
|
+
|
64
71
|
spree.token_order_path(@order, @order.guest_token)
|
65
72
|
end
|
73
|
+
|
74
|
+
::Spree::CheckoutController.prepend self
|
75
|
+
end
|
66
76
|
end
|
@@ -1,10 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Solidus
|
2
4
|
module Auth
|
3
5
|
module Generators
|
4
6
|
class InstallGenerator < Rails::Generators::Base
|
7
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
8
|
+
class_option :skip_migrations, type: :boolean, default: false
|
9
|
+
|
5
10
|
def self.source_paths
|
6
|
-
paths =
|
7
|
-
paths << File.expand_path('
|
11
|
+
paths = superclass.source_paths
|
12
|
+
paths << File.expand_path('templates', __dir__)
|
8
13
|
paths.flatten
|
9
14
|
end
|
10
15
|
|
@@ -13,11 +18,18 @@ module Solidus
|
|
13
18
|
end
|
14
19
|
|
15
20
|
def add_migrations
|
16
|
-
run 'bundle exec rake railties:install:migrations FROM=
|
21
|
+
run 'bundle exec rake railties:install:migrations FROM=solidus_auth'
|
17
22
|
end
|
18
23
|
|
19
24
|
def run_migrations
|
20
|
-
|
25
|
+
return if options[:skip_migrations]
|
26
|
+
|
27
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
|
28
|
+
if run_migrations
|
29
|
+
run 'bundle exec rake db:migrate'
|
30
|
+
else
|
31
|
+
puts 'Skipping rake db:migrate, don\'t forget to run it!' # rubocop:disable Rails/Output
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
23
35
|
end
|