docrb-html 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46ab65a6bab83355b8532920f7dfa26d9f9e05d99fbe6cdbe1677a9b75695861
4
- data.tar.gz: e69e29e51b3e4bc491e058259be007910032607cce30e0e7223a4a1adad23c01
3
+ metadata.gz: 2d537de0bf7498e0737d3e5fa22fdce806a5fc60cd43db277654bf6d29e5f166
4
+ data.tar.gz: 8ad531ba61d72206428b7c51146407e64b67e31d52831e46871f0511c868aab4
5
5
  SHA512:
6
- metadata.gz: 935815ac11006ab359e5c489f57266d8de17691bc9035a45cd7564e8b3142e927313cef65e41401e1e713422ad77d3c3f7653c9cf0d9167eb8f3cb77c285ff05
7
- data.tar.gz: 9e57cd852acb2f6bc459206e81088088bd85be92600a973e911c6cddb0e266c384e08b978cb53c7e0b364778358ec515cf21c7d86ede85b91a501c38b5e11103
6
+ metadata.gz: 64bed70222a7dca33da8f1d63f744da880bd8a1cd5e94f2a32816f77453b9d0d99c4529104a106b900f081591e4fb1ed2b897279b7bbdc53c0f5d0e28a0ecafc
7
+ data.tar.gz: 2f4c229846d54b5447283693eadb795d1e2c460959bafe6ebe8614d248b8b0b92ac8d6a923b159ff6e7d3b87f5e5e842aed788cd30aa402768e1a65e57ae6194
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- docrb-html (0.3.0)
4
+ docrb-html (0.3.2)
5
5
  nokogiri (~> 1.14)
6
6
  redcarpet (~> 3.6)
7
7
  rouge (~> 4.1)
@@ -0,0 +1,30 @@
1
+ .html div.class-path-reference-base {
2
+ @include mono;
3
+ display: flex;
4
+ flex-wrap: wrap;
5
+
6
+ span {
7
+ white-space: unset;
8
+
9
+ a {
10
+ @include mono;
11
+ }
12
+
13
+ &.segment {
14
+ &:not(:last-child) {
15
+ ::after {
16
+ content: '::'
17
+ }
18
+ }
19
+
20
+
21
+ &.class a {
22
+ color: #FFAB42;
23
+ }
24
+
25
+ &.module a {
26
+ color: #579AD1;
27
+ }
28
+ }
29
+ }
30
+ }
data/assets/markdown.scss CHANGED
@@ -38,4 +38,8 @@ div.markdown-base {
38
38
  code, pre {
39
39
  @include mono($size: 15);
40
40
  }
41
+
42
+ .faded {
43
+ @include faded;
44
+ }
41
45
  }
