Class: BBK::Utils::Cli::Docs
- Inherits:
-
Object
- Object
- BBK::Utils::Cli::Docs
- Defined in:
- lib/bbk/utils/cli/docs.rb
Overview
Класс для генерации документации по конфигурации BBK
Обеспечивает парсинг аргументов командной строки, загрузку конфигурации и генерацию документации в форматах JSON и Markdown
Defined Under Namespace
Instance Method Summary collapse
-
#extract_bbk_config ⇒ Hash
Извлекает конфигурацию BBK и преобразует её в удобный формат.
-
#initialize(argv) ⇒ Docs
constructor
Инициализирует объект генератора документации.
-
#load_configuration(*files) ⇒ Hash
Загружает и объединяет конфигурации из нескольких файлов.
-
#parse!(argv) ⇒ Hash
Парсит аргументы командной строки.
-
#run(argv = @argv) ⇒ void
Основной метод запуска генерации документации.
Constructor Details
#initialize(argv) ⇒ Docs
Инициализирует объект генератора документации
16 17 18 |
# File 'lib/bbk/utils/cli/docs.rb', line 16 def initialize(argv) @argv = argv end |
Instance Method Details
#extract_bbk_config ⇒ Hash
Извлекает конфигурацию BBK и преобразует её в удобный формат
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/bbk/utils/cli/docs.rb', line 117 def extract_bbk_config bbk_cfg = BBK::Utils::Config.instance.as_json.deep_dup bbk_cfg = bbk_cfg[BBK::Utils::Config.instance.name] unless BBK::Utils::Config.instance.name.nil? BBK::Utils::Config.instance.send(:store_with_subconfigs).each do |k, v| bbk_cfg[k][:default] = v[:default].original if v[:default]&.class&.to_s == 'Fugit::Duration' bbk_cfg[k][:_class] = v[:default].class.to_s unless v[:default].nil? end bbk_cfg.deep_symbolize_keys end |
#load_configuration(*files) ⇒ Hash
Загружает и объединяет конфигурации из нескольких файлов
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/bbk/utils/cli/docs.rb', line 90 def load_configuration(*files) files.each_with_object({}) do |file, config| loaded = YAML.load_file(file).deep_symbolize_keys! config.deep_merge!(loaded) do |key, oldv, newv| result = newv if oldv.is_a?(Hash) || newv.is_a?(Hash) result = (oldv || {}).deep_merge(newv || {}) elsif oldv.is_a?(Array) || newv.is_a?(Array) result = if key.to_s == 'patterns' || key.to_s == 'envs' ([oldv].flatten + [newv].flatten).compact.map(&:to_s).map(&:strip) else (newv || []) end else newv end result end end end |
#parse!(argv) ⇒ Hash
Парсит аргументы командной строки
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/bbk/utils/cli/docs.rb', line 54 def parse!(argv) = { config: './.bbkdocs.yml', output: './bbkdocs.md', categories: './bbkdocs.json' } OptionParser.new do |opts| opts. = 'Usage: bundle exec bin/bbkdocs [options]' opts.on('-c', '--config CONFIG', "Path to config file (default: #{[:config]})") do |path| [:config] = File.absolute_path(path.to_s.strip) end opts.on('-o', '--output OUTPUT', "Path to output file (default: #{[:output]})") do |path| [:output] = File.absolute_path(path.to_s.strip) end opts.on('-g', '--categories CATEGORIES', "Path to categories output file (default: #{[:categories]})") do |path| [:categories] = File.absolute_path(path.to_s.strip) end opts.on('-h', '--help', 'Prints this help') do puts opts exit end end.parse!(argv) end |
#run(argv = @argv) ⇒ void
This method returns an undefined value.
Основной метод запуска генерации документации
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/bbk/utils/cli/docs.rb', line 24 def run(argv = @argv) = parse!(argv) bbk = extract_bbk_config config = load_configuration("#{__dir__}/bbkdocs.yml", [:config]) @builder = Builder.new(bbk, config).tap do |b| b.run end FileUtils.mkdir_p File.dirname([:categories]) File.open([:categories], 'w') do |file| file << JSON.pretty_generate(@builder.as_json) puts "Documentation JSON saved to: #{[:categories]}" end FileUtils.mkdir_p File.dirname([:output]) File.open([:output], 'w') do |file| file << @builder.to_markdown puts "Documentation MArkdown saved to: #{[:output]}" end end |