Class: Spina::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/spina/install_generator.rb

Instance Method Summary collapse

Instance Method Details

#add_routeObject



16
17
18
19
20
# File 'lib/generators/spina/install_generator.rb', line 16

def add_route
  return if Rails.env.production?
  return if Rails.application.routes.routes.detect { |route| route.app.app == Spina::Engine }
  route "mount Spina::Engine => '/'"
end

#bootstrap_spinaObject



65
66
67
# File 'lib/generators/spina/install_generator.rb', line 65

def bootstrap_spina
  rake 'spina:bootstrap'
end

#copy_migrationsObject



22
23
24
25
# File 'lib/generators/spina/install_generator.rb', line 22

def copy_migrations
  return if Rails.env.production?
  rake 'spina:install:migrations'
end

#copy_template_filesObject



49
50
51
52
53
54
55
56
# File 'lib/generators/spina/install_generator.rb', line 49

def copy_template_files
  return if Rails.env.production?
  theme = Account.first.theme
  template "config/initializers/themes/#{theme}.rb"
  directory "app/assets/stylesheets/#{theme}"
  directory "app/views/#{theme}"
  directory "app/views/layouts/#{theme}"
end

#create_accountObject



31
32
33
34
35
# File 'lib/generators/spina/install_generator.rb', line 31

def 
  return if Account.exists? && !no?('An account already exists. Skip? [Yn]')
  name = ask('What would you like to name your website?')
   = Account.first_or_create.update_attribute(:name, name)
end

#create_carrierwave_initializer_fileObject



11
12
13
14
# File 'lib/generators/spina/install_generator.rb', line 11

def create_carrierwave_initializer_file
  return if Rails.env.production?
  template 'config/initializers/carrierwave.rb'
end

#create_initializer_fileObject



6
7
8
9
# File 'lib/generators/spina/install_generator.rb', line 6

def create_initializer_file
  return if Rails.env.production?
  template 'config/initializers/spina.rb'
end

#create_userObject



58
59
60
61
62
63
# File 'lib/generators/spina/install_generator.rb', line 58

def create_user
  return if User.exists? && !no?('A user already exists. Skip? [Yn]')
  email = ask('Please enter an email address for your first user:')
  password = ask('Create a temporary password:', echo: false)
  User.create name: 'admin', email: email, password: password, admin: true
end

#run_migrationsObject



27
28
29
# File 'lib/generators/spina/install_generator.rb', line 27

def run_migrations
  rake 'db:migrate'
end

#seed_demo_contentObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/generators/spina/install_generator.rb', line 69

def seed_demo_content
  theme_name = Account.first.theme
  if theme_name == 'demo' && !no?('Seed example content? [Yn]')

    current_theme = ::Spina::Theme.find_by_name(theme_name)
    if (page = Spina::Page.find_by(name: 'demo'))
      page.page_parts.clear
      parts = current_theme.page_parts.map { |page_part| page.page_part(page_part) }
      parts.each do |part|
        case part.partable_type
        when 'Spina::Line' then part.partable.content = 'This is a single line'
        when 'Spina::Text' then part.partable.content = '<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>'
        when 'Spina::Photo' then part.partable.remote_file_url = 'https://unsplash.it/300/200?random'
        when 'Spina::PhotoCollection'
          5.times { part.partable.photos.build(remote_file_url: 'https://unsplash.it/300/200?random') }
        when 'Spina::Color' then part.partable.content = '#6865b4'
        end
      end
      page.save
    end
  end
end

#set_themeObject



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/generators/spina/install_generator.rb', line 37

def set_theme
   = Account.first
  return if .theme.present? && !no?("Theme '#{.theme} is set. Skip? [Yn]")

  theme = begin
            theme = .theme || themes.first
            theme = ask("What theme do you want to use? (#{themes.join('/')}) [#{theme}]").presence || theme
          end until theme.in? themes

  .update_attribute(:theme, theme)
end