Class: Textus::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/cli.rb,
lib/textus/cli/mv.rb,
lib/textus/cli/get.rb,
lib/textus/cli/put.rb,
lib/textus/cli/uid.rb,
lib/textus/cli/deps.rb,
lib/textus/cli/init.rb,
lib/textus/cli/list.rb,
lib/textus/cli/verb.rb,
lib/textus/cli/build.rb,
lib/textus/cli/group.rb,
lib/textus/cli/intro.rb,
lib/textus/cli/rdeps.rb,
lib/textus/cli/stale.rb,
lib/textus/cli/where.rb,
lib/textus/cli/accept.rb,
lib/textus/cli/action.rb,
lib/textus/cli/delete.rb,
lib/textus/cli/doctor.rb,
lib/textus/cli/schema.rb,
lib/textus/cli/migrate.rb,
lib/textus/cli/refresh.rb,
lib/textus/cli/key_group.rb,
lib/textus/cli/published.rb,
lib/textus/cli/extensions.rb,
lib/textus/cli/schema_diff.rb,
lib/textus/cli/schema_init.rb,
lib/textus/cli/migrate_keys.rb,
lib/textus/cli/schema_group.rb,
lib/textus/cli/schema_migrate.rb,
lib/textus/cli/extension_group.rb,
lib/textus/cli/deprecated_alias.rb

Defined Under Namespace

Modules: DeprecatedAliasMixin Classes: Accept, Action, Build, Delete, Deps, DoctorVerb, ExtensionGroup, Extensions, Get, Group, InitVerb, IntroVerb, KeyGroup, List, Migrate, MigrateKeysVerb, Mv, Published, Put, Rdeps, RefreshVerb, SchemaDiff, SchemaGroup, SchemaInit, SchemaMigrate, SchemaVerb, Stale, Uid, Verb, Where

Constant Summary collapse

VERBS =

verb name → Verb subclass. Adding a new verb is a one-line entry here plus a new file under lib/textus/cli/.

{
  "accept" => Accept,
  "action" => Action,
  "build" => Build,
  "delete" => Delete,
  "deps" => Deps,
  "doctor" => DoctorVerb,
  "extension" => ExtensionGroup,
  "extensions" => Extensions,
  "get" => Get,
  "init" => InitVerb,
  "intro" => IntroVerb,
  "key" => KeyGroup,
  "list" => List,
  "migrate" => Migrate,
  "migrate-keys" => MigrateKeysVerb,
  "mv" => Mv,
  "published" => Published,
  "put" => Put,
  "rdeps" => Rdeps,
  "refresh" => RefreshVerb,
  "schema" => SchemaGroup,
  "schema-diff" => SchemaDiff,
  "schema-init" => SchemaInit,
  "schema-migrate" => SchemaMigrate,
  "stale" => Stale,
  "uid" => Uid,
  "where" => Where,
}.freeze
DEPRECATED_ALIASES =

Flat aliases kept for backward-compat through 0.5; emit deprecation warnings.

%w[
  mv uid migrate-keys schema-init schema-diff schema-migrate extensions action
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stdin:, stdout:, stderr:, cwd:) ⇒ CLI

Returns a new instance of CLI.



47
48
49
50
51
52
53
# File 'lib/textus/cli.rb', line 47

def initialize(stdin:, stdout:, stderr:, cwd:)
  @stdin = stdin
  @stdout = stdout
  @stderr = stderr
  @cwd = cwd
  @root_arg = nil
end

Class Method Details

.run(argv, stdin: $stdin, stdout: $stdout, stderr: $stderr, cwd: Dir.pwd) ⇒ Object



43
44
45
# File 'lib/textus/cli.rb', line 43

def self.run(argv, stdin: $stdin, stdout: $stdout, stderr: $stderr, cwd: Dir.pwd)
  new(stdin: stdin, stdout: stdout, stderr: stderr, cwd: cwd).run(argv)
end

Instance Method Details

#run(argv) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/textus/cli.rb', line 55

def run(argv)
  OptionParser.new { |o| o.on("--root=PATH") { |v| @root_arg = v } }.order!(argv)
  verb = argv.shift
  raise UsageError.new("missing verb") if verb.nil?

  case verb
  when "--version", "-v" then @stdout.puts(VERSION)
                              0
  when "--help", "-h"    then print_help
                              0
  else
    klass = VERBS[verb] or raise UsageError.new("unknown verb: #{verb}")
    dispatch(klass, argv, deprecated_alias: DEPRECATED_ALIASES.include?(verb))
  end
rescue Textus::Error => e
  emit_error(e)
end