Skip to content

Commit 111a53e

Browse files
committed
Ensure db:seed runs before spree_sample:load
1 parent 7690a8c commit 111a53e

File tree

7 files changed

+72
-46
lines changed

7 files changed

+72
-46
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,17 @@ bin/rails g solidus:install --migrate=false --sample=false --seed=false
148148

149149
You can always perform any of these steps later by using these commands.
150150

151+
**Note: Loading sample data will automatically load seed data as well because the sample data depends on the data provided by the seeds.**
152+
151153
```bash
152154
bin/rails railties:install:migrations
153155
bin/rails db:migrate
154-
bin/rails db:seed
155156
bin/rails spree_sample:load
156157
```
157158

159+
If you don't want to load sample data you can use `bin/rails db:seed` instead. This command
160+
will populate the database with only the basic data needed for Solidus to work.
161+
158162
There are also options and rake tasks provided by
159163
[solidus\_auth\_devise](https://github.com/solidusio/solidus_auth_devise).
160164

core/lib/generators/solidus/install/install_generator.rb

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ class InstallGenerator < Rails::Generators::AppBase
3636
]
3737

3838
class_option :migrate, type: :boolean, default: true, banner: 'Run Solidus migrations'
39-
class_option :seed, type: :boolean, default: true, banner: 'Load seed data (migrations must be run)'
40-
class_option :sample, type: :boolean, default: true, banner: 'Load sample data (migrations and seeds must be run)'
39+
class_option :seed, type: :boolean, default: true, banner: 'Run seed data task(migrations must be run)'
40+
class_option :sample, type: :boolean, default: true, banner: 'Run sample data task(migrations must be run)'
4141
class_option :active_storage, type: :boolean, default: (
4242
Rails.gem_version >= Gem::Version.new("6.1.0")
4343
), banner: 'Install ActiveStorage as image attachments handler for products and taxons'
@@ -63,8 +63,8 @@ def self.exit_on_failure?
6363

6464
def prepare_options
6565
@run_migrations = options[:migrate]
66-
@load_seed_data = options[:seed] && @run_migrations
67-
@load_sample_data = options[:sample] && @run_migrations && @load_seed_data
66+
@run_sample = options[:sample] && @run_migrations
67+
@run_seeds = options[:seed] && @run_migrations && !@run_sample
6868
@selected_frontend = detect_frontend_to_install
6969
@selected_authentication = detect_authentication_to_install
7070
@selected_payment_method = detect_payment_method_to_install
@@ -172,27 +172,12 @@ def install_payment_method
172172
apply_template_for :payment_method, @selected_payment_method
173173
end
174174

175-
def populate_seed_data
176-
if @load_seed_data
177-
say_status :loading, "seed data"
178-
rake_options = []
179-
rake_options << "AUTO_ACCEPT=1" if options[:auto_accept]
180-
rake_options << "ADMIN_EMAIL=#{options[:admin_email]}" if options[:admin_email]
181-
rake_options << "ADMIN_PASSWORD=#{options[:admin_password]}" if options[:admin_password]
175+
def run_data_loaders
176+
say_status_and_run_task("seed and sample data", "spree_sample:load") if @run_sample
177+
say_status_and_run_task("seed data", "db:seed #{seed_data_overrides.join(' ')}") if @run_seeds
182178

183-
rake("db:seed #{rake_options.join(' ')}")
184-
else
185-
say_status :skipping, "seed data (you can always run rake db:seed)"
186-
end
187-
end
188-
189-
def load_sample_data
190-
if @load_sample_data
191-
say_status :loading, "sample data"
192-
rake 'spree_sample:load'
193-
else
194-
say_status :skipping, "sample data (you can always run rake spree_sample:load)"
195-
end
179+
say_status :skipping, "seed data (you can always run rake db:seed)" unless @run_seeds || @run_sample
180+
say_status :skipping, "sample data (you can always run rake spree_sample:load)" unless @run_sample
196181
end
197182

198183
def complete
@@ -201,6 +186,19 @@ def complete
201186

202187
private
203188

189+
def say_status_and_run_task(status_text, task)
190+
say_status :loading, status_text
191+
rake task
192+
end
193+
194+
def seed_data_overrides
195+
rake_options = []
196+
rake_options << "AUTO_ACCEPT=1" if options[:auto_accept]
197+
rake_options << "ADMIN_EMAIL=#{options[:admin_email]}" if options[:admin_email]
198+
rake_options << "ADMIN_PASSWORD=#{options[:admin_password]}" if options[:admin_password]
199+
rake_options
200+
end
201+
204202
def generate(what, *args, abort_on_failure: true)
205203
args << '--auto-accept' if options[:auto_accept]
206204
args << '--auto-run-migrations' if options[:migrate]

