Class: OKF::CLI::Registry

Inherits:
Command
  • Object
show all
Defined in:
lib/okf/cli/registry.rb

Overview

The registry umbrella, split by what each verb keys on. set/del/list act on entries — set keys on the bundle's path, so --as means one thing ("the slug this entry has") whether it adds or renames. default/rename act on slugs, the names actually to hand once a bundle is registered. Every positional stays unambiguous, and config is left free for real settings.

Constant Summary collapse

SUBCOMMANDS =

The registry umbrella's subcommands — the dispatch, and the words a flag-first invocation is checked against.

%w[set del list default rename].freeze

Constants inherited from Command

Command::DUCK_TYPE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Command

hidden?, #initialize

Constructor Details

This class inherits a constructor from OKF::CLI::Command

Class Method Details

.groupObject



19
20
21
# File 'lib/okf/cli/registry.rb', line 19

def self.group
  :registry
end

.help_rowsObject



23
24
25
26
27
28
29
30
31
# File 'lib/okf/cli/registry.rb', line 23

def self.help_rows
  [
    [ "registry  list [--json]", "list registered bundles (* marks the default)" ],
    [ "registry  set <dir|@slug> [--as SLUG] [--default]", "add or update a bundle (a bare `server` serves them)" ],
    [ "registry  del <dir|@slug>", "remove a bundle from the registry" ],
    [ "registry  default <@slug>", "move a bundle to the front (the default)" ],
    [ "registry  rename <@slug> <new>", "rename a registered bundle (<new> is a new name, not a ref)" ]
  ]
end

.idObject



15
16
17
# File 'lib/okf/cli/registry.rb', line 15

def self.id
  :registry
end

Instance Method Details

#call(argv) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/okf/cli/registry.rb', line 33

def call(argv)
  require "okf/registry"

  sub = argv.first
  case sub
  when "set" then registry_set(argv.drop(1))
  when "del" then registry_del(argv.drop(1))
  when "list" then registry_list(argv.drop(1))
  when "default" then registry_default(argv.drop(1))
  when "rename" then registry_rename(argv.drop(1))
  else
    # A bare word that isn't a known subcommand is a typo (`registry remove x`
    # must not silently render the list and read as success).
    return usage_error("unknown registry subcommand '#{sub}' (expected: #{SUBCOMMANDS.join(", ")})") if sub && !sub.start_with?("-")

    # Same rule for a subcommand hiding behind a flag: `registry --json set
    # dir` would otherwise list an empty registry and exit 0, having written
    # nothing the user asked for. It cannot just be dispatched from wherever
    # it turns up — the word may be a flag's value (`registry --as set <dir>`
    # asks for the slug "set"), and a grammar where that reading depends on
    # which flag precedes it is a trapdoor. So the subcommand must lead, and
    # the error says which one was found rather than guessing at the intent.
    stray = argv.find { |arg| SUBCOMMANDS.include?(arg) }
    return usage_error("put the subcommand first: okf registry #{stray} … (flags follow it)") if stray

    registry_list(argv)
  end
end