Sha256: 8de769911d6796186acc72ba20a6c5b9bea58d199aef14f4a15b122f5b73394d

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

require "rails_interactive/prompt"
require "rails_interactive/message"
require "fileutils"

module RailsInteractive
  # CLI class for the interactive CLI module
  class CLI
    def initialize
      @inputs = {}
    end

    def perform(key)
      case key
      when "new"
        Message.greet
        initialize_project
      when "help"
        Message.help
      else
        puts "Invalid parameter"
      end
    end

    def initialize_project
      @inputs[:name] = Prompt.new("Enter the name of the project: ", "ask", required: true).perform

      types = { "App" => "", "API" => "--api" }
      @inputs[:type] = Prompt.new("Choose project type: ", "select", types, required: true).perform

      database_types = { "PostgreSQL" => "-d postgresql", "MySQL" => "-d mysql", "SQLite" => "" }
      @inputs[:database] = Prompt.new("Choose project's database: ", "select", database_types, required: true).perform

      features = %w[devise]
      @inputs[:features] = Prompt.new("Choose project features: ", "multi_select", features).perform

      create
    end

    def create
      # Install gems
      system("bin/setup")
      # Create project
      system(setup)

      copy_templates_to_project

      # Move to project folder and install gems
      Dir.chdir "./#{@inputs[:name]}"
      @inputs[:features].each do |feature|
        system("bin/rails app:template LOCATION=templates/setup_#{feature}.rb")
      end

      # Prepare project requirements and give instructions
      Message.prepare
    end

    def setup
      base = "rails new"
      cmd = ""

      @inputs.each { |_key, value| cmd += "#{value} " }

      "#{base} #{cmd}".strip!
    end

    def copy_templates_to_project
      FileUtils.cp_r "#{__dir__}/rails_interactive/templates", "./#{@inputs[:name]}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails-interactive-0.1.4 lib/rails_interactive.rb