From 539b26c7df50c932d63870d036512891884bc474 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 21 Apr 2025 16:01:01 +0200 Subject: [PATCH] Small enough DSL to inline it --- db/seeds.rb | 36 +++++++++++++++++++++++++++++++++++- db/seeds/helpers.rb | 33 --------------------------------- 2 files changed, 35 insertions(+), 34 deletions(-) delete mode 100644 db/seeds/helpers.rb diff --git a/db/seeds.rb b/db/seeds.rb index 1f1b2322d..65a417e5a 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,6 +1,40 @@ -require_relative "seeds/helpers" raise "Seeding is just for development" unless Rails.env.development? +# Seed DSL +def seed_account(name) + print " #{name}…" + elapsed = Benchmark.realtime { require_relative name } + puts " #{elapsed.round(2)} sec" +end + +def create_tenant(name) + ApplicationRecord.destroy_tenant name + ApplicationRecord.create_tenant name + ApplicationRecord.current_tenant = name +end + +def create_first_run(name, email_address, password: "secret123456") + FirstRun.create!(name:, email_address:, password:) +end + +def login_as(user) + Current.session = user.sessions.create +end + +def create_user(name, email_address, password: "secret123456") + User.create!(name:, email_address:, password:) +end + +def create_collection(name, creator: Current.user, all_access: true, access_to: []) + Collection.create!(name:, creator:, all_access:).tap { it.accesses.grant_to(access_to) } +end + +def create_card(title, collection:, description: nil, status: :published, creator: Current.user) + collection.cards.create!(title:, creator:, status:).tap do |card| + card.capture(Comment.new(body: description)) if description + end +end + # Seed accounts seed_account "37signals" seed_account "honcho" diff --git a/db/seeds/helpers.rb b/db/seeds/helpers.rb deleted file mode 100644 index ecd1184b3..000000000 --- a/db/seeds/helpers.rb +++ /dev/null @@ -1,33 +0,0 @@ -def seed_account(name) - print " #{name}…" - elapsed = Benchmark.realtime { require_relative name } - puts " #{elapsed.round(2)} sec" -end - -def create_tenant(name) - ApplicationRecord.destroy_tenant name - ApplicationRecord.create_tenant name - ApplicationRecord.current_tenant = name -end - -def create_first_run(name, email_address, password: "secret123456") - FirstRun.create!(name:, email_address:, password:) -end - -def login_as(user) - Current.session = user.sessions.create -end - -def create_user(name, email_address, password: "secret123456") - User.create!(name:, email_address:, password:) -end - -def create_collection(name, creator: Current.user, all_access: true, access_to: []) - Collection.create!(name:, creator:, all_access:).tap { it.accesses.grant_to(access_to) } -end - -def create_card(title, collection:, description: nil, status: :published, creator: Current.user) - collection.cards.create!(title:, creator:, status:).tap do |card| - card.capture(Comment.new(body: description)) if description - end -end