Sha256: a01cf110a7c4215c5d63ce707dd6870d2f8ab934d7bc703a4dd60d1897baff41

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require "interactive/prompt"
require "interactive/message"

module Interactive
  # 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

      create
    end

    def create
      # Install gems
      system("bin/setup")
      # Create project
      system(setup)
      # 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
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rails-interactive-0.1.1 lib/interactive.rb
rails-interactive-0.1.0 lib/interactive.rb