summaryrefslogtreecommitdiff
path: root/utils/generate-command-help.rb
diff options
context:
space:
mode:
Diffstat (limited to 'utils/generate-command-help.rb')
-rwxr-xr-xutils/generate-command-help.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/utils/generate-command-help.rb b/utils/generate-command-help.rb
new file mode 100755
index 000000000..250a2159e
--- /dev/null
+++ b/utils/generate-command-help.rb
@@ -0,0 +1,56 @@
+#!/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 \ No newline at end of file