class Alchemy::Seeder
This seeder builds Alchemy
pages in your database.
Create a db/seeds/alchemy/pages.yml
and db/seeds/alchemy/users.yml
files and put Alchemy::Seeder.seed!
into your db/seeds.rb
file.
Then run +rake db:seed+
Public Class Methods
seed!()
click to toggle source
Put Alchemy::Seeder.seed!
into your db/seeds.rb
file and run +rake db:seed+.
# File lib/alchemy/seeder.rb, line 19 def seed! try_seed_pages seed_users if user_seeds_file.file? end
Protected Class Methods
seed_layoutpages()
click to toggle source
# File lib/alchemy/seeder.rb, line 55 def seed_layoutpages desc "Seeding Alchemy layout pages from #{page_seeds_file}" language = Alchemy::Language.default layoutpages.each do |page| create_page(page, {language: language}) end end
seed_pages()
click to toggle source
# File lib/alchemy/seeder.rb, line 41 def seed_pages desc "Seeding Alchemy content pages from #{page_seeds_file}" if contentpages.length > 1 abort "The pages seed file must only contain one root page! You have #{contentpages.length}." end contentpages.each do |page| create_page(page, { language: Alchemy::Language.default, language_root: true }) end end
seed_users()
click to toggle source
# File lib/alchemy/seeder.rb, line 63 def seed_users desc "Seeding Alchemy users from #{user_seeds_file}" if Alchemy.user_class.exists? log "There are already users present in your database. " \ "Please use `rake db:reset' if you want to rebuild your database.", :skip false else users = YAML.load_file(user_seeds_file) users.each do |draft| user = Alchemy.user_class.create!(draft) log "Created user: #{user.try(:email) || user.try(:login) || user.id}" end end end
try_seed_pages()
click to toggle source
# File lib/alchemy/seeder.rb, line 26 def try_seed_pages return unless page_seeds_file.file? if Alchemy::Page.exists? desc "Seeding Alchemy pages" log "There are already pages present in your database. " \ "Please use `rake db:reset' if you want to rebuild your database.", :skip else create_default_site! unless Alchemy::Site.first create_default_language! unless Alchemy::Language.default seed_pages if contentpages.present? seed_layoutpages if layoutpages.present? end end
Private Class Methods
contentpages()
click to toggle source
# File lib/alchemy/seeder.rb, line 93 def contentpages page_yml.reject { |p| p["layoutpage"] } end
create_default_language!()
click to toggle source
If no languages are present, create a default language based on the host app’s Alchemy
configuration.
# File lib/alchemy/seeder.rb, line 118 def create_default_language! default_language = Alchemy::Config.get(:default_language) if default_language Alchemy::Language.create!( name: default_language["name"], language_code: default_language["code"], locale: default_language["code"], frontpage_name: default_language["frontpage_name"], page_layout: default_language["page_layout"], public: true, default: true, site: Alchemy::Site.first ) else raise DefaultLanguageNotFoundError end end
create_default_site!()
click to toggle source
# File lib/alchemy/seeder.rb, line 136 def create_default_site! default_site = Alchemy::Config.get(:default_site) if default_site Alchemy::Site.create!(name: default_site["name"], host: default_site["host"]) else raise DefaultSiteNotFoundError end end
create_page(draft, attributes = {})
click to toggle source
# File lib/alchemy/seeder.rb, line 105 def create_page(draft, attributes = {}) children = draft.delete("children") || [] page = Alchemy::Page.new(draft.merge(attributes)) page.versions.build page.save! log "Created page: #{page.name}" children.each do |child| create_page(child, parent: page, language: page.language) end end
layoutpages()
click to toggle source
# File lib/alchemy/seeder.rb, line 97 def layoutpages page_yml.select { |p| p["layoutpage"] } end
page_seeds_file()
click to toggle source
# File lib/alchemy/seeder.rb, line 81 def page_seeds_file @_page_seeds_file ||= Rails.root.join("db", "seeds", "alchemy", "pages.yml") end
page_yml()
click to toggle source
# File lib/alchemy/seeder.rb, line 85 def page_yml @_page_yml ||= YAML.safe_load( page_seeds_file.read, permitted_classes: [Date], aliases: true ) end
user_seeds_file()
click to toggle source
# File lib/alchemy/seeder.rb, line 101 def user_seeds_file @_user_seeds_file ||= Rails.root.join("db", "seeds", "alchemy", "users.yml") end