Module: RSpecDoc::MarkdownUtil

Defined in:
lib/rspec-doc/markdown_util.rb

Class Method Summary collapse

Class Method Details

.code_block(type, body) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/rspec-doc/markdown_util.rb', line 38

def self.code_block(type, body)
  [
    "```#{type.to_s}",
    body,
    '```'
  ].join("\n")
end

.http_headers_table(kv) ⇒ Object



33
34
35
36
# File 'lib/rspec-doc/markdown_util.rb', line 33

def self.http_headers_table(kv)
  formatter = -> (k) { k.to_s.split('_').map(&:capitalize).join('-') }
  self.kv_table(kv, {key_formatter: formatter})
end

.json_block(h) ⇒ Object



46
47
48
49
# File 'lib/rspec-doc/markdown_util.rb', line 46

def self.json_block(h)
  h = JSON.parse(h) if h.is_a? String
  self.code_block(:json, JSON.pretty_generate(h))
end

.kv_table(kv, params = {}) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rspec-doc/markdown_util.rb', line 14

def self.kv_table(kv, params = {})
  return '' unless kv

  kv = JSON.parse(kv) if kv.is_a? String
  items = []
  kv.each do |key, value|
    next unless value

    value = value.map { |k, v| "#{k}: #{v}" }.join("\n") if value.is_a? Hash
    value = value.join("\n") if value.is_a? Enumerable
    key = params[:key_formatter].call(key) if params[:key_formatter].is_a? Proc
    items << [key, value]
  end

  return '' if items.size == 0 

  self.table(['Key', 'Value'], items)
end

.table(header, body) ⇒ Object



4
5
6
7
8
9
10
11
12
# File 'lib/rspec-doc/markdown_util.rb', line 4

def self.table(header, body)
  return '' unless header.is_a?(Enumerable) and body.is_a?(Enumerable)

  header_line = "| #{header.join(' | ')} |"
  direction_line = "| #{':--- |' * header.size}"
  [header_line, direction_line]
    .concat(body.map { |item| "| #{item.join(' | ')} |" })
    .join("\n")
end