Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rename the installation generator to solidus:install #3538

Merged
merged 2 commits into from
Mar 5, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ After installing gems, you'll have to run the generators to create necessary
configuration files and migrations.

```bash
bundle exec rails g spree:install
bundle exec rails g solidus:install
bundle exec rails g solidus:auth:install
bundle exec rake railties:install:migrations
```
Expand Down Expand Up @@ -156,11 +156,11 @@ gem 'solidus', github: 'solidusio/solidus'
**Note: The master branch is not guaranteed to ever be in a fully functioning
state. It is too risky to use this branch in production.**

By default, the installation generator (`rails g spree:install`) will run
By default, the installation generator (`rails g solidus:install`) will run
migrations as well as adding seed and sample data. This can be disabled using

```bash
rails g spree:install --migrate=false --sample=false --seed=false
rails g solidus:install --migrate=false --sample=false --seed=false
```

You can always perform any of these steps later by using these commands.
Expand Down
2 changes: 1 addition & 1 deletion bin/rails-application-template
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ RUBY

after_bundle do
generate(
"spree:install",
"solidus:install",
"--auto-accept",
"--user_class=Spree::User",
"--enforce_available_locales=true",
Expand Down
2 changes: 1 addition & 1 deletion bin/sandbox
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ RUBY

unbundled bundle install --gemfile Gemfile
unbundled bin/rails db:drop db:create
unbundled bin/rails generate spree:install \
unbundled bin/rails generate solidus:install \
--auto-accept \
--user_class=Spree::User \
--enforce_available_locales=true \
Expand Down
198 changes: 198 additions & 0 deletions core/lib/generators/solidus/install/install_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
# frozen_string_literal: true

require 'rails/generators'
require 'bundler'
require 'bundler/cli'

module Solidus
# @private
class InstallGenerator < Rails::Generators::Base
CORE_MOUNT_ROUTE = "mount Spree::Core::Engine"

class_option :migrate, type: :boolean, default: true, banner: 'Run Solidus migrations'
class_option :seed, type: :boolean, default: true, banner: 'load seed data (migrations must be run)'
class_option :sample, type: :boolean, default: true, banner: 'load sample data (migrations must be run)'
class_option :auto_accept, type: :boolean
class_option :user_class, type: :string
class_option :admin_email, type: :string
class_option :admin_password, type: :string
class_option :lib_name, type: :string, default: 'spree'
class_option :enforce_available_locales, type: :boolean, default: nil

def self.source_paths
paths = superclass.source_paths
paths << File.expand_path('../templates', "../../#{__FILE__}")
paths << File.expand_path('../templates', "../#{__FILE__}")
paths << File.expand_path('templates', __dir__)
paths.flatten
end

def prepare_options
@run_migrations = options[:migrate]
@load_seed_data = options[:seed]
@load_sample_data = options[:sample]

unless @run_migrations
@load_seed_data = false
@load_sample_data = false
end
end

def add_files
template 'config/initializers/spree.rb.tt', 'config/initializers/spree.rb'
end

def additional_tweaks
return unless File.exist? 'public/robots.txt'
kennyadsl marked this conversation as resolved.
Show resolved Hide resolved

append_file "public/robots.txt", <<-ROBOTS.strip_heredoc
User-agent: *
Disallow: /checkout
Disallow: /cart
Disallow: /orders
Disallow: /user
Disallow: /account
Disallow: /api
Disallow: /password
ROBOTS
end

def setup_assets
@lib_name = 'spree'

empty_directory 'app/assets/images'

%w{javascripts stylesheets images}.each do |path|
empty_directory "vendor/assets/#{path}/spree/frontend" if defined? Spree::Frontend || Rails.env.test?
empty_directory "vendor/assets/#{path}/spree/backend" if defined? Spree::Backend || Rails.env.test?
end

if defined? Spree::Frontend || Rails.env.test?
template "vendor/assets/javascripts/spree/frontend/all.js"
template "vendor/assets/stylesheets/spree/frontend/all.css"
end

if defined? Spree::Backend || Rails.env.test?
template "vendor/assets/javascripts/spree/backend/all.js"
template "vendor/assets/stylesheets/spree/backend/all.css"
end
end

def create_overrides_directory
empty_directory "app/overrides"
end

def configure_application
application <<-RUBY
# Load application's model / class decorators
initializer 'spree.decorators' do |app|
config.to_prepare do
Dir.glob(Rails.root.join('app/**/*_decorator*.rb')) do |path|
require_dependency(path)
end
end
end

# Load application's view overrides
initializer 'spree.overrides' do |app|
config.to_prepare do
Dir.glob(Rails.root.join('app/overrides/*.rb')) do |path|
require_dependency(path)
end
end
end
RUBY

if !options[:enforce_available_locales].nil?
application <<-RUBY
# Prevent this deprecation message: https://github.com/svenfuchs/i18n/commit/3b6e56e
I18n.enforce_available_locales = #{options[:enforce_available_locales]}
RUBY
end
end

def include_seed_data
append_file "db/seeds.rb", <<-RUBY.strip_heredoc

Spree::Core::Engine.load_seed if defined?(Spree::Core)
Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
RUBY
end

def install_migrations
say_status :copying, "migrations"
`rake railties:install:migrations`
end

def create_database
say_status :creating, "database"
rake 'db:create'
end

def run_migrations
if @run_migrations
say_status :running, "migrations"

rake 'db:migrate VERBOSE=false'
else
say_status :skipping, "migrations (don't forget to run rake db:migrate)"
end
end

def populate_seed_data
if @load_seed_data
say_status :loading, "seed data"
rake_options = []
rake_options << "AUTO_ACCEPT=1" if options[:auto_accept]
rake_options << "ADMIN_EMAIL=#{options[:admin_email]}" if options[:admin_email]
rake_options << "ADMIN_PASSWORD=#{options[:admin_password]}" if options[:admin_password]

rake("db:seed #{rake_options.join(' ')}")
else
say_status :skipping, "seed data (you can always run rake db:seed)"
end
end

def load_sample_data
if @load_sample_data
say_status :loading, "sample data"
rake 'spree_sample:load'
else
say_status :skipping, "sample data (you can always run rake spree_sample:load)"
end
end

def install_routes
routes_file_path = File.join('config', 'routes.rb')
unless File.read(routes_file_path).include? CORE_MOUNT_ROUTE
insert_into_file routes_file_path, after: "Rails.application.routes.draw do\n" do
<<-RUBY
# This line mounts Solidus's routes at the root of your application.
# This means, any requests to URLs such as /products, will go to Spree::ProductsController.
# If you would like to change where this engine is mounted, simply change the :at option to something different.
#
# We ask that you don't use the :as option here, as Solidus relies on it being the default of "spree"
#{CORE_MOUNT_ROUTE}, at: '/'

RUBY
end
end

unless options[:quiet]
puts "*" * 50
puts "We added the following line to your application's config/routes.rb file:"
puts " "
puts " #{CORE_MOUNT_ROUTE}, at: '/'"
end
end

def complete
unless options[:quiet]
puts "*" * 50
puts "Solidus has been installed successfully. You're all ready to go!"
puts " "
puts "Enjoy!"
end
end
end
end
Loading