Class: Vangrail::CLI

Inherits:
Object
  • Object
show all
Defined in:
lib/vangrail/cli.rb

Overview

JSON on stdin, JSON on stdout. The HTTP server is the same envelope.

Constant Summary collapse

USAGE =
<<~TEXT
  vangrail #{VERSION}

  vangrail check-input [--text STRING]
  vangrail check-output [--text STRING]
  vangrail check-context [--text STRING]
  vangrail screen
  vangrail assess [--text STRING] --prior FLOAT [--side input|context|output]
  vangrail serve [--bind HOST] [--port N]
TEXT

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv, stdin:, stdout:, stderr:, env:) ⇒ CLI

Returns a new instance of CLI.



29
30
31
32
33
34
35
# File 'lib/vangrail/cli.rb', line 29

def initialize(argv, stdin:, stdout:, stderr:, env:)
  @argv = argv.dup
  @stdin = stdin
  @stdout = stdout
  @stderr = stderr
  @env = env
end

Class Method Details

.run(argv, stdin: $stdin, stdout: $stdout, stderr: $stderr, env: ENV) ⇒ Object



25
26
27
# File 'lib/vangrail/cli.rb', line 25

def self.run(argv, stdin: $stdin, stdout: $stdout, stderr: $stderr, env: ENV)
  new(argv, stdin: stdin, stdout: stdout, stderr: stderr, env: env).run
end

Instance Method Details

#runObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/vangrail/cli.rb', line 37

def run
  command = @argv.shift
  return usage(0) if command.nil? || %w[-h --help help].include?(command)
  return version if %w[-v --version version].include?(command)
  return serve if command == 'serve'

  name = command.to_s.tr('-', '_')
  return fail_usage("unknown command #{command}") unless Front::COMMANDS.include?(name)

  payload = front.dispatch(name, payload_for)
  write(payload)
  exit_status(payload)
rescue ArgumentError, Error => e
  @stderr.puts(e.message)
  1
rescue JSON::ParserError => e
  @stderr.puts("invalid JSON: #{e.message}")
  1
end