Skip to content

Commit

Permalink
Merge pull request #3538 from nebulab/kennyadsl/solidus-install
Browse files Browse the repository at this point in the history
Rename the installation generator to solidus:install
  • Loading branch information
kennyadsl authored Mar 5, 2020
2 parents 1533c02 + 854e51c commit b62fed3
Show file tree
Hide file tree
Showing 13 changed files with 223 additions and 207 deletions.
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'

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

0 comments on commit b62fed3

Please sign in to comment.