ratatui_ruby 0.6.0 → 0.7.0
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
- data/.builds/ruby-3.2.yml +1 -1
- data/.builds/ruby-3.3.yml +1 -1
- data/.builds/ruby-3.4.yml +1 -1
- data/.builds/ruby-4.0.0.yml +1 -1
- data/AGENTS.md +4 -4
- data/CHANGELOG.md +35 -0
- data/README.md +26 -1
- data/doc/application_architecture.md +16 -16
- data/doc/application_testing.md +1 -1
- data/doc/contributors/architectural_overhaul/chat_conversations.md +4952 -0
- data/doc/contributors/architectural_overhaul/implementation_plan.md +60 -0
- data/doc/contributors/architectural_overhaul/task.md +37 -0
- data/doc/contributors/design/ruby_frontend.md +277 -81
- data/doc/contributors/design/rust_backend.md +349 -55
- data/doc/contributors/developing_examples.md +5 -5
- data/doc/contributors/index.md +7 -5
- data/doc/contributors/v1.0.0_blockers.md +1729 -0
- data/doc/index.md +11 -6
- data/doc/interactive_design.md +2 -2
- data/doc/quickstart.md +66 -97
- data/doc/v0.7.0_migration.md +236 -0
- data/doc/why.md +93 -0
- data/examples/app_all_events/README.md +6 -4
- data/examples/app_all_events/app.rb +1 -1
- data/examples/app_all_events/model/app_model.rb +1 -1
- data/examples/app_all_events/model/msg.rb +1 -1
- data/examples/app_all_events/update.rb +1 -1
- data/examples/app_all_events/view/app_view.rb +1 -1
- data/examples/app_all_events/view/controls_view.rb +1 -1
- data/examples/app_all_events/view/counts_view.rb +1 -1
- data/examples/app_all_events/view/live_view.rb +1 -1
- data/examples/app_all_events/view/log_view.rb +1 -1
- data/examples/app_color_picker/README.md +7 -5
- data/examples/app_color_picker/app.rb +1 -1
- data/examples/app_login_form/README.md +2 -0
- data/examples/app_stateful_interaction/README.md +2 -0
- data/examples/app_stateful_interaction/app.rb +1 -1
- data/examples/verify_quickstart_dsl/README.md +4 -3
- data/examples/verify_quickstart_dsl/app.rb +1 -1
- data/examples/verify_quickstart_layout/README.md +1 -1
- data/examples/verify_quickstart_lifecycle/README.md +3 -3
- data/examples/verify_quickstart_lifecycle/app.rb +2 -2
- data/examples/verify_readme_usage/README.md +1 -1
- data/examples/widget_barchart_demo/README.md +2 -1
- data/examples/widget_block_demo/README.md +2 -0
- data/examples/widget_box_demo/README.md +3 -3
- data/examples/widget_calendar_demo/README.md +3 -3
- data/examples/widget_calendar_demo/app.rb +5 -1
- data/examples/widget_canvas_demo/README.md +3 -3
- data/examples/widget_cell_demo/README.md +3 -3
- data/examples/widget_center_demo/README.md +3 -3
- data/examples/widget_chart_demo/README.md +3 -3
- data/examples/widget_gauge_demo/README.md +3 -3
- data/examples/widget_layout_split/README.md +3 -3
- data/examples/widget_line_gauge_demo/README.md +3 -3
- data/examples/widget_list_demo/README.md +3 -3
- data/examples/widget_map_demo/README.md +3 -3
- data/examples/widget_map_demo/app.rb +2 -2
- data/examples/widget_overlay_demo/README.md +36 -0
- data/examples/widget_popup_demo/README.md +3 -3
- data/examples/widget_ratatui_logo_demo/README.md +3 -3
- data/examples/widget_ratatui_logo_demo/app.rb +1 -1
- data/examples/widget_ratatui_mascot_demo/README.md +3 -3
- data/examples/widget_rect/README.md +3 -3
- data/examples/widget_render/README.md +3 -3
- data/examples/widget_render/app.rb +3 -3
- data/examples/widget_rich_text/README.md +3 -3
- data/examples/widget_scroll_text/README.md +3 -3
- data/examples/widget_scrollbar_demo/README.md +3 -3
- data/examples/widget_sparkline_demo/README.md +3 -3
- data/examples/widget_style_colors/README.md +3 -3
- data/examples/widget_table_demo/README.md +3 -3
- data/examples/widget_table_demo/app.rb +19 -4
- data/examples/widget_tabs_demo/README.md +3 -3
- data/examples/widget_text_width/README.md +3 -3
- data/examples/widget_text_width/app.rb +8 -1
- data/ext/ratatui_ruby/Cargo.lock +1 -1
- data/ext/ratatui_ruby/Cargo.toml +1 -1
- data/ext/ratatui_ruby/src/frame.rs +6 -5
- data/ext/ratatui_ruby/src/lib.rs +3 -2
- data/ext/ratatui_ruby/src/rendering.rs +22 -21
- data/ext/ratatui_ruby/src/text.rs +12 -3
- data/ext/ratatui_ruby/src/widgets/canvas.rs +5 -5
- data/ext/ratatui_ruby/src/widgets/table.rs +81 -36
- data/lib/ratatui_ruby/buffer/cell.rb +168 -0
- data/lib/ratatui_ruby/buffer.rb +15 -0
- data/lib/ratatui_ruby/frame.rb +8 -8
- data/lib/ratatui_ruby/layout/constraint.rb +95 -0
- data/lib/ratatui_ruby/layout/layout.rb +106 -0
- data/lib/ratatui_ruby/layout/rect.rb +118 -0
- data/lib/ratatui_ruby/layout.rb +19 -0
- data/lib/ratatui_ruby/list_state.rb +2 -2
- data/lib/ratatui_ruby/schema/layout.rb +1 -1
- data/lib/ratatui_ruby/schema/row.rb +66 -0
- data/lib/ratatui_ruby/schema/table.rb +10 -10
- data/lib/ratatui_ruby/schema/text.rb +27 -2
- data/lib/ratatui_ruby/style/style.rb +81 -0
- data/lib/ratatui_ruby/style.rb +15 -0
- data/lib/ratatui_ruby/table_state.rb +1 -1
- data/lib/ratatui_ruby/test_helper/snapshot.rb +24 -0
- data/lib/ratatui_ruby/test_helper/style_assertions.rb +1 -1
- data/lib/ratatui_ruby/tui/buffer_factories.rb +20 -0
- data/lib/ratatui_ruby/tui/canvas_factories.rb +44 -0
- data/lib/ratatui_ruby/tui/core.rb +38 -0
- data/lib/ratatui_ruby/tui/layout_factories.rb +74 -0
- data/lib/ratatui_ruby/tui/state_factories.rb +33 -0
- data/lib/ratatui_ruby/tui/style_factories.rb +20 -0
- data/lib/ratatui_ruby/tui/text_factories.rb +44 -0
- data/lib/ratatui_ruby/tui/widget_factories.rb +195 -0
- data/lib/ratatui_ruby/tui.rb +75 -0
- data/lib/ratatui_ruby/version.rb +1 -1
- data/lib/ratatui_ruby/widgets/bar_chart/bar.rb +47 -0
- data/lib/ratatui_ruby/widgets/bar_chart/bar_group.rb +25 -0
- data/lib/ratatui_ruby/widgets/bar_chart.rb +239 -0
- data/lib/ratatui_ruby/widgets/block.rb +192 -0
- data/lib/ratatui_ruby/widgets/calendar.rb +84 -0
- data/lib/ratatui_ruby/widgets/canvas.rb +231 -0
- data/lib/ratatui_ruby/widgets/cell.rb +47 -0
- data/lib/ratatui_ruby/widgets/center.rb +59 -0
- data/lib/ratatui_ruby/widgets/chart.rb +185 -0
- data/lib/ratatui_ruby/widgets/clear.rb +54 -0
- data/lib/ratatui_ruby/widgets/cursor.rb +42 -0
- data/lib/ratatui_ruby/widgets/gauge.rb +72 -0
- data/lib/ratatui_ruby/widgets/line_gauge.rb +80 -0
- data/lib/ratatui_ruby/widgets/list.rb +127 -0
- data/lib/ratatui_ruby/widgets/list_item.rb +43 -0
- data/lib/ratatui_ruby/widgets/overlay.rb +43 -0
- data/lib/ratatui_ruby/widgets/paragraph.rb +99 -0
- data/lib/ratatui_ruby/widgets/ratatui_logo.rb +31 -0
- data/lib/ratatui_ruby/widgets/ratatui_mascot.rb +36 -0
- data/lib/ratatui_ruby/widgets/row.rb +68 -0
- data/lib/ratatui_ruby/widgets/scrollbar.rb +143 -0
- data/lib/ratatui_ruby/widgets/shape/label.rb +68 -0
- data/lib/ratatui_ruby/widgets/sparkline.rb +134 -0
- data/lib/ratatui_ruby/widgets/table.rb +141 -0
- data/lib/ratatui_ruby/widgets/tabs.rb +85 -0
- data/lib/ratatui_ruby/widgets.rb +40 -0
- data/lib/ratatui_ruby.rb +23 -39
- data/sig/examples/app_all_events/view.rbs +1 -1
- data/sig/examples/app_all_events/view_state.rbs +1 -1
- data/sig/ratatui_ruby/schema/row.rbs +22 -0
- data/sig/ratatui_ruby/schema/table.rbs +1 -1
- data/sig/ratatui_ruby/schema/text.rbs +1 -0
- data/sig/ratatui_ruby/session.rbs +29 -49
- data/sig/ratatui_ruby/tui/buffer_factories.rbs +10 -0
- data/sig/ratatui_ruby/tui/canvas_factories.rbs +14 -0
- data/sig/ratatui_ruby/tui/core.rbs +14 -0
- data/sig/ratatui_ruby/tui/layout_factories.rbs +19 -0
- data/sig/ratatui_ruby/tui/state_factories.rbs +12 -0
- data/sig/ratatui_ruby/tui/style_factories.rbs +10 -0
- data/sig/ratatui_ruby/tui/text_factories.rbs +14 -0
- data/sig/ratatui_ruby/tui/widget_factories.rbs +39 -0
- data/sig/ratatui_ruby/tui.rbs +19 -0
- data/tasks/autodoc.rake +1 -35
- data/tasks/sourcehut.rake +4 -1
- metadata +62 -15
- data/doc/contributors/dwim_dx.md +0 -366
- data/doc/contributors/examples_audit/p1_high.md +0 -21
- data/doc/contributors/examples_audit/p2_moderate.md +0 -81
- data/doc/contributors/examples_audit.md +0 -41
- data/doc/images/app_analytics.png +0 -0
- data/doc/images/app_custom_widget.png +0 -0
- data/doc/images/app_mouse_events.png +0 -0
- data/doc/images/widget_table_flex.png +0 -0
- data/lib/ratatui_ruby/session/autodoc.rb +0 -482
- data/lib/ratatui_ruby/session.rb +0 -178
- data/tasks/autodoc/inventory.rb +0 -63
- data/tasks/autodoc/notice.rb +0 -26
- data/tasks/autodoc/rbs.rb +0 -38
- data/tasks/autodoc/rdoc.rb +0 -45
data/lib/ratatui_ruby/session.rb
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
|
-
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
|
-
|
|
6
|
-
module RatatuiRuby
|
|
7
|
-
# Manages the terminal lifecycle and provides a concise API for the render loop.
|
|
8
|
-
#
|
|
9
|
-
# Writing a TUI loop involves repetitive boilerplate. You constantly instantiate widgets (<tt>RatatuiRuby::Paragraph.new</tt>) and call global methods (<tt>RatatuiRuby.draw</tt>). This is verbose and hard to read.
|
|
10
|
-
#
|
|
11
|
-
# The Session object simplifies this. It acts as a factory and a facade. It provides short helper methods for every widget and delegates core commands to the main module.
|
|
12
|
-
#
|
|
13
|
-
# Use it within <tt>RatatuiRuby.run</tt> to build your interface cleanly.
|
|
14
|
-
#
|
|
15
|
-
# == Thread/Ractor Safety
|
|
16
|
-
#
|
|
17
|
-
# Session is an *I/O handle*, not a data object. It has side effects (draw,
|
|
18
|
-
# poll_event) and is intentionally *not* Ractor-shareable. Caching it in
|
|
19
|
-
# instance variables (<tt>@tui = tui</tt>) during your application's run loop
|
|
20
|
-
# is fine. However, do not include it in immutable TEA Models/Messages or
|
|
21
|
-
# pass it to other Ractors.
|
|
22
|
-
#
|
|
23
|
-
# == Available Methods
|
|
24
|
-
#
|
|
25
|
-
# The session dynamically defines factory methods for all RatatuiRuby constants.
|
|
26
|
-
#
|
|
27
|
-
# * <tt>draw(node)</tt> -> Delegates to <tt>RatatuiRuby.draw</tt>
|
|
28
|
-
# * <tt>poll_event</tt> -> Delegates to <tt>RatatuiRuby.poll_event</tt>
|
|
29
|
-
#
|
|
30
|
-
# === Widget Factories
|
|
31
|
-
#
|
|
32
|
-
# The session acts as a dynamic factory. It creates a helper method for **every** class defined in the `RatatuiRuby` module.
|
|
33
|
-
#
|
|
34
|
-
# **The Rule:**
|
|
35
|
-
# To instantiate a class like `RatatuiRuby::SomeWidget`, call `tui.some_widget(...)`.
|
|
36
|
-
#
|
|
37
|
-
# **Common Examples:**
|
|
38
|
-
# * <tt>paragraph(...)</tt> -> <tt>RatatuiRuby::Paragraph.new(...)</tt>
|
|
39
|
-
# * <tt>block(...)</tt> -> <tt>RatatuiRuby::Block.new(...)</tt>
|
|
40
|
-
# * <tt>layout(...)</tt> -> <tt>RatatuiRuby::Layout.new(...)</tt>
|
|
41
|
-
# * <tt>list(...)</tt> -> <tt>RatatuiRuby::List.new(...)</tt>
|
|
42
|
-
# * <tt>table(...)</tt> -> <tt>RatatuiRuby::Table.new(...)</tt>
|
|
43
|
-
# * <tt>style(...)</tt> -> <tt>RatatuiRuby::Style.new(...)</tt>
|
|
44
|
-
#
|
|
45
|
-
# If a new class is added to the library, it is automatically available here.
|
|
46
|
-
#
|
|
47
|
-
# === Nested Helpers
|
|
48
|
-
#
|
|
49
|
-
# * <tt>text_span(...)</tt> -> <tt>RatatuiRuby::Text::Span.new(...)</tt>
|
|
50
|
-
# * <tt>text_line(...)</tt> -> <tt>RatatuiRuby::Text::Line.new(...)</tt>
|
|
51
|
-
# * <tt>text_width(string)</tt> -> <tt>RatatuiRuby::Text.width(string)</tt>
|
|
52
|
-
#
|
|
53
|
-
# === Examples
|
|
54
|
-
#
|
|
55
|
-
# ==== Basic Usage (Recommended)
|
|
56
|
-
#
|
|
57
|
-
# RatatuiRuby.run do |tui|
|
|
58
|
-
# loop do
|
|
59
|
-
# tui.draw \
|
|
60
|
-
# tui.paragraph \
|
|
61
|
-
# text: "Hello, Ratatui! Press 'q' to quit.",
|
|
62
|
-
# alignment: :center,
|
|
63
|
-
# block: tui.block(
|
|
64
|
-
# title: "My Ruby TUI App",
|
|
65
|
-
# borders: [:all],
|
|
66
|
-
# border_color: "cyan"
|
|
67
|
-
# )
|
|
68
|
-
# event = tui.poll_event
|
|
69
|
-
# break if event == "q" || event == :ctrl_c
|
|
70
|
-
# end
|
|
71
|
-
# end
|
|
72
|
-
#
|
|
73
|
-
# ==== Raw API (Verbose)
|
|
74
|
-
#
|
|
75
|
-
# RatatuiRuby.run do
|
|
76
|
-
# loop do
|
|
77
|
-
# RatatuiRuby.draw \
|
|
78
|
-
# RatatuiRuby::Paragraph.new(
|
|
79
|
-
# text: "Hello, Ratatui! Press 'q' to quit.",
|
|
80
|
-
# alignment: :center,
|
|
81
|
-
# block: RatatuiRuby::Block.new(
|
|
82
|
-
# title: "My Ruby TUI App",
|
|
83
|
-
# borders: [:all],
|
|
84
|
-
# border_color: "cyan"
|
|
85
|
-
# )
|
|
86
|
-
# )
|
|
87
|
-
# event = RatatuiRuby.poll_event
|
|
88
|
-
# break if event == "q" || event == :ctrl_c
|
|
89
|
-
# end
|
|
90
|
-
# end
|
|
91
|
-
#
|
|
92
|
-
# ==== Mixed Usage (Flexible)
|
|
93
|
-
#
|
|
94
|
-
# RatatuiRuby.run do |tui|
|
|
95
|
-
# loop do
|
|
96
|
-
# RatatuiRuby.draw \
|
|
97
|
-
# tui.paragraph \
|
|
98
|
-
# text: "Hello, Ratatui! Press 'q' to quit.",
|
|
99
|
-
# alignment: :center,
|
|
100
|
-
# block: tui.block(
|
|
101
|
-
# title: "My Ruby TUI App",
|
|
102
|
-
# borders: [:all],
|
|
103
|
-
# border_color: "cyan"
|
|
104
|
-
# )
|
|
105
|
-
# event = RatatuiRuby.poll_event
|
|
106
|
-
# break if event == "q" || event == :ctrl_c
|
|
107
|
-
# end
|
|
108
|
-
# end
|
|
109
|
-
class Session
|
|
110
|
-
# Wrap methods directly
|
|
111
|
-
RatatuiRuby.singleton_methods(false).each do |method_name|
|
|
112
|
-
define_method(method_name) do |*args, **kwargs, &block|
|
|
113
|
-
RatatuiRuby.public_send(method_name, *args, **kwargs, &block)
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Wrap classes and modules as snake_case factories
|
|
118
|
-
RatatuiRuby.constants.each do |const_name|
|
|
119
|
-
next if const_name == :Buffer
|
|
120
|
-
|
|
121
|
-
const = RatatuiRuby.const_get(const_name)
|
|
122
|
-
next unless const.is_a?(Module) # Class is a Module, so this catches both
|
|
123
|
-
|
|
124
|
-
# 1. Top-level factories (for Classes only)
|
|
125
|
-
# e.g. RatatuiRuby::Paragraph -> tui.paragraph(...)
|
|
126
|
-
if const.is_a?(Class)
|
|
127
|
-
method_name = const_name.to_s
|
|
128
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
129
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
130
|
-
.downcase
|
|
131
|
-
|
|
132
|
-
define_method(method_name) do |*args, **kwargs, &block|
|
|
133
|
-
const.new(*args, **kwargs, &block)
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
# 2. Singleton Method Helpers (for both Classes and Modules)
|
|
138
|
-
# e.g. Layout.split -> layout_split
|
|
139
|
-
# e.g. Text.width -> text_width
|
|
140
|
-
const.singleton_methods(false).each do |class_method|
|
|
141
|
-
parent_prefix = const_name.to_s
|
|
142
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
143
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
144
|
-
.downcase
|
|
145
|
-
|
|
146
|
-
session_method_name = "#{parent_prefix}_#{class_method}"
|
|
147
|
-
|
|
148
|
-
define_method(session_method_name) do |*args, **kwargs, &block|
|
|
149
|
-
const.public_send(class_method, *args, **kwargs, &block)
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# 3. Nested Class Factories (for both Modules and Classes)
|
|
154
|
-
# e.g. RatatuiRuby::Text::Span -> tui.text_span(...)
|
|
155
|
-
# e.g. RatatuiRuby::Shape::Line -> tui.shape_line(...)
|
|
156
|
-
const.constants.each do |child_name|
|
|
157
|
-
child = const.const_get(child_name)
|
|
158
|
-
next unless child.is_a?(Class)
|
|
159
|
-
|
|
160
|
-
parent_prefix = const_name.to_s
|
|
161
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
162
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
163
|
-
.downcase
|
|
164
|
-
|
|
165
|
-
child_suffix = child_name.to_s
|
|
166
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
167
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
168
|
-
.downcase
|
|
169
|
-
|
|
170
|
-
method_name = "#{parent_prefix}_#{child_suffix}"
|
|
171
|
-
|
|
172
|
-
define_method(method_name) do |*args, **kwargs, &block|
|
|
173
|
-
child.new(*args, **kwargs, &block)
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
end
|
data/tasks/autodoc/inventory.rb
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
|
-
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
|
-
|
|
6
|
-
require_relative "name"
|
|
7
|
-
require_relative "member"
|
|
8
|
-
|
|
9
|
-
module Autodoc
|
|
10
|
-
class Inventory
|
|
11
|
-
include Enumerable
|
|
12
|
-
|
|
13
|
-
def each(&)
|
|
14
|
-
delegates.each(&)
|
|
15
|
-
factories.each(&)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def delegates
|
|
19
|
-
RatatuiRuby.singleton_methods(false).sort.map do |method_name|
|
|
20
|
-
Member::Delegate.new(name: method_name)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def factories
|
|
25
|
-
members = []
|
|
26
|
-
RatatuiRuby.constants.sort.each do |const_name|
|
|
27
|
-
next if const_name == :Buffer
|
|
28
|
-
|
|
29
|
-
const = RatatuiRuby.const_get(const_name)
|
|
30
|
-
next unless const.is_a?(Module)
|
|
31
|
-
|
|
32
|
-
if const.is_a?(Class)
|
|
33
|
-
snake_name = Name.new(const_name).snake
|
|
34
|
-
members << Member::Factory.new(name: snake_name, const_name:)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Singleton methods (for both Classes and Modules)
|
|
38
|
-
parent_prefix = Name.new(const_name).snake
|
|
39
|
-
const.singleton_methods(false).sort.each do |class_method|
|
|
40
|
-
members << Member::Helper.new(
|
|
41
|
-
name: "#{parent_prefix}_#{class_method}",
|
|
42
|
-
class_method:,
|
|
43
|
-
const_name:
|
|
44
|
-
)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
const.constants.sort.each do |child_name|
|
|
48
|
-
child = const.const_get(child_name)
|
|
49
|
-
next unless child.is_a?(Class)
|
|
50
|
-
|
|
51
|
-
parent_prefix = Name.new(const_name).snake
|
|
52
|
-
child_suffix = Name.new(child_name).snake
|
|
53
|
-
|
|
54
|
-
members << Member::Factory.new(
|
|
55
|
-
name: "#{parent_prefix}_#{child_suffix}",
|
|
56
|
-
const_name: "#{const_name}::#{child_name}"
|
|
57
|
-
)
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
members
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
data/tasks/autodoc/notice.rb
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
|
-
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
|
-
|
|
6
|
-
module Autodoc
|
|
7
|
-
class Notice < Data.define(:task_name)
|
|
8
|
-
def rbs
|
|
9
|
-
[
|
|
10
|
-
"# !!! DO NOT EDIT THIS FILE BY HAND !!!",
|
|
11
|
-
"# This file is automatically generated by `rake #{task_name}`.",
|
|
12
|
-
"# Any changes will be overwritten.",
|
|
13
|
-
"",
|
|
14
|
-
]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def rdoc
|
|
18
|
-
[
|
|
19
|
-
"# !!! DO NOT EDIT THIS FILE BY HAND !!!",
|
|
20
|
-
"# This file is automatically generated by `rake #{task_name}`.",
|
|
21
|
-
"# Any changes will be overwritten.",
|
|
22
|
-
"",
|
|
23
|
-
]
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
data/tasks/autodoc/rbs.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
|
-
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
|
-
|
|
6
|
-
module Autodoc
|
|
7
|
-
class Rbs < Data.define(:path, :notice)
|
|
8
|
-
def write(inventory)
|
|
9
|
-
FileUtils.mkdir_p(File.dirname(path))
|
|
10
|
-
|
|
11
|
-
# REUSE-IgnoreStart
|
|
12
|
-
lines = [
|
|
13
|
-
"# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>",
|
|
14
|
-
"# SPDX-License-Identifier: AGPL-3.0-or-later",
|
|
15
|
-
"",
|
|
16
|
-
]
|
|
17
|
-
# REUSE-IgnoreEnd
|
|
18
|
-
lines += notice.rbs
|
|
19
|
-
lines += [
|
|
20
|
-
"module RatatuiRuby",
|
|
21
|
-
" class Session",
|
|
22
|
-
" def self.new: () -> Session",
|
|
23
|
-
" | () { (Session) -> void } -> void",
|
|
24
|
-
"",
|
|
25
|
-
]
|
|
26
|
-
|
|
27
|
-
inventory.each do |member|
|
|
28
|
-
lines << member.rbs
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
lines << " end"
|
|
32
|
-
lines << "end"
|
|
33
|
-
|
|
34
|
-
File.write(path, "#{lines.join("\n")}\n")
|
|
35
|
-
puts "Generated #{path}"
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
data/tasks/autodoc/rdoc.rb
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
4
|
-
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
|
-
|
|
6
|
-
module Autodoc
|
|
7
|
-
class Rdoc < Data.define(:path, :notice)
|
|
8
|
-
def write(inventory)
|
|
9
|
-
FileUtils.mkdir_p(File.dirname(path))
|
|
10
|
-
|
|
11
|
-
# REUSE-IgnoreStart
|
|
12
|
-
lines = [
|
|
13
|
-
"# frozen_string_literal: true",
|
|
14
|
-
"",
|
|
15
|
-
"# SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>",
|
|
16
|
-
"# SPDX-License-Identifier: AGPL-3.0-or-later",
|
|
17
|
-
"",
|
|
18
|
-
]
|
|
19
|
-
# REUSE-IgnoreEnd
|
|
20
|
-
lines += notice.rdoc
|
|
21
|
-
lines += [
|
|
22
|
-
"module RatatuiRuby",
|
|
23
|
-
" class Session",
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
lines << " # == RatatuiRuby Delegates"
|
|
27
|
-
lines << " #"
|
|
28
|
-
inventory.delegates.each do |member|
|
|
29
|
-
lines += member.rdoc
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
lines << " # == Widget Factories"
|
|
33
|
-
lines << " #"
|
|
34
|
-
inventory.factories.each do |member|
|
|
35
|
-
lines += member.rdoc
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
lines << " end"
|
|
39
|
-
lines << "end"
|
|
40
|
-
|
|
41
|
-
File.write(path, "#{lines.join("\n")}\n")
|
|
42
|
-
puts "Generated #{path}"
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|