]> git.saurik.com Git - redis.git/blob - utils/generate-command-help.rb
4b2f25a15ba0999461d74580a377b39838b0c828
[redis.git] / utils / generate-command-help.rb
1 #!/usr/bin/env ruby
2
3 def argument arg
4 name = arg["name"].is_a?(Array) ? arg["name"].join(" ") : arg["name"]
5 name = arg["enum"].join "|" if "enum" == arg["type"]
6 name = arg["command"] + " " + name if arg["command"]
7 if arg["multiple"]
8 name = "#{name} [#{name} ...]"
9 end
10 if arg["optional"]
11 name = "[#{name}]"
12 end
13 name
14 end
15
16 def arguments command
17 return "-" unless command["arguments"]
18 command["arguments"].map do |arg|
19 argument arg
20 end.join " "
21 end
22
23 def commands
24 return @commands if @commands
25
26 require "net/http"
27 require "net/https"
28 require "json"
29 require "uri"
30
31 url = URI.parse "https://github.com/antirez/redis-doc/raw/master/commands.json"
32 client = Net::HTTP.new url.host, url.port
33 client.use_ssl = true
34 response = client.get url.path
35 if response.is_a?(Net::HTTPSuccess)
36 @commands = JSON.parse(response.body)
37 else
38 response.error!
39 end
40 end
41
42 def generate_commands
43 commands.to_a.sort do |x,y|
44 x[0] <=> y[0]
45 end.map do |key, command|
46 <<-SPEC
47 { "#{key}",
48 "#{arguments(command)}",
49 "#{command["summary"]}",
50 COMMAND_GROUP_#{command["group"].upcase},
51 "#{command["since"]}" }
52 SPEC
53 end.join(", ")
54 end
55
56 # Write to stdout
57 tmpl = File.read "./utils/help.h"
58 puts "\n// Auto-generated, do not edit.\n" + tmpl.sub("__COMMANDS__", generate_commands)
59