# frozen_string_literal: true module SolidusBolt module Generators class InstallGenerator < Rails::Generators::Base class_option :auto_run_migrations, type: :boolean, default: false source_root File.expand_path('templates', __dir__) def install_solidus_social if File.exist? 'config/initializers/solidus_social.rb' puts 'Skipping solidus_social:install' # rubocop:disable Rails/Output else say_status :install, 'solidus_social extension' solidus_social_install_command = 'bin/rails generate solidus_social:install' solidus_social_install_command += ' --auto-run-migrations' if options[:auto_run_migrations] run solidus_social_install_command end end def copy_initializer template 'initializer.rb', 'config/initializers/solidus_bolt.rb' end def add_javascripts append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_bolt\n" append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_bolt\n" end def add_stylesheets inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_bolt\n", before: %r{\*/}, verbose: true # rubocop:disable Layout/LineLength inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_bolt\n", before: %r{\*/}, verbose: true # rubocop:disable Layout/LineLength end def add_migrations run 'bin/rails railties:install:migrations FROM=solidus_bolt' end def add_bolt_omniauth_provider solidus_social_initializer_file = 'config/initializers/solidus_social.rb' return if File.readlines(solidus_social_initializer_file).grep(/bolt/).any? matcher = /amazon: {\n\s*api_key:\sENV\['AMAZON_API_KEY'\],\n\s*api_secret:\sENV\['AMAZON_API_SECRET'\],\n\s*}\n\s*}/m # rubocop:disable Layout/LineLength a = <<~BOLT_PROVIDER amazon: { api_key: ENV['AMAZON_API_KEY'], api_secret: ENV['AMAZON_API_SECRET'], } } begin config.providers[:bolt] = { api_key: SolidusBolt::BoltConfiguration.fetch.publishable_key, api_secret: SolidusBolt::BoltConfiguration.fetch.api_key, } rescue StandardError end BOLT_PROVIDER gsub_file solidus_social_initializer_file, matcher, a end def run_migrations run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]')) # rubocop:disable Layout/LineLength if run_migrations run 'bin/rails db:migrate' else puts 'Skipping bin/rails db:migrate, don\'t forget to run it!' # rubocop:disable Rails/Output end end def populate_seed_data say_status :loading, 'bolt seed data' rake('db:seed:solidus_bolt') end end end end