anyone-oslo/pages

View on GitHub
lib/rails/generators/pages_core/install/install_generator.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module PagesCore
  module Generators
    class InstallGenerator < Rails::Generators::Base
      desc "Creates the Pages configuration"
      source_root File.expand_path("templates", __dir__)

      def default_app_name
        Rails.root.to_s.split("/").last
      end

      def read_configuration!
        @app_name ||= ask_with_fallback("App name?", default_app_name)
        @site_name ||= ask_with_fallback("Site name?", @app_name.humanize)
        @domain_name ||= ask_with_fallback("Domain name?", "#{@app_name}.no")

        @default_sender ||= ask_with_fallback(
          "Default sender?",
          "no-reply@#{@domain_name}"
        )
        nil
      end

      def create_application_controller
        template("application_controller.rb",
                 File.join("app/controllers/application_controller.rb"))
      end

      def create_application_helper
        template("application_helper.rb",
                 File.join("app/helpers/application_helper.rb"))
      end

      def create_frontend_controller
        template("frontend_controller.rb",
                 File.join("app/controllers/frontend_controller.rb"))
      end

      def create_frontend_helper
        template("frontend_helper.rb",
                 File.join("app/helpers/frontend_helper.rb"))
      end

      def create_pages_controller
        template("pages_controller.rb",
                 File.join("app/controllers/pages_controller.rb"))
      end

      def create_default_template
        copy_file("default_page_template.html.erb",
                  File.join("app/views/pages/templates/index.html.erb"))
      end

      def create_initializer_file
        read_configuration!
        template("pages_initializer.rb",
                 File.join("config/initializers/pages.rb"))
      end

      def create_template_initializer
        read_configuration!
        template("page_templates_initializer.rb",
                 File.join("config/initializers/page_templates.rb"))
      end

      def create_gitignore
        template "gitignore.erb", File.join(".gitignore")
      end

      private

      def ask_with_fallback(question, default)
        result = ask(question + " [#{default}]")
        result.presence || default
      end
    end
  end
end