class Recipes::Admin

Public Instance Methods

add_active_admin() click to toggle source
# File lib/potassium/recipes/admin.rb, line 32
  def add_active_admin
    recipe = self
    gather_gem 'activeadmin', '~> 2.9'
    gather_gem 'activeadmin_addons', '~> 2.0.0.beta.0'
    add_readme_section :internal_dependencies, :active_admin
    after(:gem_install, wrap_in_action: :admin_install) do
      generate "active_admin:install --use_webpacker"
      run 'yarn add @activeadmin/activeadmin'
      line = "ActiveAdmin.setup do |config|"
      initializer = "config/initializers/active_admin.rb"
      gsub_file initializer, /(#{Regexp.escape(line)})/mi do |_match|
        <<~HERE
          class CustomFooter < ActiveAdmin::Component
            def build _arg
              super(id: "footer")
              para "Powered by Platanus"
            end
          end\n
          ActiveAdmin.setup do |config|
            config.view_factory.footer = CustomFooter
            meta_tags_options = { viewport: 'width=device-width, initial-scale=1' }
            config.meta_tags = meta_tags_options
            config.meta_tags_for_logged_out_pages = meta_tags_options
            config.comments = false
        HERE
      end

      generate "activeadmin_addons:install"

      run "yarn add arctic_admin @fortawesome/fontawesome-free"

      run 'rm -rf config/webpack/plugins'
      run 'rm app/javascript/packs/active_admin.js'
      run 'rm -rf app/javascript/packs/active_admin'
      run 'rm app/javascript/stylesheets/active_admin.scss'
      run 'rmdir app/javascript/packs'
      run 'rmdir app/javascript/stylesheets'
      run 'rmdir app/javascript'

      recipe.copy_frontend_files
      recipe.insert_vite_monkeypatch
    end
  end
ask() click to toggle source
# File lib/potassium/recipes/admin.rb, line 2
def ask
  if selected?(:authentication)
    admin_mode = answer(:admin) { Ask.confirm("Do you want to use ActiveAdmin?") }
    set(:admin_mode, admin_mode)
  end
end
copy_frontend_files() click to toggle source
# File lib/potassium/recipes/admin.rb, line 76
def copy_frontend_files
  copy_file '../assets/app/frontend/entrypoints/active_admin.js',
            'app/frontend/entrypoints/active_admin.js'
  copy_file '../assets/app/frontend/entrypoints/active_admin.scss',
            'app/frontend/entrypoints/active_admin.scss'
  copy_file '../assets/app/frontend/active_admin/jquery.js', 'app/frontend/active_admin/jquery.js'
end
create() click to toggle source
# File lib/potassium/recipes/admin.rb, line 9
def create
  if selected?(:admin_mode)
    if selected?(:authentication)
      add_active_admin
    else
      info "ActiveAdmin can't be installed because Devise isn't enabled."
    end
  end
end
insert_vite_monkeypatch() click to toggle source
# File lib/potassium/recipes/admin.rb, line 84
  def insert_vite_monkeypatch
    monkeypatch =
      <<~HERE
        module ActiveAdminViteJS
          def stylesheet_pack_tag(style, **options)
            style = 'active_admin.scss' if style == 'active_admin.css'
            vite_stylesheet_tag(style, **options)
          end

          def javascript_pack_tag(script, **options)
            vite_javascript_tag(script, **options)
          end
        end

        ActiveAdmin::Views::Pages::Base.include ActiveAdminViteJS
        ActiveSupport.on_load(:action_view) { include ActiveAdminViteJS }

      HERE
    insert_into_file "config/initializers/active_admin.rb", monkeypatch,
                     before: "ActiveAdmin.setup do |config|"
  end
install() click to toggle source
# File lib/potassium/recipes/admin.rb, line 19
def install
  devise = load_recipe(:devise)
  if devise.installed?
    add_active_admin
  else
    info "ActiveAdmin can't be installed because Devise isn't installed."
  end
end
installed?() click to toggle source
# File lib/potassium/recipes/admin.rb, line 28
def installed?
  gem_exists?(/activeadmin/)
end