EagerELK/ditty

View on GitHub
lib/ditty/cli.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

# https://nandovieira.com/creating-generators-and-executables-with-thor
require 'dotenv/load' rescue LoadError # rubocop:disable Style/RescueModifier - Ignore dotenv/load errors
require 'thor'
require 'rack'
require 'rake'
require 'ditty/db' if ENV['DATABASE_URL']
require 'ditty/generators/crud_generator'
require 'ditty/generators/project_generator'
require 'ditty/generators/migration_generator'
require 'ditty/components/ditty'

# TODO: Component generator
# TODO: Add requires into application.rb
# TODO: Add requires into schema.rb

module Ditty
  class CLI < Thor
    include Thor::Actions

    register ::Ditty::Generators::CrudGenerator, 'crud', 'crud NAME', 'Generate a CRUD endpoint'

    register ::Ditty::Generators::ProjectGenerator, 'init', 'init', 'Initialize a Ditty Project'

    register ::Ditty::Generators::MigrationGenerator, 'migration', 'migration NAME', 'Create a new Sequel migration'

    default_task :help

    desc 'server', 'Start the Ditty server'
    require './application' if File.exist?('application.rb')
    require 'ditty/db' unless defined?(DB)
    ::Ditty::Components.tasks

    def server
      # Ensure the token files are present
      Rake::Task['ditty:generate_tokens'].invoke

      # Prep Ditty
      Rake::Task['ditty:prep:folders'].invoke
      Rake::Task['ditty:prep:migrations'].invoke

      # Check the migrations
      Rake::Task['ditty:migrate:check'].invoke

      # Seed Ditty DB
      puts 'Seeding the Ditty DB'
      Rake::Task['ditty:seed'].invoke

      # RackUP!
      rack_opts = {
        environment: ENV['APP_ENV'] || 'development',
        Port: ENV['APP_PORT'] || 9292,
        Host: ENV['APP_HOST'] || '0.0.0.0',
        config: 'config.ru'
      }
      puts 'Starting the Ditty Server'
      Rack::Server.start(rack_opts)
    end

    def self.exit_on_failure?
      true
    end

    desc 'migrate', 'Run the Ditty migrations'
    def migrate
      # Prep Ditty
      Rake::Task['ditty:prep:migrations'].invoke

      # Run the migrations
      Rake::Task['ditty:migrate:up'].invoke
      puts 'Ditty Migrations Executed'

      Rake::Task['ditty:dump_schema'].invoke
      puts 'Ditty DB Schema Dumped'
    end

    desc 'seed', 'Seed the predefined seeding data'
    def seed
      Rake::Task['ditty:seed'].invoke
    end

    desc 'console', 'Open a fully loaded console'
    def console
      Rake::Task['ditty:console'].invoke
    end
  end
end