Class: MaterialAdminGenerator
- Inherits:
-
Rails::Generators::NamedBase
- Object
- Rails::Generators::NamedBase
- MaterialAdminGenerator
- Includes:
- Rails::Generators::Actions
- Defined in:
- lib/generators/material_admin/material_admin_generator.rb
Constant Summary collapse
- GEM_NAME =
'rails_material_admin'
- GEM_PATH =
Gem.loaded_specs[GEM_NAME].full_gem_path
- JS_PKGS =
'datatables.net-bs4 datatables.net-responsive-bs4'\ ' expose-loader file-loader url-loader resolve-url-loader'\ ' @rails/ujs @rails/activestorage'\ ' stimulus turbolinks'\ ' jquery popper.js select2'
- WEBPACKER_DIR_PREFIX =
TODO: customize dir prefix
'javascript'
Instance Method Summary collapse
- #add_gems ⇒ Object
- #at_end ⇒ Object
- #create_base_controller ⇒ Object
- #create_dashboard_controller ⇒ Object
- #create_dashboard_view ⇒ Object
- #create_helper ⇒ Object
- #create_js_manifest ⇒ Object
- #create_layout ⇒ Object
- #create_new_session_file ⇒ Object
- #create_partials ⇒ Object
- #create_sessions_controller ⇒ Object
- #create_style_manifest ⇒ Object
- #import_files ⇒ Object
- #init_db ⇒ Object
- #modify_webpacker_environment_file ⇒ Object
- #need_modify ⇒ Object
- #prompt_confit_route ⇒ Object
- #prompt_extract_css ⇒ Object
- #yarn_install ⇒ Object
Instance Method Details
#add_gems ⇒ Object
23 24 25 26 27 28 29 30 31 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 23 def add_gems p 'Add gems...' gem 'slim' gem 'devise' gem 'kaminari' system('bundle install') end |
#at_end ⇒ Object
250 251 252 253 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 250 def at_end p '****************************************************' p '****************************************************' end |
#create_base_controller ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 137 def create_base_controller p "Create base controller'" create_file "#{Rails.root}/app/controllers/#{layout_name}/base_controller.rb" do <<~dashboard_controller # frozen_string_literal: true class #{layout_name.camelize}::BaseController < ActionController::Base layout '#{layout_name}' before_action :authenticate_#{layout_name}! end dashboard_controller end end |
#create_dashboard_controller ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 153 def create_dashboard_controller p 'Create dashboard controller...' create_file "#{Rails.root}/app/controllers/#{layout_name}/dashboard_controller.rb" do <<~dashboard_controller # frozen_string_literal: true class #{layout_name.camelize}::DashboardController < #{layout_name.camelize}::BaseController def index end end dashboard_controller end end |
#create_dashboard_view ⇒ Object
182 183 184 185 186 187 188 189 190 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 182 def create_dashboard_view p 'Create dashboard view...' create_file "#{Rails.root}/app/views/#{layout_name}/dashboard/index.html.slim" do <<~dashboard_page h1 Welcome come back🙂 dashboard_page end end |
#create_helper ⇒ Object
67 68 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/material_admin/material_admin_generator.rb', line 67 def create_helper p "Create #{layout_name} layout helper..." create_file "#{Rails.root}/app/helpers/#{layout_name}_helper.rb" do <<~helper # frozen_string_literal: true module #{layout_name.camelize}Helper def body_id ctrl_name = controller_path.gsub(%r{^v\d+/}, '').tr('/', '-') [ctrl_name, action_name].map(&:dasherize).join('-') end def body_class controller_path.gsub(%r{^v\d+/}, '').tr('/', '-').dasherize end def body_data_controller @body_data_controller ||= controller_name.tr('_', '-').split('/').join('-') end end helper end end |
#create_js_manifest ⇒ Object
92 93 94 95 96 97 98 99 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 92 def create_js_manifest p "Create #{layout_name} js manifest..." src = "#{GEM_PATH}/vendor/javascript/packs/admin.js" dest = "#{Rails.root}/app/#{WEBPACKER_DIR_PREFIX}/packs/#{layout_name}.js" FileUtils.cp src, dest end |
#create_layout ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 110 def create_layout p "Create #{layout_name} layout..." layout_html_path = "#{Rails.root}/app/views/layouts/#{layout_name}.html.erb" File.rename(layout_html_path, "#{['layout_name']}.html.slim") if File.exist?(layout_html_path) src = "#{GEM_PATH}/app/views/layouts/admin.html.slim" dest = "#{Rails.root}/app/views/layouts/#{layout_name}.html.slim" FileUtils.cp src, dest src = "#{GEM_PATH}/app/views/layouts/unauthorized.html.slim" dest = "#{Rails.root}/app/views/layouts/unauthorized.html.slim" FileUtils.cp src, dest end |
#create_new_session_file ⇒ Object
192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 192 def create_new_session_file p 'Create sign_in template...' dir = "#{Rails.root}/app/views/#{layout_name}/sessions/" FileUtils.mkdir_p(dir) unless File.directory?(dir) FileUtils.cp( "#{GEM_PATH}/app/views/#{layout_name}/sessions/new.html.slim", "#{Rails.root}/app/views/#{layout_name}/sessions/new.html.slim" ) end |
#create_partials ⇒ Object
127 128 129 130 131 132 133 134 135 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 127 def create_partials p "Create #{layout_name} shared partials..." dest = "#{Rails.root}/app/views/#{layout_name}/shared" FileUtils.mkdir_p(dest) unless File.directory?(dest) FileUtils.copy_entry("#{GEM_PATH}/app/views/shared", dest) end |
#create_sessions_controller ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 168 def create_sessions_controller p "Create #{layout_name} sessions controller..." create_file "#{Rails.root}/app/controllers/#{layout_name}/sessions_controller.rb" do <<~sessions_controller # frozen_string_literal: true class Admin::SessionsController < Devise::SessionsController layout 'unauthorized' end sessions_controller end end |
#create_style_manifest ⇒ Object
101 102 103 104 105 106 107 108 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 101 def create_style_manifest p "Create #{layout_name} style js manifest..." src = "#{GEM_PATH}/vendor/javascript/packs/admin_style.js" dest = "#{Rails.root}/app/#{WEBPACKER_DIR_PREFIX}/packs/#{layout_name}_style.js" FileUtils.cp src, dest end |
#import_files ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 33 def import_files p 'Import material admin theme files...' webpacker_dir = "#{Rails.root}/app/#{WEBPACKER_DIR_PREFIX}" FileUtils.mkdir_p("#{webpacker_dir}/vendor") unless File.directory?("#{webpacker_dir}/vendor") FileUtils.copy_entry("#{GEM_PATH}/vendor/#{GEM_NAME}", "#{webpacker_dir}/vendor/#{GEM_NAME}/") # p 'Import package.json...' # FileUtils.cp "#{GEM_PATH}/package.json", "#{Rails.root}/package.json" p 'Import js source files...' FileUtils.copy_entry("#{GEM_PATH}/vendor/javascript", webpacker_dir) p 'Import datatable files...' FileUtils.cp( "#{GEM_PATH}/app/controllers/concerns/datatable_decorator.rb", "#{Rails.root}/app/controllers/concerns/datatable_decorator.rb" ) FileUtils.cp( "#{GEM_PATH}/app/helpers/datatables_helper.rb", "#{Rails.root}/app/helpers/datatables_helper.rb" ) end |
#init_db ⇒ Object
205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 205 def init_db p 'Init db...' system('rake db:drop db:create') p 'Init devise...' system('rails g devise:install') system("rails generate model #{layout_name}") system("rails generate devise #{layout_name}") system('rake db:migrate') end |
#modify_webpacker_environment_file ⇒ Object
217 218 219 220 221 222 223 224 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 217 def modify_webpacker_environment_file p 'Overwrite config webpack environment js file' src = "#{GEM_PATH}/config/webpack/environment.js" dest = "#{Rails.root}/config/webpack/environment.js" FileUtils.cp src, dest end |
#need_modify ⇒ Object
226 227 228 229 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 226 def need_modify p '****************************************************' p '****************************************************' end |
#prompt_confit_route ⇒ Object
231 232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 231 def prompt_confit_route puts "Need change the devise default route to:\n" routes = <<~routes devise_for :#{layout_name}, path: '#{layout_name}', controllers: { sessions: '#{layout_name}/sessions' } namespace :#{layout_name} do root 'dashboard#index' end routes puts routes end |
#prompt_extract_css ⇒ Object
245 246 247 248 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 245 def prompt_extract_css puts "Need set extract_css to true in webpacker.yml\n" p 'extract_css: true' end |
#yarn_install ⇒ Object
63 64 65 |
# File 'lib/generators/material_admin/material_admin_generator.rb', line 63 def yarn_install system("yarn add #{JS_PKGS}") end |