Class: BBK::Utils::Cli::Docs::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/bbk/utils/cli/docs/builder.rb

Overview

Класс-строитель документации по категориям конфигурации

Группирует конфигурационные параметры по категориям, обеспечивает сортировку и генерацию документации в различных форматах

Instance Method Summary collapse

Constructor Details

#initialize(bbk, config) ⇒ Builder

Инициализирует строитель документации

Parameters:

  • bbk (Hash)

    конфигурация BBK

  • config (Hash)

    конфигурация документирования

Options Hash (config):

  • :categories (Hash)

    настройки категорий



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-хеш

Parameters:

  • _args (Array)

    игнорируемые аргументы

  • _kwargs (Hash)

    игнорируемые именованные аргументы

Returns:

  • (Hash)

    хеш со структурой документации по категориям



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

#runself

Выполняет разбор конфигурации по категориям

Returns:

  • (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-строку

Parameters:

  • args (Array)

    аргументы для JSON-генерации

  • kwargs (Hash)

    именованные аргументы для JSON-генерации

Returns:

  • (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_markdownString

Генерирует документацию в формате Markdown

Returns:

  • (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