@@ -11,6 +11,11 @@ div.reference-base {
11
11
  &.module { color: #579AD1; border-color: #579AD1; }
12
12
  }
13
13
 
14
+ .broken {
15
+ @include mono;
16
+ cursor: initial;
17
+ }
18
+
14
19
  .unresolved {
15
20
  border: 1px dotted #D8D8D8;
16
21
  border-radius: 10px 3px 3px 10px;
data/assets/style.scss CHANGED
@@ -44,3 +44,4 @@ body {
44
44
  @import './constant_display';
45
45
  @import './field_block';
46
46
  @import './svg';
47
+ @import './class_path_reference';
data/lib/docrb-html.rb CHANGED
@@ -29,6 +29,8 @@ require_relative "renderer/metadata"
29
29
  require_relative "renderer/entities"
30
30
 
31
31
  class Renderer
32
+ attr_reader :spec
33
+
32
34
  def now = Time.now.strftime("%A, %-d %b %Y %H:%M:%S %Z")
33
35
 
34
36
  def output_path(*args) = File.join(@output, *args.map(&:to_s))
@@ -55,6 +57,11 @@ class Renderer
55
57
  .map { outline(_1) }
56
58
  end
57
59
 
60
+ def make_path(*args)
61
+ root = spec.fetch(:base_path, "/")
62
+ File.join(root, *args.flatten.map(&:to_s))
63
+ end
64
+
58
65
  def outline(object, level = 0)
59
66
  {
60
67
  level:,
@@ -73,16 +80,21 @@ class Renderer
73
80
  links: Metadata.project_links(@spec)
74
81
  )
75
82
 
76
- index = Page.new(title: "#{@spec[:name]} - Docrb") do
77
- readme = Component::Markdown.new(source: Markdown.render(@spec[:readme]))
83
+ readme = if @spec[:readme]
84
+ Component::Markdown.new(source: Markdown.render(@spec[:readme]))
85
+ else
86
+ Component::Markdown.new(source: "<div class=\"html\">" \
87
+ "<div class=\"faded\">This project does not contain a README.</div></div>")
88
+ end
78
89
 
90
+ index = Page.new(title: "#{@spec[:name]} - Docrb") do
79
91
  [
80
92
  project_header,
81
93
  Component::TabBar.new(
82
94
  selected_index: 0,
83
95
  items: [
84
- { name: "Readme", href: "/" },
85
- { name: "Components", href: "/components.html" }
96
+ { name: "Readme", href: make_path("/") },
97
+ { name: "Components", href: make_path("/components.html") }
86
98
  ]
87
99
  ),
88
100
  readme,
@@ -96,8 +108,8 @@ class Renderer
96
108
  Component::TabBar.new(
97
109
  selected_index: 1,
98
110
  items: [
99
- { name: "Readme", href: "/" },
100
- { name: "Components", href: "/components.html" }
111
+ { name: "Readme", href: make_path("/") },
112
+ { name: "Components", href: make_path("/components.html") }
101
113
  ]
102
114
  ),
103
115
  Component::ComponentList.new(list: make_outline),
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Renderer
4
+ class Component
5
+ class ClassPathReference < Component
6
+ prop :doc
7
+ end
8
+ end
9
+ end
@@ -12,7 +12,7 @@ class Renderer
12
12
  :page_components
13
13
 
14
14
  def prepare
15
- @has_class_docs = (item.doc && !item.doc.empty?) || false
15
+ @has_class_docs = (item.doc && !item.doc.empty? && !item.doc[:value].empty?) || false
16
16
  @instance_methods = item.all_instance_methods
17
17
  @class_methods = item.all_class_methods
18
18
  @instance_attributes = item.kind == :class ? item.all_instance_attributes : []
@@ -9,7 +9,7 @@ class Renderer
9
9
  case @object
10
10
  when Docrb::Parser::Reference
11
11
  @unresolved = !@object.fulfilled?
12
- @path = [@object.path.last]
12
+ @path = @object.path
13
13
  return if @unresolved
14
14
 
15
15
  @object = @object.dereference!
@@ -90,19 +90,20 @@ class Renderer
90
90
  parent ||= obj.parent
91
91
 
92
92
  case (v = parent.source_of(obj))
93
- when :inherited, :included, :extended then v.to_s
93
+ when :inherited, :included, :extended then "inherited"
94
94
  when :self then ("override" if obj.try(:overriding))
95
95
  else raise "WTF? Source of #{obj} is #{v.inspect}!"
96
96
  end
97
97
  end
98
98
 
99
+ def make_path(*) = self.class.current_renderer.make_path(*)
100
+
99
101
  def path_of(object, root: true)
100
102
  return [] if object.nil? && !root
101
103
  return [object.name] + path_of(object.parent, root: false) unless root
102
104
 
103
105
  path = ["#{object.name}.html"] + path_of(object.parent, root: false)
104
- path << ""
105
- path.reverse.join("/")
106
+ make_path(*path.reverse)
106
107
  end
107
108
 
108
109
  def link_for(object)
data/lib/renderer/page.rb CHANGED
@@ -8,9 +8,17 @@ class Renderer
8
8
  @title = "#{title} - Docrb"
9
9
  @body = body || -> { "" }
10
10
  @level = level
11
+ @make_path = -> (path) { Helpers.current_renderer.make_path(path) }
11
12
  end
12
13
 
13
- def render = PAGE_BASE.render(Object.new, title: @title, level: @level, body: @body.call)
14
+ def render
15
+ PAGE_BASE.render(Object.new,
16
+ make_path: @make_path,
17
+ title: @title,
18
+ level: @level,
19
+ body: @body.call
20
+ )
21
+ end
14
22
 
15
23
  def render_to(path) = File.write(path, render)
16
24
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Renderer
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.2"
5
5
  end
data/templates/base.erb CHANGED
@@ -7,12 +7,9 @@
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com" />
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="true" />
9
9
  <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500&family=Inter:wght@300;400;500&display=swap" rel="stylesheet" />
10
- <% unless level.zero? %>
11
- <base href="<%= ([".."] * level).join("/") %>" />
12
- <% end %>
13
- <link rel="stylesheet" type="text/css" href="style.css" />
14
- <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
15
- <link rel="icon" href="favicon.ico" type="image/x-icon"/>
10
+ <link rel="stylesheet" type="text/css" href="<%= make_path.call("style.css") %>" />
11
+ <link rel="shortcut icon" href="<%= make_path.call("favicon.ico") %>" type="image/x-icon"/>
12
+ <link rel="icon" href="<%= make_path.call("favicon.ico") %>" type="image/x-icon"/>
16
13
  </head>
17
14
  <body>
18
15
  <% if body.is_a? Array %>
@@ -20,6 +17,6 @@
20
17
  <% else %>
21
18
  <%= body %>
22
19
  <% end %>
23
- <script type="text/javascript" src="filtering.js"></script>
20
+ <script type="text/javascript" src="<%= make_path.call("filtering.js") %>"></script>
24
21
  </body>
25
22
  </html>
@@ -1,6 +1,6 @@
1
1
  <% div("breadcrumb-base", id:) do %>
2
2
  <div class="link">
3
- <a href="/">
3
+ <a href="<%= make_path %>">
4
4
  <%= svg("home") %>
5
5
  <span class="padded">
6
6
  <%= project_name %>
@@ -11,13 +11,13 @@
11
11
  <%= svg("breadcrumb_separator") %>
12
12
  <div class="link">
13
13
  <% if i[:parents].empty? && idx == 0 %>
14
- <a href="components.html">
14
+ <a href="<%= make_path("/components.html") %>">
15
15
  <span class="padded">
16
16
  <%= i[:name] %>
17
17
  </span>
18
18
  </a>
19
19
  <% else %>
20
- <a href="<%= (i[:parents] + [idx == 0 ? nil : i[:name]]).flatten.compact.join("/") %>.html">
20
+ <a href="<%= make_path((i[:parents] + [idx == 0 ? nil : i[:name]]).flatten.compact) %>.html">
21
21
  <span class="padded">
22
22
  <%= i[:name] %>
23
23
  </span>
@@ -0,0 +1,9 @@
1
+ <% div("class-path-reference-base", id:) do %>
2
+ <% if doc[:prefix] %>
3
+ <span><%= doc[:prefix] %></span>
4
+ <% end %>
5
+ <% doc[:segments].each do |segment| %>
6
+ <span class="segment <%= segment.kind %>"><a class="dashed" href="<%= link_for(segment) %>"><%= segment.name %></a></span>
7
+ <% end %>
8
+ <span class="segment <%= doc[:target].kind %>"><a class="dashed" href="<%= link_for(doc[:target]) %>"><%= doc[:target].name %></a></span>
9
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  <% div("documentation-block-base", id:) do %>
2
- <% if doc.nil? || doc.empty? %>
2
+ <% if doc.nil? || doc.empty? || doc[:value].empty? %>
3
3
  <div class="faded">(No documentation available)</div>
4
4
  <% else %>
5
5
  <% doc[:value].each do |block| %>
@@ -8,12 +8,13 @@
8
8
  <% elsif doc[:type] == :neutral_identifier || doc[:type] == :unresolved_identifier %>
9
9
  <code><%= doc[:value] %></code>
10
10
  <% elsif doc[:type] == :reference %>
11
- <%= reference(object: i) %>
11
+ <%= reference(object: doc) %>
12
12
  <% elsif doc[:type] == :symbol %>
13
13
  <%= symbol(name: doc[:value]) %>
14
14
  <% elsif doc[:type] == :method_ref %>
15
15
  <a class="method-ref dashed" href="<%= link_for(doc[:object]) %>"><%= doc[:value] %></a>
16
- <!-- <%= doc.to_json %> -->
16
+ <% elsif doc[:type] == :class_path_reference %>
17
+ <%= class_path_reference(doc: doc) %>
17
18
  <% else %>
18
19
  <div class="unknown-object">
19
20
  Unknown object <%= doc[:type] %>
@@ -3,7 +3,12 @@
3
3
  <span class="rest-arg <%= computed[:rest] %>"></span>
4
4
  <% end %>
5
5
 
6
- <%= computed[:name] %>
6
+ <% if computed[:rest] || computed[:block] %>
7
+ <%= computed[:name].to_s.gsub(/^([*]{1,2}|&)$/, '') %>
8
+ <% else %>
9
+ <%= computed[:name] %>
10
+ <% end %>
11
+
7
12
 
8
13
  <% if computed[:continuation] %>
9
14
  <span class="continuation <%= computed[:continuation] %>"></span>
@@ -1,6 +1,6 @@
1
1
  <% div("reference-base", id:) do %>
2
2
  <% if unresolved %>
3
- <span><%= value || path.last %></span>
3
+ <span class="broken"><%= value || path.join("::") %></span>
4
4
  <% elsif ref_type == :pure %>
5
5
  <a href="<%= link_for(object) %>">
6
6
  <span class="resolved <%= ref_type %>">
@@ -8,7 +8,7 @@
8
8
  </span>
9
9
  </a>
10
10
  <% else %>
11
- <a href="<%= path.join('/') %>.html">
11
+ <a href="<%= make_path(*path) %>.html">
12
12
  <span class="resolved <%= ref_type %>">
13
13
  <span><%= value || path.last %></span>
14
14
  </span>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docrb-html
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Gama
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-28 00:00:00.000000000 Z
11
+ date: 2023-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -83,6 +83,7 @@ files:
83
83
  - assets/checkbox.scss
84
84
  - assets/class_header.scss
85
85
  - assets/class_mod_name.scss
86
+ - assets/class_path_reference.scss
86
87
  - assets/component_list.scss
87
88
  - assets/constant_display.scss
88
89
  - assets/container.scss
@@ -134,6 +135,7 @@ files:
134
135
  - lib/renderer/component/checkbox.rb
135
136
  - lib/renderer/component/class_header.rb
136
137
  - lib/renderer/component/class_mod_name.rb
138
+ - lib/renderer/component/class_path_reference.rb
137
139
  - lib/renderer/component/component_list.rb
138
140
  - lib/renderer/component/constant_display.rb
139
141
  - lib/renderer/component/doc_box.rb
@@ -182,6 +184,7 @@ files:
182
184
  - templates/checkbox.erb
183
185
  - templates/class_header.erb
184
186
  - templates/class_mod_name.erb
187
+ - templates/class_path_reference.erb
185
188
  - templates/component_list.erb
186
189
  - templates/constant_display.erb
187
190
  - templates/doc_box.erb