valkey/utils/generate-command-help.rb

60 lines
1.3 KiB
Ruby
Executable File

#!/usr/bin/env ruby
def argument arg
name = arg["name"].is_a?(Array) ? arg["name"].join(" ") : arg["name"]
name = arg["enum"].join "|" if "enum" == arg["type"]
name = arg["command"] + " " + name if arg["command"]
if arg["multiple"]
name = "#{name} [#{name} ...]"
end
if arg["optional"]
name = "[#{name}]"
end
name
end
def arguments command
return "-" unless command["arguments"]
command["arguments"].map do |arg|
argument arg
end.join " "
end
def commands
return @commands if @commands
require "net/http"
require "net/https"
require "json"
require "uri"
url = URI.parse "https://github.com/antirez/redis-doc/raw/master/commands.json"
client = Net::HTTP.new url.host, url.port
client.use_ssl = true
response = client.get url.path
if response.is_a?(Net::HTTPSuccess)
@commands = JSON.parse(response.body)
else
response.error!
end
end
def generate_commands
commands.to_a.sort do |x,y|
x[0] <=> y[0]
end.map do |key, command|
<<-SPEC
{ "#{key}",
"#{arguments(command)}",
"#{command["summary"]}",
COMMAND_GROUP_#{command["group"].upcase},
"#{command["since"]}" }
SPEC
end.join(", ")
end
# Write to stdout
tmpl = File.read "./utils/help.h"
puts "\n// Auto-generated, do not edit.\n" + tmpl.sub("__COMMANDS__", generate_commands)