core/spec/generators/solidus/install/install_generator_spec.rb

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
expect(generator.instance_variable_get(:@selected_authentication)).to eq("devise")
1515
expect(generator.instance_variable_get(:@selected_payment_method)).to eq("paypal")
1616
expect(generator.instance_variable_get(:@run_migrations)).to eq(true)
17-
expect(generator.instance_variable_get(:@load_seed_data)).to eq(true)
18-
expect(generator.instance_variable_get(:@load_sample_data)).to eq(true)
17+
expect(generator.instance_variable_get(:@run_seeds)).to eq(false)
18+
expect(generator.instance_variable_get(:@run_sample)).to eq(true)
1919
end
2020
end
2121

@@ -36,8 +36,19 @@
3636

3737
aggregate_failures do
3838
expect(generator.instance_variable_get(:@run_migrations)).to eq(false)
39-
expect(generator.instance_variable_get(:@load_seed_data)).to eq(false)
40-
expect(generator.instance_variable_get(:@load_sample_data)).to eq(false)
39+
expect(generator.instance_variable_get(:@run_seeds)).to eq(false)
40+
expect(generator.instance_variable_get(:@run_sample)).to eq(false)
41+
end
42+
end
43+
44+
it 'disables "seeds" when "sample" is enabled' do
45+
generator = described_class.new([], ['--auto-accept', '--sample=true'])
46+
generator.prepare_options
47+
48+
aggregate_failures do
49+
expect(generator.instance_variable_get(:@run_migrations)).to eq(true)
50+
expect(generator.instance_variable_get(:@run_seeds)).to eq(false)
51+
expect(generator.instance_variable_get(:@run_sample)).to eq(true)
4152
end
4253
end
4354

@@ -68,17 +79,8 @@
6879
generator.prepare_options
6980

7081
expect(generator.instance_variable_get(:@run_migrations)).to eq(false)
71-
expect(generator.instance_variable_get(:@load_seed_data)).to eq(false)
72-
expect(generator.instance_variable_get(:@load_sample_data)).to eq(false)
73-
end
74-
75-
it 'skips sample data if seeds are disabled' do
76-
generator = described_class.new([], ['--auto-accept', '--seed=false'])
77-
generator.prepare_options
78-
79-
expect(generator.instance_variable_get(:@run_migrations)).to eq(true)
80-
expect(generator.instance_variable_get(:@load_seed_data)).to eq(false)
81-
expect(generator.instance_variable_get(:@load_sample_data)).to eq(false)
82+
expect(generator.instance_variable_get(:@run_seeds)).to eq(false)
83+
expect(generator.instance_variable_get(:@run_sample)).to eq(false)
8284
end
8385

8486
context 'supports legacy frontend option names' do

sample/db/samples/shipping_methods.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
begin
44
north_america = Spree::Zone.find_by!(name: "North America")
55
rescue ActiveRecord::RecordNotFound
6-
puts "Couldn't find 'North America' zone. Did you run `rake db:seed` first?"
7-
puts "That task will set up the countries, states and zones required for Spree."
6+
puts <<~TEXT
7+
Couldn't find 'North America' zone. Did you run `rails db:seed` first?
8+
9+
That task will set up the countries, states and zones required for your store.
10+
TEXT
811
exit
912
end
1013

sample/db/samples/tax_rates.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
# frozen_string_literal: true
22

3-
north_america = Spree::Zone.find_by!(name: "North America")
3+
begin
4+
north_america = Spree::Zone.find_by!(name: "North America")
5+
rescue ActiveRecord::RecordNotFound
6+
puts <<~TEXT
7+
Couldn't find 'North America' zone. Did you run `rails db:seed` first?
8+
9+
That task will set up the countries, states and zones required for your store.
10+
TEXT
11+
exit
12+
end
13+
414
clothing = Spree::TaxCategory.find_by!(name: "Default")
515
tax_rate = Spree::TaxRate.create(
616
name: "North America",

sample/lib/tasks/sample.rake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ require 'spree/sample'
55

66
namespace :spree_sample do
77
desc 'Loads sample data'
8-
task load: :environment do
8+
task load: ['db:seed', :environment] do
99
if ARGV.include?("db:migrate")
1010
puts <<~TEXT
1111
Please run db:migrate separately from spree_sample:load.
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
# frozen_string_literal: true
22

3-
require 'spec_helper'
3+
require "spec_helper"
4+
require "rake"
45

56
describe "Load samples" do
67
it "doesn't raise any error" do
78
expect {
89
Spree::Core::Engine.load_seed
910
SpreeSample::Engine.load_samples
10-
}.to output.to_stdout
11+
}.not_to raise_error
12+
end
13+
14+
it "has db:seed as a prerequisite" do
15+
Rails.application.load_tasks
16+
17+
task = Rake::Task["spree_sample:load"]
18+
seed_task = Rake::Task["db:seed"]
19+
expect(task.prerequisite_tasks).to include(seed_task)
1120
end
1221
end

0 commit comments

Comments
 (0)