Add "option", "hook" concepts
This commit is contained in:
parent
1b98c2dce9
commit
e89687d445
16 changed files with 115 additions and 61 deletions
|
@ -4,14 +4,12 @@ require "cmd"
|
||||||
|
|
||||||
class Twenty::Command < Cmd
|
class Twenty::Command < Cmd
|
||||||
##
|
##
|
||||||
# mixins
|
# Hooks
|
||||||
require_relative "command/mixin/common_option_mixin"
|
require_relative "command/option"
|
||||||
require_relative "command/mixin/migration_mixin"
|
require_relative "command/hook"
|
||||||
require_relative "command/mixin/sqlite_mixin"
|
|
||||||
require_relative "command/mixin/rescue_mixin"
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# commands
|
# Commands
|
||||||
require_relative "command/up"
|
require_relative "command/up"
|
||||||
require_relative "command/down"
|
require_relative "command/down"
|
||||||
require_relative "command/connect"
|
require_relative "command/connect"
|
||||||
|
|
|
@ -5,9 +5,13 @@ class Twenty::Command::Connect < Twenty::Command
|
||||||
description: "Connect a project to twenty"
|
description: "Connect a project to twenty"
|
||||||
set_option "-p PATH", "--path PATH", "The path to a project", default: nil
|
set_option "-p PATH", "--path PATH", "The path to a project", default: nil
|
||||||
|
|
||||||
prepend Twenty::Command::MigrationMixin
|
##
|
||||||
prepend Twenty::Command::SQLiteMixin
|
# Hooks
|
||||||
prepend Twenty::Command::RescueMixin
|
# Run order:
|
||||||
|
# Rescue -> SQLiteConn -> RequireMigration -> command
|
||||||
|
prepend Hook::RequireMigration
|
||||||
|
prepend Hook::SQLiteConn
|
||||||
|
prepend Hook::Rescue
|
||||||
|
|
||||||
def run
|
def run
|
||||||
options = parse_options(argv)
|
options = parse_options(argv)
|
||||||
|
|
|
@ -3,10 +3,18 @@
|
||||||
class Twenty::Command::Console < Twenty::Command
|
class Twenty::Command::Console < Twenty::Command
|
||||||
set_banner usage: "twenty console [OPTIONS]",
|
set_banner usage: "twenty console [OPTIONS]",
|
||||||
description: "Start the twenty developer console"
|
description: "Start the twenty developer console"
|
||||||
include CommonOptionMixin
|
|
||||||
prepend Twenty::Command::MigrationMixin
|
##
|
||||||
prepend Twenty::Command::SQLiteMixin
|
# Option(s)
|
||||||
prepend Twenty::Command::RescueMixin
|
include Option::Database
|
||||||
|
|
||||||
|
##
|
||||||
|
# Hooks
|
||||||
|
# Run order:
|
||||||
|
# Rescue -> SQLiteConn -> RequireMigration -> command
|
||||||
|
prepend Hook::RequireMigration
|
||||||
|
prepend Hook::SQLiteConn
|
||||||
|
prepend Hook::Rescue
|
||||||
|
|
||||||
def run
|
def run
|
||||||
options = parse_options(argv)
|
options = parse_options(argv)
|
||||||
|
|
|
@ -4,9 +4,12 @@ class Twenty::Command::Disconnect < Twenty::Command
|
||||||
set_banner usage: "twenty disconnect [OPTIONS]",
|
set_banner usage: "twenty disconnect [OPTIONS]",
|
||||||
description: "Disconnect a project from twenty"
|
description: "Disconnect a project from twenty"
|
||||||
set_option "-p PATH", "--path PATH", "The path to a project", default: nil
|
set_option "-p PATH", "--path PATH", "The path to a project", default: nil
|
||||||
prepend Twenty::Command::MigrationMixin
|
|
||||||
prepend Twenty::Command::SQLiteMixin
|
##
|
||||||
prepend Twenty::Command::RescueMixin
|
# Hooks
|
||||||
|
prepend Hook::RequireMigration
|
||||||
|
prepend Hook::SQLiteConn
|
||||||
|
prepend Hook::Rescue
|
||||||
|
|
||||||
def run
|
def run
|
||||||
options = parse_options(argv)
|
options = parse_options(argv)
|
||||||
|
|
|
@ -4,8 +4,12 @@ class Twenty::Command::Down < Twenty::Command
|
||||||
set_banner usage: "twenty down [OPTIONS]",
|
set_banner usage: "twenty down [OPTIONS]",
|
||||||
description: "Stop the twenty web server"
|
description: "Stop the twenty web server"
|
||||||
|
|
||||||
prepend Twenty::Command::SQLiteMixin
|
##
|
||||||
prepend Twenty::Command::RescueMixin
|
# Hooks
|
||||||
|
# Run order:
|
||||||
|
# Rescue -> SQLiteConn -> command
|
||||||
|
prepend Hook::SQLiteConn
|
||||||
|
prepend Hook::Rescue
|
||||||
|
|
||||||
def run
|
def run
|
||||||
options = parse_options(argv)
|
options = parse_options(argv)
|
||||||
|
|
5
cli/lib/twenty/cli/command/hook.rb
Normal file
5
cli/lib/twenty/cli/command/hook.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module Twenty::Command::Hook
|
||||||
|
require_relative "hook/require_migration"
|
||||||
|
require_relative "hook/sqlite_conn"
|
||||||
|
require_relative "hook/rescue"
|
||||||
|
end
|
21
cli/lib/twenty/cli/command/hook/require_migration.rb
Normal file
21
cli/lib/twenty/cli/command/hook/require_migration.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Twenty::Command::Hook
|
||||||
|
module RequireMigration
|
||||||
|
def run_command(...)
|
||||||
|
if pending_migrations?
|
||||||
|
warn "There are pending migrations.\n" \
|
||||||
|
"Run \"twenty migrate\" first.\n"
|
||||||
|
exit(1)
|
||||||
|
else
|
||||||
|
super(...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def pending_migrations?
|
||||||
|
Twenty::Migration.pending_migrations?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Twenty::Command
|
module Twenty::Command::Hook
|
||||||
module RescueMixin
|
module Rescue
|
||||||
FRAME_MAX = 15
|
FRAME_MAX = 15
|
||||||
|
|
||||||
def run(...)
|
def run(...)
|
11
cli/lib/twenty/cli/command/hook/sqlite_conn.rb
Normal file
11
cli/lib/twenty/cli/command/hook/sqlite_conn.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Twenty::Command::Hook
|
||||||
|
module SQLiteConn
|
||||||
|
def run_command(options)
|
||||||
|
path = options.database || Twenty.default_database
|
||||||
|
Twenty.establish_connection(path:)
|
||||||
|
super(options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -5,9 +5,16 @@ class Twenty::Command::Migrate < Twenty::Command
|
||||||
description: "Migrate the database"
|
description: "Migrate the database"
|
||||||
set_option "-t TARGET", "--target TARGET", "The target version", default: nil
|
set_option "-t TARGET", "--target TARGET", "The target version", default: nil
|
||||||
|
|
||||||
include CommonOptionMixin
|
##
|
||||||
prepend Twenty::Command::SQLiteMixin
|
# Options
|
||||||
prepend Twenty::Command::RescueMixin
|
include Option::Database
|
||||||
|
|
||||||
|
##
|
||||||
|
# Hooks
|
||||||
|
# Run order:
|
||||||
|
# Rescue -> SQLiteConn -> command.
|
||||||
|
prepend Hook::SQLiteConn
|
||||||
|
prepend Hook::Rescue
|
||||||
|
|
||||||
def run
|
def run
|
||||||
options = parse_options(argv)
|
options = parse_options(argv)
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Twenty::Command::MigrationMixin
|
|
||||||
def run_command(...)
|
|
||||||
if pending_migrations?
|
|
||||||
warn "There are pending migrations.\n" \
|
|
||||||
"Run \"twenty migrate\" first.\n"
|
|
||||||
exit(1)
|
|
||||||
else
|
|
||||||
super(...)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def pending_migrations?
|
|
||||||
Twenty::Migration.pending_migrations?
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,11 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Twenty::Command::SQLiteMixin
|
|
||||||
def run_command(options)
|
|
||||||
path = options.database || Twenty.default_database
|
|
||||||
Twenty.establish_connection(path:)
|
|
||||||
require "twenty/server/migration"
|
|
||||||
require "twenty/server/model"
|
|
||||||
super(options)
|
|
||||||
end
|
|
||||||
end
|
|
3
cli/lib/twenty/cli/command/option.rb
Normal file
3
cli/lib/twenty/cli/command/option.rb
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module Twenty::Command::Option
|
||||||
|
require_relative "option/database"
|
||||||
|
end
|
13
cli/lib/twenty/cli/command/option/database.rb
Normal file
13
cli/lib/twenty/cli/command/option/database.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module Twenty::Command::Option
|
||||||
|
module Database
|
||||||
|
def self.included(mod)
|
||||||
|
mod.module_eval do
|
||||||
|
set_option "-d PATH",
|
||||||
|
"--database PATH",
|
||||||
|
"The path to an alternate SQLite database",
|
||||||
|
as: String,
|
||||||
|
default: nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -16,10 +16,17 @@ class Twenty::Command::Up < Twenty::Command
|
||||||
"--unix PATH",
|
"--unix PATH",
|
||||||
"Listen on a UNIX socket"
|
"Listen on a UNIX socket"
|
||||||
|
|
||||||
include CommonOptionMixin
|
##
|
||||||
prepend Twenty::Command::MigrationMixin
|
# Option(s)
|
||||||
prepend Twenty::Command::SQLiteMixin
|
include Option::Database
|
||||||
prepend Twenty::Command::RescueMixin
|
|
||||||
|
##
|
||||||
|
# Hooks
|
||||||
|
# Run order:
|
||||||
|
# Rescue -> SQLiteConn -> RequireMigration -> command
|
||||||
|
prepend Hook::RequireMigration
|
||||||
|
prepend Hook::SQLiteConn
|
||||||
|
prepend Hook::Rescue
|
||||||
|
|
||||||
def run
|
def run
|
||||||
options = parse_options(argv)
|
options = parse_options(argv)
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
module Twenty
|
module Twenty
|
||||||
require "fileutils"
|
|
||||||
require "sequel"
|
|
||||||
|
|
||||||
extend Module.new {
|
extend Module.new {
|
||||||
|
require "tmpdir"
|
||||||
|
require "fileutils"
|
||||||
extend self
|
extend self
|
||||||
extend FileUtils
|
extend FileUtils
|
||||||
require "tmpdir"
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# @return [String]
|
# @return [String]
|
||||||
|
@ -63,6 +61,8 @@ module Twenty
|
||||||
@connection
|
@connection
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require "sequel"
|
||||||
|
require_relative "server/migration"
|
||||||
require_relative "server/graphql"
|
require_relative "server/graphql"
|
||||||
require_relative "server/rack"
|
require_relative "server/rack"
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue