ratatui_ruby-devtools 0.1.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.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/.builds/ruby-4.0.yml +38 -0
  3. data/.pre-commit-config.yaml +16 -0
  4. data/.rubocop.yml +8 -0
  5. data/AGENTS.md +72 -0
  6. data/CHANGELOG.md +23 -0
  7. data/LICENSE +661 -0
  8. data/LICENSES/AGPL-3.0-or-later.txt +661 -0
  9. data/LICENSES/CC-BY-SA-4.0.txt +427 -0
  10. data/LICENSES/CC0-1.0.txt +121 -0
  11. data/LICENSES/MIT-0.txt +16 -0
  12. data/LICENSES/MIT.txt +18 -0
  13. data/README.md +199 -0
  14. data/REUSE.toml +18 -0
  15. data/Rakefile +13 -0
  16. data/bin/agent_rake +13 -0
  17. data/bin/announce +13 -0
  18. data/bin/console +14 -0
  19. data/bin/consolidate_md +13 -0
  20. data/bin/hbs +13 -0
  21. data/bin/setup +17 -0
  22. data/doc/contributors/documentation_style.md +121 -0
  23. data/doc/custom.css +22 -0
  24. data/exe/agent_rake +96 -0
  25. data/exe/announce +1120 -0
  26. data/exe/consolidate_md +246 -0
  27. data/exe/hbs +670 -0
  28. data/exe/scaffold +662 -0
  29. data/lib/ratatui_ruby/devtools/tasks/autodoc/examples.rb +133 -0
  30. data/lib/ratatui_ruby/devtools/tasks/autodoc/member.rb +116 -0
  31. data/lib/ratatui_ruby/devtools/tasks/autodoc/name.rb +33 -0
  32. data/lib/ratatui_ruby/devtools/tasks/autodoc.rake +21 -0
  33. data/lib/ratatui_ruby/devtools/tasks/bump/cargo_lockfile.rb +38 -0
  34. data/lib/ratatui_ruby/devtools/tasks/bump/changelog.rb +67 -0
  35. data/lib/ratatui_ruby/devtools/tasks/bump/header.rb +43 -0
  36. data/lib/ratatui_ruby/devtools/tasks/bump/history.rb +50 -0
  37. data/lib/ratatui_ruby/devtools/tasks/bump/links.rb +78 -0
  38. data/lib/ratatui_ruby/devtools/tasks/bump/manifest.rb +63 -0
  39. data/lib/ratatui_ruby/devtools/tasks/bump/ruby_gem.rb +77 -0
  40. data/lib/ratatui_ruby/devtools/tasks/bump/sem_ver.rb +63 -0
  41. data/lib/ratatui_ruby/devtools/tasks/bump/unreleased_section.rb +75 -0
  42. data/lib/ratatui_ruby/devtools/tasks/bump.rake +80 -0
  43. data/lib/ratatui_ruby/devtools/tasks/cargo.rake +47 -0
  44. data/lib/ratatui_ruby/devtools/tasks/doc.rake +887 -0
  45. data/lib/ratatui_ruby/devtools/tasks/example_viewer.html.erb +172 -0
  46. data/lib/ratatui_ruby/devtools/tasks/license/headers_md.rb +276 -0
  47. data/lib/ratatui_ruby/devtools/tasks/license/headers_rb.rb +236 -0
  48. data/lib/ratatui_ruby/devtools/tasks/license/license_utils.rb +143 -0
  49. data/lib/ratatui_ruby/devtools/tasks/license/snippets_md.rb +353 -0
  50. data/lib/ratatui_ruby/devtools/tasks/license/snippets_rdoc.rb +186 -0
  51. data/lib/ratatui_ruby/devtools/tasks/license.rake +91 -0
  52. data/lib/ratatui_ruby/devtools/tasks/lint.rake +84 -0
  53. data/lib/ratatui_ruby/devtools/tasks/rdoc_config.rb +45 -0
  54. data/lib/ratatui_ruby/devtools/tasks/resources/build.yml.erb +54 -0
  55. data/lib/ratatui_ruby/devtools/tasks/resources/rubies.yml +7 -0
  56. data/lib/ratatui_ruby/devtools/tasks/reuse.rake +104 -0
  57. data/lib/ratatui_ruby/devtools/tasks/sourcehut.rake +94 -0
  58. data/lib/ratatui_ruby/devtools/tasks/test.rake +18 -0
  59. data/lib/ratatui_ruby/devtools/templates/.builds/ruby.yml.erb +47 -0
  60. data/lib/ratatui_ruby/devtools/templates/.gitignore.erb +18 -0
  61. data/lib/ratatui_ruby/devtools/templates/.pre-commit-config.yaml.erb +16 -0
  62. data/lib/ratatui_ruby/devtools/templates/.rubocop.yml.erb +8 -0
  63. data/lib/ratatui_ruby/devtools/templates/AGENTS.md.erb +65 -0
  64. data/lib/ratatui_ruby/devtools/templates/CHANGELOG.md.erb +18 -0
  65. data/lib/ratatui_ruby/devtools/templates/Gemfile.erb +32 -0
  66. data/lib/ratatui_ruby/devtools/templates/README.md.erb +127 -0
  67. data/lib/ratatui_ruby/devtools/templates/REUSE.toml.erb +33 -0
  68. data/lib/ratatui_ruby/devtools/templates/Rakefile.erb +29 -0
  69. data/lib/ratatui_ruby/devtools/templates/bin/console.erb +18 -0
  70. data/lib/ratatui_ruby/devtools/templates/bin/setup.erb +24 -0
  71. data/lib/ratatui_ruby/devtools/templates/doc/concepts/application_architecture.md.erb +16 -0
  72. data/lib/ratatui_ruby/devtools/templates/doc/concepts/application_testing.md.erb +49 -0
  73. data/lib/ratatui_ruby/devtools/templates/doc/custom.css.erb +24 -0
  74. data/lib/ratatui_ruby/devtools/templates/doc/getting_started/quickstart.md.erb +56 -0
  75. data/lib/ratatui_ruby/devtools/templates/doc/images/.gitkeep +0 -0
  76. data/lib/ratatui_ruby/devtools/templates/doc/index.md.erb +25 -0
  77. data/lib/ratatui_ruby/devtools/templates/exe/.gitkeep +0 -0
  78. data/lib/ratatui_ruby/devtools/templates/gemspec.erb +58 -0
  79. data/lib/ratatui_ruby/devtools/templates/mise.toml.erb +12 -0
  80. data/lib/ratatui_ruby/devtools/templates/tasks/example_viewer.html.erb +174 -0
  81. data/lib/ratatui_ruby/devtools/templates/tasks/resources/build.yml.erb +62 -0
  82. data/lib/ratatui_ruby/devtools/templates/tasks/resources/index.html.erb +46 -0
  83. data/lib/ratatui_ruby/devtools/templates/tasks/resources/rubies.yml.erb +9 -0
  84. data/lib/ratatui_ruby/devtools/templates/vendor/goodcop/base.yml +1047 -0
  85. data/lib/ratatui_ruby/devtools/version.rb +13 -0
  86. data/lib/ratatui_ruby/devtools.rb +137 -0
  87. data/mise.toml +7 -0
  88. data/sig/ratatui_ruby/devtools.rbs +15 -0
  89. data/vendor/goodcop/base.yml +1047 -0
  90. metadata +252 -0
