Class: ReadmeYard::StringTag

Inherits:
Object
  • Object
show all
Defined in:
lib/readme_yard/string_tag.rb

Overview

Embed a Ruby string as normal text

Constant Summary collapse

XZAMPLE =

Examples:

# @readme string
<<~STRING
  I heard you like self-documenting Ruby, so I wrote
  self-documenting Ruby for your self-documenting Ruby.
STRING

Class Method Summary collapse

Class Method Details

.format_tag(yard_object, _tag) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/readme_yard/string_tag.rb', line 21

def format_tag(yard_object, _tag)
  if yard_object.respond_to?(:value)
    normalize_yard_value(yard_object.value)
  else
    Logger.warn("Cannot parse `@readme string`: #{yard_object.class.name} lacks `value` method.")
  end
end

.format_yard_object(yard_object) ⇒ Object



29
30
31
# File 'lib/readme_yard/string_tag.rb', line 29

def format_yard_object(yard_object)
  format_tag(yard_object, nil)
end

.normalize_yard_value(string_value) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/readme_yard/string_tag.rb', line 33

def normalize_yard_value(string_value)
  return "" if string_value.nil? || string_value.empty?

  string_value = string_value.dup

  # Handle heredoc format
  return normalize_value_for_heredoc(string_value) if string_value.strip.start_with?("<<~")

  # Handle regular string format
  if string_value.start_with?('"')
    string_value.delete_prefix!('"')
    string_value.delete_suffix!('"')
  elsif string_value.start_with?("'")
    string_value.delete_prefix!("'")
    string_value.delete_suffix!("'")
  end

  # Replace different line continuation patterns
  # This handles patterns like: " \\\n" and \\\n"
  string_value.gsub!(/" \\\n"/, "")
  string_value.gsub!(/\\\n\s*"/, "")
  string_value.gsub!(/"\\\n"/, "")
  string_value.gsub!(/"\\\n/, "")

  # Unescape common escape sequences
  string_value.gsub!(/\\n/, "\n")
  string_value.gsub!(/\\t/, "\t")
  string_value.gsub!(/\\r/, "\r")
  string_value.gsub!(/\\"/, '"')
  string_value.gsub!(/\\'/, "'")
  string_value.gsub!(/\\\\/, "\\")
  string_value
end