56 lines
1.3 KiB
Ruby
56 lines
1.3 KiB
Ruby
|
#!/usr/bin/env ruby
|
||
|
|
||
|
require 'net/http'
|
||
|
require 'net/https'
|
||
|
require 'json'
|
||
|
require 'uri'
|
||
|
|
||
|
dest = ARGV[0]
|
||
|
tmpl = File.read './utils/help.h'
|
||
|
|
||
|
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
|
||
|
res = client.get url.path
|
||
|
|
||
|
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 += arg['optional'] ? '*' : '+'
|
||
|
elsif arg['optional']
|
||
|
name = "(#{name})?"
|
||
|
end
|
||
|
name
|
||
|
end
|
||
|
|
||
|
def arguments command
|
||
|
return '-' unless command['arguments']
|
||
|
command['arguments'].map do |arg|
|
||
|
argument arg
|
||
|
end.join ' '
|
||
|
end
|
||
|
|
||
|
case res
|
||
|
when Net::HTTPSuccess
|
||
|
first = true
|
||
|
commands = JSON.parse(res.body)
|
||
|
c = commands.map do |key, command|
|
||
|
buf = if first
|
||
|
first = false
|
||
|
' '
|
||
|
else
|
||
|
"\n ,"
|
||
|
end
|
||
|
buf += " { \"#{key}\"\n" +
|
||
|
" , \"#{arguments(command)}\"\n" +
|
||
|
" , \"#{command['summary']}\"\n" +
|
||
|
" , COMMAND_GROUP_#{command['group'].upcase}\n" +
|
||
|
" , \"#{command['since']}\" }"
|
||
|
end.join("\n")
|
||
|
puts "\n// Auto-generated, do not edit.\n" + tmpl.sub('__COMMANDS__', c)
|
||
|
else
|
||
|
res.error!
|
||
|
end
|