Class: BBK::Utils::Cli::Docs::Builder
- Inherits:
-
Object
- Object
- BBK::Utils::Cli::Docs::Builder
- Defined in:
- lib/bbk/utils/cli/docs/builder.rb
Overview
Класс-строитель документации по категориям конфигурации
Группирует конфигурационные параметры по категориям, обеспечивает сортировку и генерацию документации в различных форматах
Instance Method Summary collapse
-
#as_json(*_args, **_kwargs) ⇒ Hash
Преобразует документацию в JSON-хеш.
-
#initialize(bbk, config) ⇒ Builder
constructor
Инициализирует строитель документации.
-
#run ⇒ self
Выполняет разбор конфигурации по категориям.
-
#to_json(*args, **kwargs) ⇒ String
Преобразует документацию в JSON-строку.
-
#to_markdown ⇒ String
Генерирует документацию в формате Markdown.
Constructor Details
#initialize(bbk, config) ⇒ Builder
Инициализирует строитель документации
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/bbk/utils/cli/docs/builder.rb', line 14 def initialize(bbk, config) @bbk = bbk @config = config @categories = config[:categories].each_with_object({}) do |(name, c), cats| cats[name.to_s] = Category.new(id: name.to_s, **c) end @default = Category.new(id: 'other', name: 'Other') @categories[@default.id] = @default end |
Instance Method Details
#as_json(*_args, **_kwargs) ⇒ Hash
Преобразует документацию в JSON-хеш
46 47 48 49 50 |
# File 'lib/bbk/utils/cli/docs/builder.rb', line 46 def as_json(*_args, **_kwargs) @sorted.each_with_object({}) do |category, result| result[category.id] = category.as_json end end |
#run ⇒ self
Выполняет разбор конфигурации по категориям
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/bbk/utils/cli/docs/builder.rb', line 29 def run @bbk.each do |(env_name, cfg)| category = @categories[cfg[:category]] category ||= @categories.values.find { |c| c.match?(env_name) } || @default category.add(cfg) end @sorted = @categories.values.sort_by { |category| [category.order, category.id.to_s] } self end |
#to_json(*args, **kwargs) ⇒ String
Преобразует документацию в JSON-строку
57 58 59 |
# File 'lib/bbk/utils/cli/docs/builder.rb', line 57 def to_json(*args, **kwargs) as_json.to_json(*args, **kwargs) end |
#to_markdown ⇒ String
Генерирует документацию в формате Markdown
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/bbk/utils/cli/docs/builder.rb', line 64 def to_markdown markdown_opts = { columns: { env: 'Название', _class: 'Тип', desc: 'Описание', default: 'Умолчание' }, alignments: { 1 => :center, 3 => :center }, # :left, :right, :center для каждой колонки wrappers: { 1 => '`', 3 => '`' }, # символ или строка для обрамления значений колонки, например: "`", "```", "**" title_level: 4, # уровень заголовка от 1 до 6 warning: { column_index: 2, # mode: :footnote # :footnote или :inline mode: :inline # :footnote или :inline } } generator = Docs::Markdown.new(markdown_opts) @sorted.map do |category| category.cfgs.any? ? generator.generate(category) : '' end.join("\n") end |