@@ -0,0 +1,174 @@
1
+ <%#
2
+ SPDX-FileCopyrightText: <%= Time.now.year %> <%= copyright_holder %>
3
+ REUSE-IgnoreStart
4
+ SPDX-License-Identifier: <%= license %>
5
+ REUSE-IgnoreEnd
6
+ %>
7
+ <!DOCTYPE html>
8
+ <html lang="en">
9
+ <head>
10
+ <meta charset="UTF-8">
11
+ <meta name="viewport" content="width=device-width, initial-scale=1">
12
+ <title><%= page_title %> - Example Viewer</title>
13
+
14
+ <script>
15
+ var rdoc_rel_prefix = "<%= doc_root_link.sub('index.html', '') %>";
16
+ var index_rel_prefix = "<%= '../' * (relative_path.split('/').size - 1) %>";
17
+ </script>
18
+
19
+ <script src="<%= '../' * (relative_path.split('/').size - 1) %>js/search_navigation.js" defer></script>
20
+ <script src="<%= '../' * (relative_path.split('/').size - 1) %>js/search_data.js" defer></script>
21
+ <script src="<%= '../' * (relative_path.split('/').size - 1) %>js/search_ranker.js" defer></script>
22
+ <script src="<%= '../' * (relative_path.split('/').size - 1) %>js/search_controller.js" defer></script>
23
+ <script src="<%= '../' * (relative_path.split('/').size - 1) %>js/aliki.js" defer></script>
24
+
25
+ <link href="<%= doc_root_link.sub('index.html', '') %>css/rdoc.css" rel="stylesheet">
26
+ <link href="<%= doc_root_link.sub('index.html', '') %>custom.css" rel="stylesheet">
27
+ </head>
28
+ <body class="file<%= ' has-toc' unless toc_items.empty? %>">
29
+ <%= icons_svg %>
30
+ <header class="top-navbar">
31
+ <div class="navbar-brand">
32
+ Example Viewer
33
+ </div>
34
+
35
+ <!-- Desktop search bar -->
36
+ <div class="navbar-search navbar-search-desktop" role="search">
37
+ <form action="#" method="get" accept-charset="utf-8">
38
+ <input id="search-field" role="combobox" aria-label="Search"
39
+ aria-autocomplete="list" aria-controls="search-results-desktop"
40
+ type="text" name="search" placeholder="Search (/) examples..."
41
+ spellcheck="false" autocomplete="off"
42
+ title="Type to search, Up and Down to navigate, Enter to load">
43
+ <ul id="search-results-desktop" aria-label="Search Results"
44
+ aria-busy="false" aria-expanded="false"
45
+ aria-atomic="false" class="initially-hidden search-results"></ul>
46
+ </form>
47
+ </div>
48
+
49
+ <!-- Mobile search icon button -->
50
+ <button id="search-toggle" class="navbar-search-mobile" aria-label="Open search" type="button">
51
+ <span aria-hidden="true">🔍</span>
52
+ </button>
53
+
54
+ <button id="theme-toggle" class="theme-toggle" aria-label="Switch to dark mode" type="button" onclick="cycleColorMode()">
55
+ <span class="theme-toggle-icon" aria-hidden="true">🌙</span>
56
+ </button>
57
+ </header>
58
+
59
+ <!-- Search Modal (Mobile) -->
60
+ <div id="search-modal" class="search-modal" hidden aria-modal="true" role="dialog" aria-label="Search">
61
+ <div class="search-modal-backdrop"></div>
62
+ <div class="search-modal-content">
63
+ <div class="search-modal-header">
64
+ <form class="search-modal-form" action="#" method="get" accept-charset="utf-8">
65
+ <span class="search-modal-icon" aria-hidden="true">🔍</span>
66
+ <input id="search-field-mobile" role="combobox" aria-label="Search"
67
+ aria-autocomplete="list" aria-controls="search-results-mobile"
68
+ type="text" name="search" placeholder="Search examples"
69
+ spellcheck="false" autocomplete="off">
70
+ <button type="button" class="search-modal-close" aria-label="Close search" id="search-modal-close">
71
+ <span aria-hidden="true">esc</span>
72
+ </button>
73
+ </form>
74
+ </div>
75
+ <div class="search-modal-body">
76
+ <ul id="search-results-mobile" aria-label="Search Results"
77
+ aria-busy="false" aria-expanded="false"
78
+ aria-atomic="false" class="search-results search-modal-results initially-hidden"></ul>
79
+ <div class="search-modal-empty">
80
+ <p>No recent searches</p>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+
86
+ <nav id="navigation" role="navigation">
87
+ <div id="fileindex-section" class="nav-section">
88
+ <details class="nav-section-collapsible" open>
89
+ <summary class="nav-section-header">
90
+ <span class="nav-section-icon">
91
+ <svg><use href="#icon-file"></use></svg>
92
+ </span>
93
+ <span class="nav-section-title">Examples</span>
94
+ <span class="nav-section-chevron">
95
+ <svg><use href="#icon-chevron"></use></svg>
96
+ </span>
97
+ </summary>
98
+ <ul class="nav-list">
99
+ <li><a href="<%= doc_root_link %>">← Back to Docs</a></li>
100
+ </ul>
101
+ </details>
102
+ </div>
103
+ <div class="nav-section">
104
+ <details class="nav-section-collapsible" open>
105
+ <summary class="nav-section-header">
106
+ <span class="nav-section-icon">
107
+ <svg><use href="#icon-layers"></use></svg>
108
+ </span>
109
+ <span class="nav-section-title">Files</span>
110
+ <span class="nav-section-chevron">
111
+ <svg><use href="#icon-chevron"></use></svg>
112
+ </span>
113
+ </summary>
114
+ <ul class="link-list nav-list">
115
+ <%= render_tree(tree_data, relative_path, current_file_html) %>
116
+ </ul>
117
+ </details>
118
+ </div>
119
+ </nav>
120
+
121
+ <main role="main">
122
+ <div class="breadcrumb">
123
+ <%= breadcrumb_path %>
124
+ </div>
125
+ <%= file_header_html %>
126
+ <div class="content">
127
+ <%= file_content_html %>
128
+ </div>
129
+ </main>
130
+
131
+ <% unless toc_items.empty? %>
132
+ <aside class="table-of-contents" role="complementary" aria-label="Table of Contents">
133
+ <div class="toc-sticky">
134
+ <div class="toc-list">
135
+ <h3>On This Page</h3>
136
+ <%= render_toc(toc_items) %>
137
+ </div>
138
+ </div>
139
+ </aside>
140
+ <% end %>
141
+
142
+
143
+ <script>
144
+ const modes = ['auto', 'light', 'dark'];
145
+ const icons = { auto: '🌓', light: '☀️', dark: '🌙' };
146
+
147
+ function setColorMode(mode) {
148
+ if (mode === 'auto') {
149
+ document.documentElement.removeAttribute('data-theme');
150
+ const systemTheme = (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light';
151
+ document.documentElement.setAttribute('data-theme', systemTheme);
152
+ } else {
153
+ document.documentElement.setAttribute('data-theme', mode);
154
+ }
155
+
156
+ const icon = icons[mode];
157
+ const toggle = document.getElementById('theme-toggle');
158
+ toggle.querySelector('.theme-toggle-icon').textContent = icon;
159
+
160
+ localStorage.setItem('rdoc-theme', mode);
161
+ }
162
+
163
+ function cycleColorMode() {
164
+ const current = localStorage.getItem('rdoc-theme') || 'auto';
165
+ const currentIndex = modes.indexOf(current);
166
+ const nextMode = modes[(currentIndex + 1) % modes.length];
167
+ setColorMode(nextMode);
168
+ }
169
+
170
+ const savedMode = localStorage.getItem('rdoc-theme') || 'auto';
171
+ setColorMode(savedMode);
172
+ </script>
173
+ </body>
174
+ </html>
@@ -0,0 +1,62 @@
1
+ # SPDX-FileCopyrightText: <%= Time.now.year %> <%= copyright_holder %>
2
+ # REUSE-IgnoreStart
3
+ # SPDX-License-Identifier: <%= license %>
4
+ # REUSE-IgnoreEnd
5
+
6
+ image: archlinux
7
+ packages:
8
+ - bash
9
+ - base-devel
10
+ - curl
11
+ - openssl
12
+ - libyaml
13
+ - zlib
14
+ - readline
15
+ - gdbm
16
+ - ncurses
17
+ - libffi
18
+ <%- if has_rust -%>
19
+ - clang
20
+ <%- end -%>
21
+ - git
22
+ artifacts:
23
+ - <%= gem_name %>/pkg/<%= gem_filename %>
24
+ sources:
25
+ - https://git.sr.ht/~kerrick/<%= gem_name %>
26
+ tasks:
27
+ - setup: |
28
+ curl https://mise.jdx.dev/install.sh | sh
29
+ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.buildenv
30
+ echo 'eval "$($HOME/.local/bin/mise activate bash)"' >> ~/.buildenv
31
+ echo 'export LANG="en_US.UTF-8"' >> ~/.buildenv
32
+ echo 'export LC_ALL="en_US.UTF-8"' >> ~/.buildenv
33
+ <%- if has_rust -%>
34
+ echo 'export BINDGEN_EXTRA_CLANG_ARGS="-include stdbool.h"' >> ~/.buildenv
35
+ <%- end -%>
36
+ . ~/.buildenv
37
+ export CI="true"
38
+ cd <%= gem_name %>
39
+ sed -i 's/ruby = .*/ruby = "<%= ruby_version %>"/' mise.toml
40
+ mise install
41
+ mise x -- pip install reuse
42
+ mise x -- gem install bundler:<%= bundler_version %>
43
+ mise reshim
44
+ mise x -- bundle config set --local frozen 'true'
45
+ mise x -- bundle install
46
+ <%- if has_rust -%>
47
+ mise x -- bundle exec rake compile
48
+ <%- end -%>
49
+ - test: |
50
+ . ~/.buildenv
51
+ cd <%= gem_name %>
52
+ echo "Testing Ruby <%= ruby_version %>"
53
+ mise x -- bundle exec rake test
54
+ - lint: |
55
+ . ~/.buildenv
56
+ cd <%= gem_name %>
57
+ echo "Linting Ruby <%= ruby_version %>"
58
+ mise x -- bundle exec rake lint
59
+ - package: |
60
+ . ~/.buildenv
61
+ cd <%= gem_name %>
62
+ mise x -- bundle exec rake build
@@ -0,0 +1,46 @@
1
+ <!--
2
+ SPDX-FileCopyrightText: <%= Time.now.year %> <%= copyright_holder %>
3
+
4
+ REUSE-IgnoreStart
5
+ SPDX-License-Identifier: <%= license %>
6
+ REUSE-IgnoreEnd
7
+ -->
8
+
9
+ <!DOCTYPE html>
10
+ <html>
11
+ <head>
12
+ <title><%= project_name %> documentation</title>
13
+ <meta name="viewport" content="width=device-width, initial-scale=1">
14
+ <style>
15
+ :root { color-scheme: light dark; }
16
+ body { font-family: system-ui, sans-serif; max-width: 800px; margin: 0 auto; padding: 2rem; line-height: 1.5; color: light-dark(#111, #eee); background: light-dark(#fff, #111); }
17
+ h1 { border-bottom: 2px solid light-dark(#eee, #333); padding-bottom: 0.5rem; }
18
+ ul { list-style: none; padding: 0; }
19
+ li { margin: 0.5rem 0; border: 1px solid light-dark(#ddd, #444); border-radius: 4px; }
20
+ a { display: block; padding: 1rem; text-decoration: none; color: light-dark(#0055aa, #44aaff); font-weight: bold; }
21
+ a:hover { background: light-dark(#f5f5f5, #222); }
22
+ .meta { font-weight: normal; color: light-dark(#666, #aaa); font-size: 0.9em; float: right; }
23
+ </style>
24
+ </head>
25
+ <body>
26
+ <h1><%= project_name %> documentation</h1>
27
+ <ul>
28
+ <% versions.each do |version| %>
29
+ <li>
30
+ <a href='<%= version.slug %>/index.html'>
31
+ <%= version.name %>
32
+ <span class='meta'>
33
+ <% if version.latest? %>
34
+ Latest
35
+ <% elsif version.edge? %>
36
+ Edge
37
+ <% else %>
38
+ Historical
39
+ <% end %>
40
+ </span>
41
+ </a>
42
+ </li>
43
+ <% end %>
44
+ </ul>
45
+ </body>
46
+ </html>
@@ -0,0 +1,9 @@
1
+ # SPDX-FileCopyrightText: <%= Time.now.year %> <%= copyright_holder %>
2
+ # REUSE-IgnoreStart
3
+ # SPDX-License-Identifier: <%= license %>
4
+ # REUSE-IgnoreEnd
5
+
6
+ - "3.2"
7
+ - "3.3"
8
+ - "3.4"
9
+ - "4.0.0"