10 setup.bootstrap(config)
19 @admin = create_admin_user(config[:admin_name], config[:admin_username], config[:admin_password])
20 UserActionObserver.current_user = @admin
21 load_default_configuration
22 load_database_template(config[:database_template])
23 announce "Finished.\n\n"
26 def create_admin_user(name, username, password)
27 unless name and username and password
28 announce "Create the admin user (press enter for defaults)."
29 name = prompt_for_admin_name unless name
30 username = prompt_for_admin_username unless username
31 password = prompt_for_admin_password unless password
36 :password => password,
37 :password_confirmation => password,
40 admin = User.find_by_login(username)
41 admin = User.new unless admin
42 admin.update_attributes(attributes)
46 def load_default_configuration
47 feedback "\nInitializing configuration" do
48 step { Radiant::Config['admin.title' ] = 'Radiant CMS' }
49 step { Radiant::Config['admin.subtitle'] = 'Publishing for Small Teams' }
50 step { Radiant::Config['defaults.page.parts' ] = 'body, extended' }
51 step { Radiant::Config['defaults.page.status' ] = 'draft' }
55 def load_database_template(filename)
58 name = find_template_in_path(filename)
60 announce "Invalid template name: #{filename}"
63 template = load_template_file(name)
67 templates = find_and_load_templates("#{RADIANT_ROOT}/db/templates/*.yml")
69 menu.header = "\nSelect a database template"
70 menu.prompt = "[1-#{templates.size}]: "
71 menu.select_by = :index
72 templates.each { |t| menu.choice(t['name']) { template = t } }
75 create_records(template)
80 def prompt_for_admin_name
81 username = ask('Name (Administrator): ', String) do |q|
82 q.validate = /^.{0,100}$/
83 q.responses[:not_valid] = "Invalid name. Must be at less than 100 characters long."
86 username = "Administrator" if username.blank?
90 def prompt_for_admin_username
91 username = ask('Username (admin): ', String) do |q|
92 q.validate = /^(|.{3,40})$/
93 q.responses[:not_valid] = "Invalid username. Must be at least 3 characters long."
96 username = "admin" if username.blank?
100 def prompt_for_admin_password
101 password = ask('Password (radiant): ', String) do |q|
103 q.validate = /^(|.{5,40})$/
104 q.responses[:not_valid] = "Invalid password. Must be at least 5 characters long."
105 q.whitespace = :strip
107 password = "radiant" if password.blank?
111 def find_template_in_path(filename)
114 "#{RADIANT_ROOT}/#{filename}",
115 "#{RADIANT_ROOT}/db/templates/#{filename}",
116 "#{RAILS_ROOT}/#{filename}",
117 "#{RAILS_ROOT}/db/templates/#{filename}",
118 "#{Dir.pwd}/#{filename}",
119 "#{Dir.pwd}/db/templates/#{filename}",
120 ].find { |name| File.file?(name) }
123 def find_and_load_templates(glob)
124 templates = Dir[glob]
125 templates.map! { |template| load_template_file(template) }
126 templates.sort_by { |template| template['name'] }
129 def load_template_file(filename)
130 YAML.load_file(filename)
133 def create_records(template)
134 records = template['records']
137 records.keys.each do |key|
138 feedback "Creating #{key.to_s.underscore.humanize}" do
140 model.reset_column_information
141 record_pairs = order_by_id(records[key])
143 record_pairs.each do |id, record|
144 model.new(record).save
152 def model(model_name)
153 model_name.to_s.singularize.constantize
156 def order_by_id(records)
157 records.map { |name, record| [record['id'], record] }.sort { |a, b| a[0] <=> b[0] }
161 def_delegators :terminal, :agree, :ask, :choose, :say
164 @terminal ||= HighLine.new
168 terminal.instance_variable_get("@output")
172 string = terminal.send(:wrap, string) unless terminal.wrap_at.nil?
177 output.print(wrap(string))
181 def puts(string = "\n")
189 def feedback(process, &block)
190 print "#{process}..."
198 rescue Exception => e
204 yield if block_given?