Class: Coradoc::Markdown::Serializer::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/markdown/serializer/config.rb

Overview

Immutable serialization configuration.

Created via ‘Serializer.build` with a flavor and overrides. Once built, the Config is frozen and resolves capability strategies (admonitions, autolinks, comments, etc.) by combining flavor defaults with caller overrides.

SSOT: the 5 spec-mandated options live here and nowhere else. Strategy classes read their mode via ‘config.strategy_for(:capability)`.

Constant Summary collapse

ATTRIBUTES =
%i[
  markdown_flavor
  admonition_style
  definition_list_nested
  suppress_comments
  autolinks
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(flavor: :gfm, **overrides) ⇒ Config

Returns a new instance of Config.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/coradoc/markdown/serializer/config.rb', line 28

def initialize(flavor: :gfm, **overrides)
  unless Flavor.known?(flavor)
    raise ArgumentError, "Unknown markdown_flavor: #{flavor.inspect}. " \
                         "Known: #{Flavor.names.inspect}"
  end

  resolved = Flavor.resolve(flavor).merge(symbolize(overrides))
  validate_options!(resolved)

  @markdown_flavor = resolved.fetch(:markdown_flavor)
  @admonition_style = resolved.fetch(:admonition_style)
  @definition_list_nested = resolved.fetch(:definition_list_nested)
  @suppress_comments = resolved.fetch(:suppress_comments)
  @autolinks = resolved.fetch(:autolinks)

  freeze
end

Instance Method Details

#to_hObject



46
47
48
# File 'lib/coradoc/markdown/serializer/config.rb', line 46

def to_h
  ATTRIBUTES.to_h { |k| [k, public_send(k)] }
end

#with(overrides) ⇒ Object



50
51
52
# File 'lib/coradoc/markdown/serializer/config.rb', line 50

def with(overrides)
  self.class.new(**to_h.merge(symbolize(overrides)))
end