Class: Solidus::InstallGenerator

Inherits:
Rails::Generators::AppBase
  • Object
show all
Defined in:
lib/generators/solidus/install/install_generator.rb

Constant Summary collapse

CORE_MOUNT_ROUTE =
"mount Spree::Core::Engine"
FRONTENDS =
%w[
  none
  classic
  starter
]
LEGACY_FRONTENDS =
%w[
  solidus_starter_frontend
  solidus_frontend
]
AUTHENTICATIONS =
%w[
  devise
  existing
  custom
  none
]
PAYMENT_METHODS =
%w[
  paypal
  bolt
  none
]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.exit_on_failure?Boolean

Returns:

  • (Boolean)

60
61
62
# File 'lib/generators/solidus/install/install_generator.rb', line 60

def self.exit_on_failure?
  true
end

Instance Method Details

#add_filesObject


91
92
93
# File 'lib/generators/solidus/install/install_generator.rb', line 91

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

#completeObject


198
199
200
# File 'lib/generators/solidus/install/install_generator.rb', line 198

def complete
  say_status :complete, "Solidus has been installed successfully. Enjoy!"
end

#create_databaseObject


133
134
135
136
# File 'lib/generators/solidus/install/install_generator.rb', line 133

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

#create_overrides_directoryObject


118
119
120
# File 'lib/generators/solidus/install/install_generator.rb', line 118

def create_overrides_directory
  empty_directory "app/overrides"
end

#include_seed_dataObject


122
123
124
125
126
# File 'lib/generators/solidus/install/install_generator.rb', line 122

def include_seed_data
  append_file "db/seeds.rb", <<~RUBY
    Spree::Core::Engine.load_seed
  RUBY
end

#install_authenticationObject


163
164
165
# File 'lib/generators/solidus/install/install_generator.rb', line 163

def install_authentication
  apply_template_for :authentication, @selected_authentication
end

#install_file_attachmentObject


95
96
97
98
99
100
101
102
103
# File 'lib/generators/solidus/install/install_generator.rb', line 95

def install_file_attachment
  if options[:active_storage]
    say_status :assets, "Active Storage", :green
    rake 'active_storage:install'
  else
    say_status :assets, "Paperclip", :green
    gsub_file 'config/initializers/spree.rb', "ActiveStorageAttachment", "PaperclipAttachment"
  end
end

#install_frontendObject


167
168
169
# File 'lib/generators/solidus/install/install_generator.rb', line 167

def install_frontend
  apply_template_for :frontend, @selected_frontend
end

#install_migrationsObject


128
129
130
131
# File 'lib/generators/solidus/install/install_generator.rb', line 128

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

#install_payment_methodObject


171
172
173
# File 'lib/generators/solidus/install/install_generator.rb', line 171

def install_payment_method
  apply_template_for :payment_method, @selected_payment_method
end

#install_routesObject


138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/generators/solidus/install/install_generator.rb', line 138

def install_routes
  if Pathname(app_path).join('config', 'routes.rb').read.include? CORE_MOUNT_ROUTE
    say_status :route_exist, CORE_MOUNT_ROUTE, :blue
  else
    route <<~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

#load_sample_dataObject


189
190
191
192
193
194
195
196
# File 'lib/generators/solidus/install/install_generator.rb', line 189

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

#populate_seed_dataObject


175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/generators/solidus/install/install_generator.rb', line 175

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

#prepare_optionsObject


64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/generators/solidus/install/install_generator.rb', line 64

def prepare_options
  @run_migrations = options[:migrate]
  @load_seed_data = options[:seed] && @run_migrations
  @load_sample_data = options[:sample] && @run_migrations && @load_seed_data
  @selected_frontend = detect_frontend_to_install
  @selected_authentication = detect_authentication_to_install
  @selected_payment_method = detect_payment_method_to_install

  # Silence verbose output (e.g. Rails migrations will rely on this environment variable)
  ENV['VERBOSE'] = 'false'

  # No reason to check for their presence if we're about to install them
  ENV['SOLIDUS_SKIP_MIGRATIONS_CHECK'] = 'true'

  if options[:enforce_available_locales] != nil
    warn \
      "DEPRECATION WARNING: using `solidus:install --enforce-available-locales` is now deprecated and has no effect. " \
      "Since Rails 4.1 the default is `true` so we no longer need to explicitly set a value."
  end

  if options[:lib_name] != nil
    warn \
      "DEPRECATION WARNING: using `solidus:install --lib-name` is now deprecated and has no effect. " \
      "The option is legacy and should be removed from scripts still using it."
  end
end

#run_migrationsObject


153
154
155
156
157
158
159
160
161
# File 'lib/generators/solidus/install/install_generator.rb', line 153

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

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

#setup_assetsObject


105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/generators/solidus/install/install_generator.rb', line 105

def setup_assets
  empty_directory 'app/assets/images'

  %w{javascripts stylesheets images}.each do |path|
    empty_directory "vendor/assets/#{path}/spree/backend" if defined?(Spree::Backend) || Rails.env.test?
  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