Class: Alchemy::Generators::InstallGenerator

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

Instance Method Summary collapse

Instance Method Details

#add_npm_packageObject



128
129
130
# File 'lib/generators/alchemy/install/install_generator.rb', line 128

def add_npm_package
  run "yarn add @alchemy_cms/admin@~#{Alchemy.version}"
end

#copy_alchemy_entry_pointObject



132
133
134
135
136
137
138
139
# File 'lib/generators/alchemy/install/install_generator.rb', line 132

def copy_alchemy_entry_point
  webpack_config = YAML.safe_load(
    File.read(app_root.join("config", "webpacker.yml")),
    aliases: true
  )[Rails.env]
  copy_file "alchemy_admin.js",
    app_root.join(webpack_config["source_path"], webpack_config["source_entry_path"], "alchemy/admin.js")
end

#copy_babel_configObject

We need to force the babel.config.js file, because webpacker has an invalid one



122
123
124
125
126
# File 'lib/generators/alchemy/install/install_generator.rb', line 122

def copy_babel_config
  if options[:force_babel_config]
    copy_file "babel.config.js", app_root.join("babel.config.js"), force: true
  end
end

#copy_configObject



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

def copy_config
  copy_file "#{gem_config_path}/config.yml", app_config_path.join("alchemy", "config.yml")
end

#copy_demo_viewsObject



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/generators/alchemy/install/install_generator.rb', line 80

def copy_demo_views
  return if options[:skip_demo_files]

  copy_file "application.html.erb", app_views_path.join("layouts", "application.html.erb")
  copy_file "article.scss", app_assets_path.join("stylesheets", "alchemy", "elements", "article.scss")

  stylesheet_require = " *= require_tree ./alchemy/elements\n"
  if File.exist?(app_assets_path.join("stylesheets", "application.css"))
    insert_into_file app_assets_path.join("stylesheets", "application.css"), stylesheet_require,
      before: " */"
  else
    create_file app_assets_path.join("stylesheets", "application.css"), "/*\n#{stylesheet_require} */\n"
  end

  copy_file "_article.html.erb", app_views_path.join("alchemy", "elements", "_article.html.erb")
  copy_file "_standard.html.erb", app_views_path.join("alchemy", "page_layouts", "_standard.html.erb")
  copy_file "alchemy.en.yml", app_config_path.join("locales", "alchemy.en.yml")
end

#copy_dragonfly_configObject



99
100
101
102
103
104
105
# File 'lib/generators/alchemy/install/install_generator.rb', line 99

def copy_dragonfly_config
  template(
    "#{__dir__}/templates/dragonfly.rb.tt",
    app_config_path.join("initializers", "dragonfly.rb"),
    skip: options[:auto_accept]
  )
end

#copy_yml_filesObject



69
70
71
72
73
# File 'lib/generators/alchemy/install/install_generator.rb', line 69

def copy_yml_files
  %w(elements page_layouts menus).each do |file|
    template "#{__dir__}/templates/#{file}.yml.tt", app_config_path.join("alchemy", "#{file}.yml")
  end
end

#finalizeObject



159
160
161
162
163
164
165
166
167
# File 'lib/generators/alchemy/install/install_generator.rb', line 159

def finalize
  header
  say "Alchemy successfully installed!"
  say "Now start the server with:\n\n"
  say "  bin/rails server\n\n"
  say "and point your browser to\n\n"
  say "  http://localhost:3000/admin\n\n"
  say "and follow the onscreen instructions to finalize the installation.\n\n"
end

#install_assetsObject



75
76
77
78
# File 'lib/generators/alchemy/install/install_generator.rb', line 75

def install_assets
  copy_file "all.js", app_vendor_assets_path.join("javascripts", "alchemy", "admin", "all.js")
  copy_file "all.css", app_vendor_assets_path.join("stylesheets", "alchemy", "admin", "all.css")
end

#install_gutentag_migrationsObject



107
108
109
# File 'lib/generators/alchemy/install/install_generator.rb', line 107

def install_gutentag_migrations
  rake "gutentag:install:migrations"
end

#mountObject



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

def mount
  return if options[:skip_mount]

  install_tasks.inject_routes(options[:auto_accept])
end

#run_webpacker_installerObject



111
112
113
114
115
116
117
118
119
# File 'lib/generators/alchemy/install/install_generator.rb', line 111

def run_webpacker_installer
  unless options[:skip_webpacker_installer]
    # Webpacker does not create a package.json, but we need one
    unless File.exist? app_root.join("package.json")
      in_root { run "echo '{}' > package.json" }
    end
    rake("webpacker:install", abort_on_failure: true)
  end
end

#set_primary_languageObject



141
142
143
144
145
146
147
148
# File 'lib/generators/alchemy/install/install_generator.rb', line 141

def set_primary_language
  header
  install_tasks.set_primary_language(
    code: options[:default_language_code],
    name: options[:default_language_name],
    auto_accept: options[:auto_accept]
  )
end

#setupObject



53
54
55
56
57
# File 'lib/generators/alchemy/install/install_generator.rb', line 53

def setup
  header
  say "Welcome to AlchemyCMS!"
  say "Let's begin with some questions.\n\n"
end

#setup_databaseObject



150
151
152
153
154
155
156
157
# File 'lib/generators/alchemy/install/install_generator.rb', line 150

def setup_database
  rake("db:create", abort_on_failure: true) unless options[:skip_db_create]
  # We can't invoke this rake task, because Rails will use wrong engine names otherwise
  rake("alchemy:install:migrations", abort_on_failure: true)
  rake("db:migrate", abort_on_failure: true)
  install_tasks.inject_seeder
  rake("db:seed", abort_on_failure: true)
end