Module: Ariadne::Yard::DocsHelper

Extended by:
DocsHelper
Included in:
Backend, DocsHelper, Registry, RegistryEntry, StructureDocsHelper
Defined in:
lib/ariadne/yard/docs_helper.rb

Overview

Helper methods to use for yard documentation

Instance Method Summary collapse

Instance Method Details

#component_and_short_name(component) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/ariadne/yard/docs_helper.rb', line 61

def component_and_short_name(component)
  name = component.name.sub("::Preview", "::Component")
  m = name.match(/Ariadne::(?<name>.*)::Component/)
  if m.nil? # e.g. `Ariadne::Behaviors::Caption`; three paths instad of four
    m = name.match(/Ariadne::(?<name>.*)/)
  end
  [name, m[:name]]
end


35
36
37
# File 'lib/ariadne/yard/docs_helper.rb', line 35

def link_to_accessibility
  "[Accessibility](#accessibility)"
end


47
48
49
50
51
# File 'lib/ariadne/yard/docs_helper.rb', line 47

def link_to_component(component)
  class_name, short_name = component_and_short_name(component)

  "[#{class_name}](/components/#{short_name.downcase})"
end


57
58
59
# File 'lib/ariadne/yard/docs_helper.rb', line 57

def link_to_heading_practices
  "[Learn more about best heading practices (WAI Headings)](https://www.w3.org/WAI/tutorials/page-structure/headings/)"
end


53
54
55
# File 'lib/ariadne/yard/docs_helper.rb', line 53

def link_to_heroicons
  "[Heroicon](https://heroicons.com/)"
end


39
40
41
# File 'lib/ariadne/yard/docs_helper.rb', line 39

def link_to_html_attrs_docs
  "[HTML attributes](/html-attrs)"
end


43
44
45
# File 'lib/ariadne/yard/docs_helper.rb', line 43

def link_to_typography_docs
  "[Typography](/system-arguments#typography)"
end

#one_of(enumerable, lower: false, sort: false) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ariadne/yard/docs_helper.rb', line 9

def one_of(enumerable, lower: false, sort: false)
  # Sort the array if requested
  if sort && !enumerable.nil?
    enumerable = enumerable.sort do |a, b|
      a.instance_of?(b.class) ? a <=> b : a.class.to_s <=> b.class.to_s
    end
  end

  values =
    case enumerable
    when Hash
      enumerable.map do |key, value|
        "#{pretty_value(key)} (#{pretty_value(value)})"
      end
    else
      enumerable.map do |key|
        pretty_value(key)
      end
    end

  prefix = "One of"
  prefix = prefix.downcase if lower

  "#{prefix} #{values.to_sentence(two_words_connector: " or ", last_word_connector: ", or ")}."
end

#pretty_default_value(tag, component) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/ariadne/yard/docs_helper.rb', line 70

def pretty_default_value(tag, component)
  default = tag.respond_to?(:defaults) ? tag.defaults : nil

  # For slots; eg.,
  # `renders_one :title, lambda { |type: :subheading, **options|`;
  # `type` has a default value of `:subheading`.
  if default.nil?
    results = /#{tag.name}:\s*([^,\s]+)/.match(tag.object.source)
    default = results[1] if results
  end

  return "" unless default

  constant_name = "#{component.name}::#{default}"
  constant_value = default.safe_constantize || constant_name.safe_constantize

  return pretty_value(default) if constant_value.nil?

  pretty_value(constant_value)
end

#pretty_value(val) ⇒ Object



91
92
93
94
95
96
97
98
99
100
# File 'lib/ariadne/yard/docs_helper.rb', line 91

def pretty_value(val)
  case val
  when nil
    "`nil`"
  when Symbol
    "`:#{val}`"
  else
    "`#{val}`"
  end
end