utopia-project 0.43.0 → 0.44.1
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/context/documentation-guidelines.md +3 -3
- data/lib/utopia/project/base.md +1 -1
- data/lib/utopia/project/base.rb +3 -3
- data/lib/utopia/project/document.rb +52 -22
- data/lib/utopia/project/renderer.rb +18 -0
- data/lib/utopia/project/version.rb +1 -1
- data/readme.md +8 -8
- data/releases.md +8 -0
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: aeb8c91bedd9b713aac858b1d21a2475e46339d263619e37c5ee5e55a96f9823
|
|
4
|
+
data.tar.gz: 42dd69b94451317ffebd0c44e7316accba3e2e7563c911c6e47ec3ff8b61f83d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c661665e07add1839f6f49abe463e74fdc433e2184bbf802d8fbd4dcfe09c339d637625ce5ba0f63333860ee97d22414026c3bb70ab16ccdffdae8c3a3a4dcb3
|
|
7
|
+
data.tar.gz: 429aedacf04be623ca7869fde98f40cc702743da7b53fa2f51bb81c1b387b39dea7d8b475a916a76c0a9fc5cce1c51d8db0a80e2a151f62ab06c304ad7e73a45
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
|
@@ -16,7 +16,7 @@ Source code documentation is included adjacent to the code it describes, using s
|
|
|
16
16
|
However, in short:
|
|
17
17
|
|
|
18
18
|
- Documentation is expected to be in markdown format.
|
|
19
|
-
- You may embed links to definitions using
|
|
19
|
+
- You may embed links to definitions using ruby:`MyClass` or ruby:`my_method`.
|
|
20
20
|
- You can use tags:
|
|
21
21
|
- `@parameters name [Type] Description.`
|
|
22
22
|
- `@yields {|argument| ...} If a block is given.`
|
|
@@ -173,7 +173,7 @@ $ bundle add $project
|
|
|
173
173
|
|
|
174
174
|
`$project` has several core concepts:
|
|
175
175
|
|
|
176
|
-
- A
|
|
176
|
+
- A ruby:`MyProject::MyClass` which represents the main entry point for using the project.
|
|
177
177
|
|
|
178
178
|
## Usage
|
|
179
179
|
|
|
@@ -284,7 +284,7 @@ Following `utopia-project` guidelines, each guide should:
|
|
|
284
284
|
2. **Provide user context**: Explain why users would need this feature
|
|
285
285
|
3. **Include practical examples**: Working code samples that demonstrate real scenarios
|
|
286
286
|
4. **Follow consistent structure**: Problem → Use Cases → Implementation → Best Practices
|
|
287
|
-
5. **Cross-reference appropriately**: Use
|
|
287
|
+
5. **Cross-reference appropriately**: Use ruby:`ClassName` for internal references
|
|
288
288
|
6. **Include error handling**: Show how to handle common failure scenarios
|
|
289
289
|
7. **Provide troubleshooting**: Common issues and solutions
|
|
290
290
|
8. **Maintain currency**: Keep examples updated with latest best practices
|
data/lib/utopia/project/base.md
CHANGED
data/lib/utopia/project/base.rb
CHANGED
|
@@ -136,12 +136,12 @@ module Utopia
|
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
# Format the given text in the context of the given definition and language.
|
|
139
|
-
# See
|
|
139
|
+
# See ruby:`document` for details.
|
|
140
140
|
# @returns [XRB::MarkupString]
|
|
141
141
|
#
|
|
142
142
|
# @example Format text with code links
|
|
143
143
|
# base = Utopia::Project::Base.new
|
|
144
|
-
# base.format("See
|
|
144
|
+
# base.format("See ruby:`Utopia::Project::Base#guides`.") # => XRB::MarkupString
|
|
145
145
|
def format(text, definition = nil, language: definition&.language, **options)
|
|
146
146
|
if document = self.document(text, definition, language: language)
|
|
147
147
|
return XRB::Markup.raw(
|
|
@@ -152,7 +152,7 @@ module Utopia
|
|
|
152
152
|
|
|
153
153
|
# Convert the given markdown text into HTML.
|
|
154
154
|
#
|
|
155
|
-
# Updates
|
|
155
|
+
# Updates language-prefixed inline code (e.g. `ruby:` followed by inline code) into links.
|
|
156
156
|
#
|
|
157
157
|
# @returns [Document]
|
|
158
158
|
#
|
|
@@ -29,7 +29,7 @@ module Utopia
|
|
|
29
29
|
# Parse and resolve the document root.
|
|
30
30
|
# @returns [Markly::Node] The root document node.
|
|
31
31
|
def root
|
|
32
|
-
@root ||= resolve(Markly.parse(@text, extensions: [:table]))
|
|
32
|
+
@root ||= resolve(Markly.parse(@text, flags: Markly::INLINE_CODE_INFO, extensions: [:table]))
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
# Extract the leading heading as the document title.
|
|
@@ -99,7 +99,12 @@ module Utopia
|
|
|
99
99
|
# @parameter node [Markly::Node] The node to render.
|
|
100
100
|
# @returns [XRB::MarkupString] The rendered HTML markup.
|
|
101
101
|
def to_html(node = self.root, **options)
|
|
102
|
-
renderer = Renderer.new(
|
|
102
|
+
renderer = Renderer.new(
|
|
103
|
+
inline_code_resolver: (@index ? method(:reference_node) : nil),
|
|
104
|
+
ids: true,
|
|
105
|
+
flags: Markly::UNSAFE,
|
|
106
|
+
**options
|
|
107
|
+
)
|
|
103
108
|
XRB::Markup.raw(renderer.render(node))
|
|
104
109
|
end
|
|
105
110
|
|
|
@@ -160,37 +165,62 @@ module Utopia
|
|
|
160
165
|
# @parameter language [String | Nil] The source language name.
|
|
161
166
|
# @returns [Markly::Node] The code node.
|
|
162
167
|
def code_node(content, language = nil)
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
)
|
|
167
|
-
else
|
|
168
|
-
node = Markly::Node.new(:code)
|
|
169
|
-
node.string_content = content
|
|
170
|
-
return node
|
|
171
|
-
end
|
|
168
|
+
node = Markly::Node.new(:code)
|
|
169
|
+
node.string_content = content
|
|
170
|
+
node.code_info = language if language
|
|
172
171
|
|
|
173
172
|
return node
|
|
174
173
|
end
|
|
175
174
|
|
|
176
175
|
private
|
|
177
176
|
|
|
178
|
-
#
|
|
179
|
-
#
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
177
|
+
# Resolve a source code reference to HTML.
|
|
178
|
+
# @parameter content [String] The source code reference.
|
|
179
|
+
# @parameter language [String | Nil] The explicit source language.
|
|
180
|
+
# @returns [Markly::Node] The inline HTML node.
|
|
181
|
+
def reference_node(content, language: nil)
|
|
182
|
+
reference, definition = resolve_reference(content, language: language)
|
|
184
183
|
|
|
185
184
|
if definition
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
)
|
|
185
|
+
content = definition.qualified_form
|
|
186
|
+
language = reference.language.name
|
|
189
187
|
elsif reference
|
|
190
|
-
|
|
188
|
+
content = reference.identifier
|
|
189
|
+
language = reference.language.name
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
attributes = {}
|
|
193
|
+
attributes[:class] = "language-#{language}" if language
|
|
194
|
+
|
|
195
|
+
markup = XRB::Builder.fragment do |builder|
|
|
196
|
+
builder.inline("code", attributes) do
|
|
197
|
+
if definition
|
|
198
|
+
builder.inline("a", href: @base.link_for(definition), title: reference.identifier) do
|
|
199
|
+
builder.text(content)
|
|
200
|
+
end
|
|
201
|
+
else
|
|
202
|
+
builder.text(content)
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
return inline_html_node(markup.to_s)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Resolve source code reference metadata and its indexed definition.
|
|
211
|
+
# @parameter content [String] The source code reference.
|
|
212
|
+
# @parameter language [String | Nil] The explicit source language.
|
|
213
|
+
# @returns [Array] The parsed reference and resolved definition.
|
|
214
|
+
def resolve_reference(content, language: nil)
|
|
215
|
+
reference = if language
|
|
216
|
+
@index.languages.reference_for(language, content)
|
|
191
217
|
else
|
|
192
|
-
|
|
218
|
+
@index.languages.parse_reference(content, default_language: @default_language)
|
|
193
219
|
end
|
|
220
|
+
|
|
221
|
+
definition = @index.lookup(reference, relative_to: @definition) if reference
|
|
222
|
+
|
|
223
|
+
return reference, definition
|
|
194
224
|
end
|
|
195
225
|
|
|
196
226
|
def resolve(root)
|
|
@@ -10,6 +10,14 @@ module Utopia
|
|
|
10
10
|
module Project
|
|
11
11
|
# Renders project Markdown with support for Mermaid code blocks.
|
|
12
12
|
class Renderer < Markly::Renderer::HTML
|
|
13
|
+
# Initialize the project renderer.
|
|
14
|
+
# @parameter inline_code_resolver [Proc | Nil] Resolves language-prefixed inline code into an inline HTML node.
|
|
15
|
+
def initialize(inline_code_resolver: nil, **options)
|
|
16
|
+
@inline_code_resolver = inline_code_resolver
|
|
17
|
+
|
|
18
|
+
super(**options)
|
|
19
|
+
end
|
|
20
|
+
|
|
13
21
|
# Render a heading and expose its title to Pagefind for sub-results.
|
|
14
22
|
# @parameter node [Markly::Node] The heading node.
|
|
15
23
|
def header(node)
|
|
@@ -45,6 +53,16 @@ module Utopia
|
|
|
45
53
|
super
|
|
46
54
|
end
|
|
47
55
|
end
|
|
56
|
+
|
|
57
|
+
# Render inline code, resolving language-prefixed references when possible.
|
|
58
|
+
# @parameter node [Markly::Node] The inline code node.
|
|
59
|
+
def code(node)
|
|
60
|
+
if @inline_code_resolver && (language = node.code_language)
|
|
61
|
+
out(@inline_code_resolver.call(node.string_content, language: language))
|
|
62
|
+
else
|
|
63
|
+
super
|
|
64
|
+
end
|
|
65
|
+
end
|
|
48
66
|
end
|
|
49
67
|
end
|
|
50
68
|
end
|
data/readme.md
CHANGED
|
@@ -33,6 +33,14 @@ Please see the [project documentation](https://socketry.github.io/utopia-project
|
|
|
33
33
|
|
|
34
34
|
Please see the [project releases](https://socketry.github.io/utopia-project/releases/index) for all releases.
|
|
35
35
|
|
|
36
|
+
### v0.44.1
|
|
37
|
+
|
|
38
|
+
- Render resolved inline code references with links inside their code elements so hover and keyboard focus affect the complete reference.
|
|
39
|
+
|
|
40
|
+
### v0.44.0
|
|
41
|
+
|
|
42
|
+
- Add support for language-prefixed inline code references such as ruby:`Object.new`.
|
|
43
|
+
|
|
36
44
|
### v0.41.0
|
|
37
45
|
|
|
38
46
|
- Don't render empty signature block when there are only examples.
|
|
@@ -68,14 +76,6 @@ Please see the [project releases](https://socketry.github.io/utopia-project/rele
|
|
|
68
76
|
|
|
69
77
|
- Fixed handling of segmented code guides when rendered into a `readme.md` file.
|
|
70
78
|
|
|
71
|
-
### v0.33.0
|
|
72
|
-
|
|
73
|
-
- Fix presentation of release notes on releases page.
|
|
74
|
-
|
|
75
|
-
### v0.31.0
|
|
76
|
-
|
|
77
|
-
- Support brief release notes in `releases.md` document.
|
|
78
|
-
|
|
79
79
|
## See Also
|
|
80
80
|
|
|
81
81
|
- [Utopia](https://github.com/socketry/utopia) — The website framework which powers this web application.
|
data/releases.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changes
|
|
2
2
|
|
|
3
|
+
## v0.44.1
|
|
4
|
+
|
|
5
|
+
- Render resolved inline code references with links inside their code elements so hover and keyboard focus affect the complete reference.
|
|
6
|
+
|
|
7
|
+
## v0.44.0
|
|
8
|
+
|
|
9
|
+
- Add support for language-prefixed inline code references such as ruby:`Object.new`.
|
|
10
|
+
|
|
3
11
|
## v0.41.0
|
|
4
12
|
|
|
5
13
|
- Don't render empty signature block when there are only examples.
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: utopia-project
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.44.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Samuel Williams
|
|
@@ -75,14 +75,14 @@ dependencies:
|
|
|
75
75
|
requirements:
|
|
76
76
|
- - "~>"
|
|
77
77
|
- !ruby/object:Gem::Version
|
|
78
|
-
version: '0.
|
|
78
|
+
version: '0.17'
|
|
79
79
|
type: :runtime
|
|
80
80
|
prerelease: false
|
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
|
82
82
|
requirements:
|
|
83
83
|
- - "~>"
|
|
84
84
|
- !ruby/object:Gem::Version
|
|
85
|
-
version: '0.
|
|
85
|
+
version: '0.17'
|
|
86
86
|
- !ruby/object:Gem::Dependency
|
|
87
87
|
name: thread-local
|
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
|
Binary file
|