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,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
+ # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
7
+
8
+ module RatatuiRuby
9
+ module Devtools
10
+ # Current version of the ratatui_ruby-devtools gem.
11
+ VERSION = "0.1.0"
12
+ end
13
+ end
@@ -0,0 +1,137 @@
1
+ # frozen_string_literal: true
2
+
3
+ #--
4
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
5
+ # SPDX-License-Identifier: AGPL-3.0-or-later
6
+ #++
7
+
8
+ require_relative "devtools/version"
9
+
10
+ # Root namespace for RatatuiRuby ecosystem gems.
11
+ #
12
+ # This gem provides development tooling shared across the ecosystem. Consumer
13
+ # gems require this and call <tt>Devtools.install!</tt> to load Rake tasks.
14
+ module RatatuiRuby
15
+ # Development tooling for the RatatuiRuby ecosystem.
16
+ #
17
+ # This gem provides shared Rake tasks, linter configurations, and build
18
+ # tooling used across all RatatuiRuby ecosystem gems.
19
+ #
20
+ # == Usage
21
+ #
22
+ # In your Rakefile:
23
+ #
24
+ # require "ratatui_ruby/devtools"
25
+ # RatatuiRuby::Devtools.install!
26
+ #
27
+ # # Optional: import project-specific tasks
28
+ # Dir.glob("tasks/*.rake").each { |r| import r }
29
+ #
30
+ # task default: %w[lint:fix test lint]
31
+ #
32
+ module Devtools
33
+ # Base error class for devtools failures.
34
+ #
35
+ # Rake tasks may encounter errors during configuration discovery or task
36
+ # execution. This class provides a common base for all devtools exceptions.
37
+ class Error < StandardError; end
38
+
39
+ class << self
40
+ # Configuration accessors - auto-discovered if not set
41
+ attr_writer :gem_name, :gemspec_file, :version_file
42
+
43
+ # Loads all devtools Rake tasks into the current application.
44
+ #
45
+ # Consumer gems need shared tasks for linting, testing, and licensing.
46
+ # Manually copying rake files is tedious and leads to drift. Call this
47
+ # once in your Rakefile to import all devtools tasks.
48
+ #
49
+ # === Example
50
+ #
51
+ # require "ratatui_ruby/devtools"
52
+ # RatatuiRuby::Devtools.install!
53
+ #
54
+ def install!
55
+ tasks_dir = File.expand_path("devtools/tasks", __dir__)
56
+ Dir.glob("#{tasks_dir}/*.rake").each do |task_file|
57
+ Rake.application.add_import(task_file)
58
+ end
59
+ Rake.application.load_imports
60
+ end
61
+
62
+ # Returns the gem name, auto-discovered from gemspec if not set.
63
+ #
64
+ # Tasks need to know which gem they're operating on. Auto-discovery from
65
+ # gemspec files means zero configuration for standard layouts. Override
66
+ # via <tt>gem_name=</tt> if needed.
67
+ def gem_name
68
+ @gem_name ||= discover_gem_name
69
+ end
70
+
71
+ # Returns the path to the gemspec file.
72
+ #
73
+ # Tasks parse the gemspec for metadata. Auto-discovery finds the single
74
+ # <tt>.gemspec</tt> file in the project root. Override via
75
+ # <tt>gemspec_file=</tt> for non-standard layouts.
76
+ def gemspec_file
77
+ @gemspec_file ||= discover_gemspec
78
+ end
79
+
80
+ # Returns the path to the version.rb file.
81
+ #
82
+ # Version bumping needs the version file location. Auto-discovery finds
83
+ # it in the standard <tt>lib/*/</tt> path. Override via
84
+ # <tt>version_file=</tt> for non-standard layouts.
85
+ def version_file
86
+ @version_file ||= discover_version_file
87
+ end
88
+
89
+ # Returns the path to the templates directory.
90
+ #
91
+ # Scaffolding commands copy files from templates. This method provides
92
+ # the absolute path regardless of caller location.
93
+ def templates_path
94
+ File.expand_path("devtools/templates", __dir__)
95
+ end
96
+
97
+ # Returns the path to the tasks directory.
98
+ #
99
+ # Debug and introspection tools may need to list available tasks. This
100
+ # method provides the absolute path regardless of caller location.
101
+ def tasks_path
102
+ File.expand_path("devtools/tasks", __dir__)
103
+ end
104
+
105
+ private def discover_gemspec
106
+ gemspecs = Dir.glob("*.gemspec")
107
+ raise Error, "No *.gemspec found in #{Dir.pwd}" if gemspecs.empty?
108
+ raise Error, "Multiple gemspecs found: #{gemspecs.join(', ')}" if gemspecs.size > 1
109
+
110
+ gemspecs.first
111
+ end
112
+
113
+ private def discover_gem_name
114
+ File.basename(gemspec_file, ".gemspec")
115
+ end
116
+
117
+ private def discover_version_file
118
+ # Convention: lib/gem_name/version.rb (with underscores for namespacing)
119
+ # e.g., ratatui_ruby-tea -> lib/ratatui_ruby/tea/version.rb
120
+ parts = gem_name.split("-")
121
+ if parts.size > 1
122
+ # ratatui_ruby-tea -> ratatui_ruby/tea
123
+ path = "lib/#{parts.first}/#{parts[1..].join('/')}/version.rb"
124
+ else
125
+ # ratatui_ruby -> ratatui_ruby
126
+ path = "lib/#{gem_name}/version.rb"
127
+ end
128
+
129
+ return path if File.exist?(path)
130
+
131
+ # Fallback: search for any version.rb in lib/
132
+ found = Dir.glob("lib/**/version.rb").first
133
+ found || path
134
+ end
135
+ end
136
+ end
137
+ end
data/mise.toml ADDED
@@ -0,0 +1,7 @@
1
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ [tools]
5
+ ruby = "4.0.0"
6
+ python = "3.12"
7
+ pre-commit = "latest"
@@ -0,0 +1,15 @@
1
+ # SPDX-FileCopyrightText: 2026 Kerrick Long <me@kerricklong.com>
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ module RatatuiRuby
5
+ module Devtools
6
+ VERSION: String
7
+
8
+ class Error < StandardError
9
+ end
10
+
11
+ def self.install!: () -> void
12
+ def self.templates_path: () -> String
13
+ def self.tasks_path: () -> String
14
+ end
15
+ end