class Magellan::Cli::ReferenceGenerator
Public Class Methods
new(options = {})
click to toggle source
# File lib/magellan/cli/reference_generator.rb, line 9 def initialize(options = {}) @dest = options[:dest] || "doc" @subdir = options[:subdir] || "." @io = $stdout end
Public Instance Methods
change_global_var_temporarily(*tuples, &block)
click to toggle source
# File lib/magellan/cli/reference_generator.rb, line 33 def change_global_var_temporarily(*tuples, &block) if tuples.empty? block.call if block else gvar_name, value = *tuples.shift backup = eval(gvar_name) begin eval("#{gvar_name} = value") change_global_var_temporarily(*tuples, &block) ensure eval("#{gvar_name} = backup") end end end
process(klass, filename, name = nil)
click to toggle source
# File lib/magellan/cli/reference_generator.rb, line 48 def process(klass, filename, name = nil) if cmd = klass.all_commands["help"] cmd.description = I18n.t(:help, scope: [:base, :cmd]) end rel_path = File.join(@subdir, filename) path = File.expand_path(rel_path, @dest) FileUtils.mkdir_p(File.dirname(path)) instance = klass.new open(path, "w") do |f| f.puts "---" f.puts "layout: index" version = Magellan::Cli::VERSION.split(/\./)[0,2].join(".") f.puts "title: " << [name, "magellan-cli-#{version} (#{I18n.locale})", "Reference"].compact.join(" | ") lang_links = I18n.available_locales.map do |locale| (locale == I18n.locale) ? locale.to_s : begin path = rel_path.sub(/\/#{I18n.locale}\//, "/#{locale}/").sub(/\.md\z/, ".html") %!<a href="/#{path}">#{locale}</a>! end end f.puts %!breadcrumb: <a href="/">Top</a> / <a href="/reference">Reference</a> / <a href="/reference/magellan-cli/#{I18n.locale}">magellan-cli-#{version}</a> / #{name} #{lang_links.join(' ')}! f.puts "sidemenu: sidemenu/reference/magellan-cli/sidemenu-#{I18n.locale}" f.puts "---" f.puts f.puts "## "<< I18n.t(:commands, scope: :reference) f.puts klass.sorted_commands.each do |cmd| rel_path = Magellan::Cli::Resources::MAPPING.values.include?(cmd.name) ? "./resources/#{cmd.name}.html" : Magellan::Cli::Messaging::MAPPING.values.include?(cmd.name) ? "./messaging/#{cmd.name}.html" : cmd.name == "cloudsql_instance" ? "./#{cmd.name}.html" : "##{cmd.name}" f.puts "- [%s](%s)" % [Thor.send(:banner, cmd, false, false), rel_path] end f.puts f.puts "## " << I18n.t(:global_options, scope: :reference) f.puts change_global_var_temporarily(["$stdout", f], ["$stderr", f]) do f.puts "```text" klass.send(:print_options, @shell, klass.class_options.values) f.puts "```" f.puts end f.puts f.puts "## " << I18n.t(:details, scope: :reference) klass.sorted_commands.each do |cmd| next if Magellan::Cli::Resources::MAPPING.values.include?(cmd.name) next if Magellan::Cli::Messaging::MAPPING.values.include?(cmd.name) next if cmd.name == "cloudsql_instance" f.puts "### <a name=\"#{cmd.name}\"></a>#{cmd.name}" f.puts f.puts "```text" f.puts Thor.send(:banner, cmd) f.puts "```" f.puts unless cmd.options.empty? change_global_var_temporarily(["$stdout", f], ["$stderr", f]) do f.puts "```text" klass.send(:print_options, @shell, cmd.options.values) f.puts "```" f.puts end end if cmd.long_description f.puts cmd.long_description else f.puts cmd.description end f.puts end end end
run()
click to toggle source
# File lib/magellan/cli/reference_generator.rb, line 15 def run @shell = Thor::Shell::Basic.new change_global_var_temporarily(["$PROGRAM_NAME", "magellan-cli"]) do k = Magellan::Cli::Command process(k, "index.md") Magellan::Cli::Resources::MAPPING.each do |class_name, name| klass = Magellan::Cli::Resources.const_get(class_name) process(klass, "resources/#{name}.md", name) end name = "cloudsql_instance" process(Magellan::Cli::CloudsqlInstance, "#{name}.md", name) Magellan::Cli::Messaging::MAPPING.each do |class_name, name| klass = Magellan::Cli::Messaging.const_get(class_name) process(klass, "messaging/#{name}.md", name) end end end