docrb-html 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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