ratatui_ruby 0.2.0 → 0.3.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 +2 -2
- data/.builds/ruby-3.3.yml +2 -2
- data/.builds/ruby-3.4.yml +2 -2
- data/.builds/{ruby-4.0.0-preview3.yml → ruby-4.0.0.yml} +5 -5
- data/.pre-commit-config.yaml +9 -2
- data/AGENTS.md +51 -3
- data/CHANGELOG.md +51 -1
- data/README.md +7 -7
- data/REUSE.toml +1 -1
- data/{docs → doc}/contributors/index.md +2 -1
- data/doc/custom.css +8 -0
- data/doc/images/examples-custom_widget.rb.png +0 -0
- data/doc/images/examples-popup_demo.rb.gif +0 -0
- data/doc/images/examples-scroll_text.rb.png +0 -0
- data/doc/images/examples-table_select.rb.png +0 -0
- data/{docs → doc}/index.md +1 -1
- data/{docs → doc}/quickstart.md +24 -0
- data/examples/custom_widget.rb +43 -0
- data/examples/popup_demo.rb +105 -0
- data/examples/scroll_text.rb +74 -0
- data/examples/table_select.rb +70 -0
- data/examples/test_popup_demo.rb +62 -0
- data/examples/test_scroll_text.rb +130 -0
- data/examples/test_table_select.rb +37 -0
- data/ext/ratatui_ruby/Cargo.lock +167 -50
- data/ext/ratatui_ruby/Cargo.toml +4 -4
- data/ext/ratatui_ruby/src/buffer.rs +54 -0
- data/ext/ratatui_ruby/src/events.rs +111 -106
- data/ext/ratatui_ruby/src/lib.rs +15 -6
- data/ext/ratatui_ruby/src/rendering.rs +14 -0
- data/ext/ratatui_ruby/src/style.rs +2 -1
- data/ext/ratatui_ruby/src/terminal.rs +24 -19
- data/ext/ratatui_ruby/src/widgets/calendar.rs +4 -3
- data/ext/ratatui_ruby/src/widgets/canvas.rs +1 -2
- data/ext/ratatui_ruby/src/widgets/center.rs +0 -2
- data/ext/ratatui_ruby/src/widgets/chart.rs +11 -4
- data/ext/ratatui_ruby/src/widgets/clear.rs +37 -0
- data/ext/ratatui_ruby/src/widgets/cursor.rs +1 -1
- data/ext/ratatui_ruby/src/widgets/layout.rs +2 -1
- data/ext/ratatui_ruby/src/widgets/list.rs +6 -4
- data/ext/ratatui_ruby/src/widgets/mod.rs +1 -0
- data/ext/ratatui_ruby/src/widgets/overlay.rs +2 -1
- data/ext/ratatui_ruby/src/widgets/paragraph.rs +10 -0
- data/ext/ratatui_ruby/src/widgets/table.rs +25 -6
- data/ext/ratatui_ruby/src/widgets/tabs.rs +2 -1
- data/lib/ratatui_ruby/dsl.rb +2 -0
- data/lib/ratatui_ruby/schema/clear.rb +83 -0
- data/lib/ratatui_ruby/schema/paragraph.rb +7 -4
- data/lib/ratatui_ruby/schema/rect.rb +24 -0
- data/lib/ratatui_ruby/schema/table.rb +8 -2
- data/lib/ratatui_ruby/version.rb +1 -1
- data/lib/ratatui_ruby.rb +3 -1
- data/sig/ratatui_ruby/buffer.rbs +11 -0
- data/sig/ratatui_ruby/schema/rect.rbs +14 -0
- data/tasks/bump/changelog.rb +37 -0
- data/tasks/bump/comparison_links.rb +41 -0
- data/tasks/bump/header.rb +30 -0
- data/tasks/bump/history.rb +30 -0
- data/tasks/bump/manifest.rb +8 -0
- data/tasks/bump/ruby_gem.rb +6 -10
- data/tasks/bump/sem_ver.rb +6 -0
- data/tasks/bump/unreleased_section.rb +38 -0
- data/tasks/bump.rake +5 -1
- data/tasks/doc.rake +5 -4
- data/tasks/resources/build.yml.erb +1 -1
- data/tasks/resources/rubies.yml +1 -1
- data/tasks/sourcehut.rake +11 -2
- data/tasks/website/version.rb +1 -0
- data/tasks/website/version_menu.rb +68 -0
- data/tasks/website/versioned_documentation.rb +2 -1
- data/tasks/website/website.rb +4 -1
- data/tasks/website.rake +3 -3
- metadata +75 -25
- data/CODE_OF_CONDUCT.md +0 -30
- data/CONTRIBUTING.md +0 -40
- /data/{docs → doc}/application_testing.md +0 -0
- /data/{docs → doc}/contributors/design/ruby_frontend.md +0 -0
- /data/{docs → doc}/contributors/design/rust_backend.md +0 -0
- /data/{docs → doc}/contributors/design.md +0 -0
- /data/{docs → doc}/images/examples-analytics.rb.png +0 -0
- /data/{docs → doc}/images/examples-box_demo.rb.png +0 -0
- /data/{docs → doc}/images/examples-calendar_demo.rb.png +0 -0
- /data/{docs → doc}/images/examples-chart_demo.rb.png +0 -0
- /data/{docs → doc}/images/examples-dashboard.rb.png +0 -0
- /data/{docs → doc}/images/examples-list_styles.rb.png +0 -0
- /data/{docs → doc}/images/examples-login_form.rb.png +0 -0
- /data/{docs → doc}/images/examples-map_demo.rb.png +0 -0
- /data/{docs → doc}/images/examples-mouse_events.rb.png +0 -0
- /data/{docs → doc}/images/examples-quickstart_lifecycle.rb.png +0 -0
- /data/{docs → doc}/images/examples-scrollbar_demo.rb.png +0 -0
- /data/{docs → doc}/images/examples-stock_ticker.rb.png +0 -0
- /data/{docs → doc}/images/examples-system_monitor.rb.png +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
# History manages the versioned history of the changelog.
|
|
7
|
+
class History
|
|
8
|
+
# Extracts the history section from the given content, between unreleased and links.
|
|
9
|
+
def self.parse(content, header_length, unreleased_length, links_text)
|
|
10
|
+
start = header_length + unreleased_length
|
|
11
|
+
text = content[start...content.index(links_text)].strip + "\n"
|
|
12
|
+
new(text)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Creates a new History from the given content.
|
|
16
|
+
def initialize(content)
|
|
17
|
+
@content = content.dup
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Adds a new versioned section to the history.
|
|
21
|
+
def add(section)
|
|
22
|
+
@content = "#{section}\n\n#{@content}".strip + "\n"
|
|
23
|
+
nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Returns the current state of the history as a string.
|
|
27
|
+
def to_s
|
|
28
|
+
@content
|
|
29
|
+
end
|
|
30
|
+
end
|
data/tasks/bump/manifest.rb
CHANGED
|
@@ -14,6 +14,14 @@ class Manifest < Data.define(:path, :pattern, :primary)
|
|
|
14
14
|
super
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
def version
|
|
18
|
+
content = read
|
|
19
|
+
match = content.match(pattern)
|
|
20
|
+
raise "Version missing in manifest #{path}" unless match
|
|
21
|
+
|
|
22
|
+
SemVer.parse(match[0])
|
|
23
|
+
end
|
|
24
|
+
|
|
17
25
|
def write(version)
|
|
18
26
|
return unless File.exist?(path)
|
|
19
27
|
|
data/tasks/bump/ruby_gem.rb
CHANGED
|
@@ -4,35 +4,31 @@
|
|
|
4
4
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
5
|
|
|
6
6
|
class RubyGem
|
|
7
|
-
def initialize(manifests:, lockfile:)
|
|
7
|
+
def initialize(manifests:, lockfile:, changelog:)
|
|
8
8
|
raise ArgumentError, "Must have exactly one primary manifest" unless manifests.count(&:primary) == 1
|
|
9
9
|
@manifests = manifests
|
|
10
10
|
@lockfile = lockfile
|
|
11
|
+
@changelog = changelog
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def version
|
|
14
|
-
|
|
15
|
-
content = source.read
|
|
16
|
-
match = content.match(source.pattern)
|
|
17
|
-
raise "Version missing in manifest #{source.path}" unless match
|
|
18
|
-
|
|
19
|
-
segments = Gem::Version.new(match[0]).segments
|
|
20
|
-
SemVer.new(segments.fill(0, 3).first(3))
|
|
15
|
+
@manifests.find(&:primary).version
|
|
21
16
|
end
|
|
22
17
|
|
|
23
18
|
def bump(segment)
|
|
24
19
|
target = version.next(segment)
|
|
25
20
|
|
|
26
21
|
puts "Bumping #{segment}: #{version} -> #{target}"
|
|
22
|
+
@changelog.release(target)
|
|
27
23
|
@manifests.each { |manifest| manifest.write(target) }
|
|
28
24
|
@lockfile.refresh
|
|
29
25
|
end
|
|
30
26
|
|
|
31
27
|
def set(version_string)
|
|
32
|
-
|
|
33
|
-
target = SemVer.new(segments)
|
|
28
|
+
target = SemVer.parse(version_string)
|
|
34
29
|
|
|
35
30
|
puts "Setting version: #{version} -> #{target}"
|
|
31
|
+
@changelog.release(target)
|
|
36
32
|
@manifests.each { |manifest| manifest.write(target) }
|
|
37
33
|
@lockfile.refresh
|
|
38
34
|
end
|
data/tasks/bump/sem_ver.rb
CHANGED
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
class SemVer
|
|
8
8
|
SEGMENTS = [:major, :minor, :patch].freeze
|
|
9
9
|
|
|
10
|
+
def self.parse(string)
|
|
11
|
+
require "rubygems"
|
|
12
|
+
segments = Gem::Version.new(string).segments.fill(0, 3).first(3)
|
|
13
|
+
new(segments)
|
|
14
|
+
end
|
|
15
|
+
|
|
10
16
|
def initialize(segments)
|
|
11
17
|
@segments = segments
|
|
12
18
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
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 "date"
|
|
7
|
+
|
|
8
|
+
# UnreleasedSection manages the [Unreleased] section of the changelog.
|
|
9
|
+
class UnreleasedSection
|
|
10
|
+
PATTERN = /^(## \[Unreleased\].*?)(?=## \[\d)/m
|
|
11
|
+
|
|
12
|
+
# Extracts the unreleased section from the given content.
|
|
13
|
+
def self.parse(content)
|
|
14
|
+
match = content.match(PATTERN)
|
|
15
|
+
new(match[1].strip) if match
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Creates a new UnreleasedSection from the given unreleased content.
|
|
19
|
+
def initialize(content)
|
|
20
|
+
@content = content.dup
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns the unreleased content as a versioned section.
|
|
24
|
+
def as_version(new_version)
|
|
25
|
+
date = Date.today.iso8601
|
|
26
|
+
@content.sub(/^## \[Unreleased\]/, "## [#{new_version}] - #{date}")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Returns a fresh unreleased section.
|
|
30
|
+
def self.fresh
|
|
31
|
+
new("## [Unreleased]\n\n### Added\n\n### Changed\n\n### Fixed\n\n### Removed")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Returns the current state of the section as a string.
|
|
35
|
+
def to_s
|
|
36
|
+
@content
|
|
37
|
+
end
|
|
38
|
+
end
|
data/tasks/bump.rake
CHANGED
|
@@ -9,6 +9,7 @@ require_relative "bump/sem_ver"
|
|
|
9
9
|
require_relative "bump/manifest"
|
|
10
10
|
require_relative "bump/cargo_lockfile"
|
|
11
11
|
require_relative "bump/ruby_gem"
|
|
12
|
+
require_relative "bump/changelog"
|
|
12
13
|
|
|
13
14
|
namespace :bump do
|
|
14
15
|
ratatuiRuby = RubyGem.new(
|
|
@@ -28,18 +29,21 @@ namespace :bump do
|
|
|
28
29
|
path: "ext/ratatui_ruby/Cargo.lock",
|
|
29
30
|
dir: "ext/ratatui_ruby",
|
|
30
31
|
name: "ratatui_ruby"
|
|
31
|
-
)
|
|
32
|
+
),
|
|
33
|
+
changelog: Changelog.new
|
|
32
34
|
)
|
|
33
35
|
|
|
34
36
|
SemVer::SEGMENTS.each do |segment|
|
|
35
37
|
desc "Bump #{segment} version"
|
|
36
38
|
task segment do
|
|
37
39
|
ratatuiRuby.bump(segment)
|
|
40
|
+
Rake::Task["sourcehut"].invoke
|
|
38
41
|
end
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
desc "Set exact version (e.g. rake bump:exact[0.1.0])"
|
|
42
45
|
task :exact, [:version] do |_, args|
|
|
43
46
|
ratatuiRuby.set(args[:version])
|
|
47
|
+
Rake::Task["sourcehut"].invoke
|
|
44
48
|
end
|
|
45
49
|
end
|
data/tasks/doc.rake
CHANGED
|
@@ -8,15 +8,16 @@ require "rdoc/task"
|
|
|
8
8
|
require_relative "rdoc_config"
|
|
9
9
|
|
|
10
10
|
RDoc::Task.new do |rdoc|
|
|
11
|
-
rdoc.rdoc_dir = "
|
|
11
|
+
rdoc.rdoc_dir = "tmp/rdoc"
|
|
12
12
|
rdoc.main = RDocConfig::MAIN
|
|
13
13
|
rdoc.rdoc_files.include(RDocConfig::RDOC_FILES)
|
|
14
|
+
rdoc.options << "--template-stylesheets=doc/custom.css"
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
task :copy_doc_images do
|
|
17
|
-
if Dir.exist?("
|
|
18
|
-
FileUtils.mkdir_p "doc/
|
|
19
|
-
FileUtils.cp_r Dir["
|
|
18
|
+
if Dir.exist?("doc/images")
|
|
19
|
+
FileUtils.mkdir_p "tmp/rdoc/doc/images"
|
|
20
|
+
FileUtils.cp_r Dir["doc/images/*.png"], "tmp/rdoc/doc/images"
|
|
20
21
|
end
|
|
21
22
|
end
|
|
22
23
|
|
|
@@ -31,7 +31,7 @@ tasks:
|
|
|
31
31
|
sed -i 's/ruby = .*/ruby = "<%= ruby_version %>"/' mise.toml
|
|
32
32
|
mise install
|
|
33
33
|
mise x -- pip install reuse
|
|
34
|
-
mise x -- gem install bundler
|
|
34
|
+
mise x -- gem install bundler:<%= bundler_version %>
|
|
35
35
|
mise reshim
|
|
36
36
|
mise x -- bundle config set --local frozen 'true'
|
|
37
37
|
mise x -- bundle install
|
data/tasks/resources/rubies.yml
CHANGED
data/tasks/sourcehut.rake
CHANGED
|
@@ -9,9 +9,18 @@ task :sourcehut do
|
|
|
9
9
|
require "yaml"
|
|
10
10
|
|
|
11
11
|
spec = Gem::Specification.load("ratatui_ruby.gemspec")
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
# Read version directly from file to ensure we get the latest version
|
|
14
|
+
# even if it was just bumped in the same Rake execution
|
|
15
|
+
version_content = File.read("lib/ratatui_ruby/version.rb")
|
|
16
|
+
version = version_content.match(/VERSION = "(.+?)"/)[1]
|
|
17
|
+
|
|
18
|
+
gem_filename = "#{spec.name}-#{version}.gem"
|
|
13
19
|
|
|
14
20
|
rubies = YAML.load_file("tasks/resources/rubies.yml")
|
|
21
|
+
|
|
22
|
+
bundler_version = File.read("Gemfile.lock").match(/BUNDLED WITH\n\s+([\d.]+)/)[1]
|
|
23
|
+
|
|
15
24
|
template = File.read("tasks/resources/build.yml.erb")
|
|
16
25
|
erb = ERB.new(template, trim_mode: "-")
|
|
17
26
|
|
|
@@ -23,7 +32,7 @@ task :sourcehut do
|
|
|
23
32
|
rubies.each do |ruby_version|
|
|
24
33
|
filename = ".builds/ruby-#{ruby_version}.yml"
|
|
25
34
|
puts "Generating #{filename}..."
|
|
26
|
-
content = erb.result_with_hash(ruby_version:, gem_filename:)
|
|
35
|
+
content = erb.result_with_hash(ruby_version:, gem_filename:, bundler_version:)
|
|
27
36
|
File.write(filename, content)
|
|
28
37
|
end
|
|
29
38
|
end
|
data/tasks/website/version.rb
CHANGED
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
class VersionMenu
|
|
7
|
+
def initialize(root:, versions:)
|
|
8
|
+
@root = root
|
|
9
|
+
@versions = versions
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def run
|
|
13
|
+
puts "Injecting version menu into generated HTML..."
|
|
14
|
+
|
|
15
|
+
# Process all HTML files in the output directory
|
|
16
|
+
Dir.glob(File.join(@root, "**/*.html")).each do |file|
|
|
17
|
+
inject_menu(file)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def inject_menu(file)
|
|
24
|
+
content = File.read(file)
|
|
25
|
+
|
|
26
|
+
# Find the injection point (before the theme toggle button)
|
|
27
|
+
pattern = /(<button[^>]*id="theme-toggle"[^>]*>)/mi
|
|
28
|
+
|
|
29
|
+
unless content.match?(pattern)
|
|
30
|
+
# warn "Could not find theme-toggle in #{file}"
|
|
31
|
+
return
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Calculate relative path to root from this file
|
|
35
|
+
file_dir = File.dirname(file)
|
|
36
|
+
relative_path_to_root = Pathname.new(@root).relative_path_from(Pathname.new(file_dir)).to_s
|
|
37
|
+
relative_path_to_root += "/" unless relative_path_to_root.end_with?("/")
|
|
38
|
+
|
|
39
|
+
# Determine current version from file path
|
|
40
|
+
relative_path_from_root = Pathname.new(file).relative_path_from(Pathname.new(@root)).to_s
|
|
41
|
+
current_version_slug = relative_path_from_root.split("/").first
|
|
42
|
+
|
|
43
|
+
# Build options
|
|
44
|
+
options = @versions.map do |version|
|
|
45
|
+
value = "#{relative_path_to_root}#{version.slug}/index.html"
|
|
46
|
+
selected = (version.slug == current_version_slug) ? "selected" : ""
|
|
47
|
+
display_name = version.name
|
|
48
|
+
display_name += " (latest)" if version.respond_to?(:latest?) && version.latest?
|
|
49
|
+
display_name += " (dev)" if version.edge?
|
|
50
|
+
|
|
51
|
+
%Q{<option value="#{value}" #{selected}>#{display_name}</option>}
|
|
52
|
+
end.join("\n")
|
|
53
|
+
|
|
54
|
+
# margin-left: auto pushes it to the right
|
|
55
|
+
# margin-right: 1rem spacing from the theme toggle
|
|
56
|
+
switcher_html = <<~HTML
|
|
57
|
+
<select class="version-menu" onchange="window.location.href=this.value" style="margin-left: auto; padding: 0.25rem; border-radius: 4px; border: 1px solid #ccc; margin-right: 1rem;">
|
|
58
|
+
#{options}
|
|
59
|
+
<option value="#{relative_path_to_root}index.html">All Versions</option>
|
|
60
|
+
</select>
|
|
61
|
+
HTML
|
|
62
|
+
|
|
63
|
+
# Inject before the button
|
|
64
|
+
new_content = content.sub(pattern, "#{switcher_html}\n\\1")
|
|
65
|
+
|
|
66
|
+
File.write(file, new_content)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -15,6 +15,7 @@ class VersionedDocumentation
|
|
|
15
15
|
|
|
16
16
|
absolute_path = File.absolute_path(path)
|
|
17
17
|
gemfile_path = File.absolute_path("Gemfile")
|
|
18
|
+
custom_css_path = File.absolute_path("doc/custom.css")
|
|
18
19
|
|
|
19
20
|
@version.checkout(globs: globs) do |source_path|
|
|
20
21
|
Dir.chdir(source_path) do
|
|
@@ -26,7 +27,7 @@ class VersionedDocumentation
|
|
|
26
27
|
|
|
27
28
|
system(
|
|
28
29
|
{ "BUNDLE_GEMFILE" => gemfile_path },
|
|
29
|
-
"bundle exec rdoc -o #{absolute_path} --main #{RDocConfig::MAIN} --title '#{title}' #{files.join(' ')}"
|
|
30
|
+
"bundle exec rdoc -o #{absolute_path} --main #{RDocConfig::MAIN} --title '#{title}' --template-stylesheets \"#{custom_css_path}\" #{files.join(' ')}"
|
|
30
31
|
)
|
|
31
32
|
|
|
32
33
|
copy_assets_to(absolute_path, assets)
|
data/tasks/website/website.rb
CHANGED
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
require_relative "version"
|
|
7
7
|
require_relative "versioned_documentation"
|
|
8
8
|
require_relative "index_page"
|
|
9
|
+
require_relative "version_menu"
|
|
9
10
|
require "fileutils"
|
|
10
11
|
|
|
11
12
|
class Website
|
|
12
|
-
def initialize(at: "
|
|
13
|
+
def initialize(at: "www", project_name:, globs:, assets: [])
|
|
13
14
|
@destination = at
|
|
14
15
|
@project_name = project_name
|
|
15
16
|
@globs = globs
|
|
@@ -30,6 +31,8 @@ class Website
|
|
|
30
31
|
|
|
31
32
|
IndexPage.new(versions).publish_to(join("index.html"), project_name: @project_name)
|
|
32
33
|
|
|
34
|
+
VersionMenu.new(root: @destination, versions: versions).run
|
|
35
|
+
|
|
33
36
|
puts "Website built in #{@destination}/"
|
|
34
37
|
end
|
|
35
38
|
|
data/tasks/website.rake
CHANGED
|
@@ -14,13 +14,13 @@ namespace :website do
|
|
|
14
14
|
require_relative "website/website"
|
|
15
15
|
|
|
16
16
|
spec = Gem::Specification.load(Dir["*.gemspec"].first)
|
|
17
|
-
globs = RDocConfig::RDOC_FILES + ["*.gemspec", "
|
|
17
|
+
globs = RDocConfig::RDOC_FILES + ["*.gemspec", "doc/images/**/*"]
|
|
18
18
|
|
|
19
19
|
Website.new(
|
|
20
|
-
at: "
|
|
20
|
+
at: "www",
|
|
21
21
|
project_name: spec.name,
|
|
22
22
|
globs: globs,
|
|
23
|
-
assets: ["
|
|
23
|
+
assets: ["doc/images"] # directories to copy
|
|
24
24
|
).build
|
|
25
25
|
end
|
|
26
26
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ratatui_ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kerrick Long
|
|
@@ -23,6 +23,20 @@ dependencies:
|
|
|
23
23
|
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '0.9'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: ostruct
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0.6'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0.6'
|
|
26
40
|
- !ruby/object:Gem::Dependency
|
|
27
41
|
name: rake-compiler
|
|
28
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -37,6 +51,20 @@ dependencies:
|
|
|
37
51
|
- - "~>"
|
|
38
52
|
- !ruby/object:Gem::Version
|
|
39
53
|
version: '1.2'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rdoc
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '7.0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '7.0'
|
|
40
68
|
description: ratatui_ruby is a wrapper for the Ratatui Rust crate <https://ratatui.rs>.
|
|
41
69
|
It allows you to cook up Terminal User Interfaces in Ruby.
|
|
42
70
|
email:
|
|
@@ -49,13 +77,11 @@ files:
|
|
|
49
77
|
- ".builds/ruby-3.2.yml"
|
|
50
78
|
- ".builds/ruby-3.3.yml"
|
|
51
79
|
- ".builds/ruby-3.4.yml"
|
|
52
|
-
- ".builds/ruby-4.0.0
|
|
80
|
+
- ".builds/ruby-4.0.0.yml"
|
|
53
81
|
- ".pre-commit-config.yaml"
|
|
54
82
|
- ".rubocop.yml"
|
|
55
83
|
- AGENTS.md
|
|
56
84
|
- CHANGELOG.md
|
|
57
|
-
- CODE_OF_CONDUCT.md
|
|
58
|
-
- CONTRIBUTING.md
|
|
59
85
|
- LICENSE
|
|
60
86
|
- LICENSES/AGPL-3.0-or-later.txt
|
|
61
87
|
- LICENSES/BSD-2-Clause.txt
|
|
@@ -65,41 +91,50 @@ files:
|
|
|
65
91
|
- README.md
|
|
66
92
|
- REUSE.toml
|
|
67
93
|
- Rakefile
|
|
68
|
-
-
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
94
|
+
- doc/application_testing.md
|
|
95
|
+
- doc/contributors/design.md
|
|
96
|
+
- doc/contributors/design/ruby_frontend.md
|
|
97
|
+
- doc/contributors/design/rust_backend.md
|
|
98
|
+
- doc/contributors/index.md
|
|
99
|
+
- doc/custom.css
|
|
100
|
+
- doc/images/examples-analytics.rb.png
|
|
101
|
+
- doc/images/examples-box_demo.rb.png
|
|
102
|
+
- doc/images/examples-calendar_demo.rb.png
|
|
103
|
+
- doc/images/examples-chart_demo.rb.png
|
|
104
|
+
- doc/images/examples-custom_widget.rb.png
|
|
105
|
+
- doc/images/examples-dashboard.rb.png
|
|
106
|
+
- doc/images/examples-list_styles.rb.png
|
|
107
|
+
- doc/images/examples-login_form.rb.png
|
|
108
|
+
- doc/images/examples-map_demo.rb.png
|
|
109
|
+
- doc/images/examples-mouse_events.rb.png
|
|
110
|
+
- doc/images/examples-popup_demo.rb.gif
|
|
111
|
+
- doc/images/examples-quickstart_lifecycle.rb.png
|
|
112
|
+
- doc/images/examples-scroll_text.rb.png
|
|
113
|
+
- doc/images/examples-scrollbar_demo.rb.png
|
|
114
|
+
- doc/images/examples-stock_ticker.rb.png
|
|
115
|
+
- doc/images/examples-system_monitor.rb.png
|
|
116
|
+
- doc/images/examples-table_select.rb.png
|
|
117
|
+
- doc/index.md
|
|
118
|
+
- doc/quickstart.md
|
|
88
119
|
- examples/analytics.rb
|
|
89
120
|
- examples/box_demo.rb
|
|
90
121
|
- examples/calendar_demo.rb
|
|
91
122
|
- examples/chart_demo.rb
|
|
123
|
+
- examples/custom_widget.rb
|
|
92
124
|
- examples/dashboard.rb
|
|
93
125
|
- examples/list_styles.rb
|
|
94
126
|
- examples/login_form.rb
|
|
95
127
|
- examples/map_demo.rb
|
|
96
128
|
- examples/mouse_events.rb
|
|
129
|
+
- examples/popup_demo.rb
|
|
97
130
|
- examples/quickstart_dsl.rb
|
|
98
131
|
- examples/quickstart_lifecycle.rb
|
|
99
132
|
- examples/readme_usage.rb
|
|
133
|
+
- examples/scroll_text.rb
|
|
100
134
|
- examples/scrollbar_demo.rb
|
|
101
135
|
- examples/stock_ticker.rb
|
|
102
136
|
- examples/system_monitor.rb
|
|
137
|
+
- examples/table_select.rb
|
|
103
138
|
- examples/test_analytics.rb
|
|
104
139
|
- examples/test_box_demo.rb
|
|
105
140
|
- examples/test_calendar_demo.rb
|
|
@@ -107,13 +142,17 @@ files:
|
|
|
107
142
|
- examples/test_list_styles.rb
|
|
108
143
|
- examples/test_login_form.rb
|
|
109
144
|
- examples/test_map_demo.rb
|
|
145
|
+
- examples/test_popup_demo.rb
|
|
146
|
+
- examples/test_scroll_text.rb
|
|
110
147
|
- examples/test_stock_ticker.rb
|
|
111
148
|
- examples/test_system_monitor.rb
|
|
149
|
+
- examples/test_table_select.rb
|
|
112
150
|
- ext/ratatui_ruby/.cargo/config.toml
|
|
113
151
|
- ext/ratatui_ruby/.gitignore
|
|
114
152
|
- ext/ratatui_ruby/Cargo.lock
|
|
115
153
|
- ext/ratatui_ruby/Cargo.toml
|
|
116
154
|
- ext/ratatui_ruby/extconf.rb
|
|
155
|
+
- ext/ratatui_ruby/src/buffer.rs
|
|
117
156
|
- ext/ratatui_ruby/src/events.rs
|
|
118
157
|
- ext/ratatui_ruby/src/lib.rs
|
|
119
158
|
- ext/ratatui_ruby/src/rendering.rs
|
|
@@ -125,6 +164,7 @@ files:
|
|
|
125
164
|
- ext/ratatui_ruby/src/widgets/canvas.rs
|
|
126
165
|
- ext/ratatui_ruby/src/widgets/center.rs
|
|
127
166
|
- ext/ratatui_ruby/src/widgets/chart.rs
|
|
167
|
+
- ext/ratatui_ruby/src/widgets/clear.rs
|
|
128
168
|
- ext/ratatui_ruby/src/widgets/cursor.rs
|
|
129
169
|
- ext/ratatui_ruby/src/widgets/gauge.rs
|
|
130
170
|
- ext/ratatui_ruby/src/widgets/layout.rs
|
|
@@ -145,6 +185,7 @@ files:
|
|
|
145
185
|
- lib/ratatui_ruby/schema/canvas.rb
|
|
146
186
|
- lib/ratatui_ruby/schema/center.rb
|
|
147
187
|
- lib/ratatui_ruby/schema/chart.rb
|
|
188
|
+
- lib/ratatui_ruby/schema/clear.rb
|
|
148
189
|
- lib/ratatui_ruby/schema/constraint.rb
|
|
149
190
|
- lib/ratatui_ruby/schema/cursor.rb
|
|
150
191
|
- lib/ratatui_ruby/schema/gauge.rb
|
|
@@ -152,6 +193,7 @@ files:
|
|
|
152
193
|
- lib/ratatui_ruby/schema/list.rb
|
|
153
194
|
- lib/ratatui_ruby/schema/overlay.rb
|
|
154
195
|
- lib/ratatui_ruby/schema/paragraph.rb
|
|
196
|
+
- lib/ratatui_ruby/schema/rect.rb
|
|
155
197
|
- lib/ratatui_ruby/schema/scrollbar.rb
|
|
156
198
|
- lib/ratatui_ruby/schema/sparkline.rb
|
|
157
199
|
- lib/ratatui_ruby/schema/style.rb
|
|
@@ -160,6 +202,7 @@ files:
|
|
|
160
202
|
- lib/ratatui_ruby/test_helper.rb
|
|
161
203
|
- lib/ratatui_ruby/version.rb
|
|
162
204
|
- mise.toml
|
|
205
|
+
- sig/ratatui_ruby/buffer.rbs
|
|
163
206
|
- sig/ratatui_ruby/ratatui_ruby.rbs
|
|
164
207
|
- sig/ratatui_ruby/schema/bar_chart.rbs
|
|
165
208
|
- sig/ratatui_ruby/schema/block.rbs
|
|
@@ -174,6 +217,7 @@ files:
|
|
|
174
217
|
- sig/ratatui_ruby/schema/list.rbs
|
|
175
218
|
- sig/ratatui_ruby/schema/overlay.rbs
|
|
176
219
|
- sig/ratatui_ruby/schema/paragraph.rbs
|
|
220
|
+
- sig/ratatui_ruby/schema/rect.rbs
|
|
177
221
|
- sig/ratatui_ruby/schema/scrollbar.rbs
|
|
178
222
|
- sig/ratatui_ruby/schema/sparkline.rbs
|
|
179
223
|
- sig/ratatui_ruby/schema/style.rbs
|
|
@@ -183,9 +227,14 @@ files:
|
|
|
183
227
|
- sig/ratatui_ruby/version.rbs
|
|
184
228
|
- tasks/bump.rake
|
|
185
229
|
- tasks/bump/cargo_lockfile.rb
|
|
230
|
+
- tasks/bump/changelog.rb
|
|
231
|
+
- tasks/bump/comparison_links.rb
|
|
232
|
+
- tasks/bump/header.rb
|
|
233
|
+
- tasks/bump/history.rb
|
|
186
234
|
- tasks/bump/manifest.rb
|
|
187
235
|
- tasks/bump/ruby_gem.rb
|
|
188
236
|
- tasks/bump/sem_ver.rb
|
|
237
|
+
- tasks/bump/unreleased_section.rb
|
|
189
238
|
- tasks/doc.rake
|
|
190
239
|
- tasks/extension.rake
|
|
191
240
|
- tasks/lint.rake
|
|
@@ -198,6 +247,7 @@ files:
|
|
|
198
247
|
- tasks/website.rake
|
|
199
248
|
- tasks/website/index_page.rb
|
|
200
249
|
- tasks/website/version.rb
|
|
250
|
+
- tasks/website/version_menu.rb
|
|
201
251
|
- tasks/website/versioned_documentation.rb
|
|
202
252
|
- tasks/website/website.rb
|
|
203
253
|
- vendor/goodcop/base.yml
|
|
@@ -211,7 +261,7 @@ metadata:
|
|
|
211
261
|
changelog_uri: https://git.sr.ht/~kerrick/ratatui_ruby/tree/main/item/CHANGELOG.md
|
|
212
262
|
mailing_list_uri: https://lists.sr.ht/~kerrick/ratatui_ruby-discuss
|
|
213
263
|
source_code_uri: https://git.sr.ht/~kerrick/ratatui_ruby
|
|
214
|
-
documentation_uri: https://git.sr.ht/~kerrick/ratatui_ruby/tree/HEAD/
|
|
264
|
+
documentation_uri: https://git.sr.ht/~kerrick/ratatui_ruby/tree/HEAD/doc/index.md
|
|
215
265
|
wiki_uri: https://man.sr.ht/~kerrick/ratatui_ruby/
|
|
216
266
|
funding_uri: https://opencollective.com/ratatui
|
|
217
267
|
rdoc_options: []
|
data/CODE_OF_CONDUCT.md
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
3
|
-
SPDX-License-Identifier: CC-BY-SA-4.0
|
|
4
|
-
-->
|
|
5
|
-
# **ratatui_ruby** Code of Conduct
|
|
6
|
-
|
|
7
|
-
This project is intended to be a safe, productive collaboration, and contributors are expected to adhere to the [Ruby Community Conduct Guideline](https://www.ruby-lang.org/en/conduct/).
|
|
8
|
-
|
|
9
|
-
For your convenience, it is reproduced below. If this document ever falls out of date and/or conflicts with the linked [Ruby Community Conduct Guideline](https://www.ruby-lang.org/en/conduct/) document, the linked document takes precedence.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<!-- SPDX-SnippetBegin -->
|
|
13
|
-
<!--
|
|
14
|
-
SPDX-FileCopyrightText: 2016 Yukihiro Matsumoto <matz@netlab.jp>
|
|
15
|
-
SPDX-License-Identifier: BSD-2-Clause
|
|
16
|
-
-->
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
## The Ruby Community Conduct Guideline
|
|
20
|
-
|
|
21
|
-
> **We have picked the following conduct guideline based on an early proposed draft of the PostgreSQL CoC, for Ruby developers community for safe, productive collaboration. Each Ruby related community (conference etc.) may pick their own Code of Conduct.**
|
|
22
|
-
>
|
|
23
|
-
> This document provides community guidelines for a safe, respectful, productive, and collaborative place for any person who is willing to contribute to the Ruby community. It applies to all “collaborative space”, which is defined as community communications channels (such as mailing lists, submitted patches, commit comments, etc.).
|
|
24
|
-
>
|
|
25
|
-
> - Participants will be tolerant of opposing views.
|
|
26
|
-
> - Participants must ensure that their language and actions are free of personal attacks and disparaging personal remarks.
|
|
27
|
-
> - When interpreting the words and actions of others, participants should always assume good intentions.
|
|
28
|
-
> - Behaviour which can be reasonably considered harassment will not be tolerated.
|
|
29
|
-
|
|
30
|
-
<!-- SPDX-SnippetEnd -->
|
data/CONTRIBUTING.md
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
|
|
3
|
-
SPDX-License-Identifier: CC-BY-SA-4.0
|
|
4
|
-
-->
|
|
5
|
-
# Contribution Guide
|
|
6
|
-
|
|
7
|
-
This project is intended to be a safe, productive collaboration, and contributors are expected to adhere to the [Ruby Community Conduct Guideline](https://www.ruby-lang.org/en/conduct/).
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
## Reporting Issues
|
|
11
|
-
|
|
12
|
-
Bug reports are welcome on [sourcehut](https://sourcehut.org) at https://todo.sr.ht/~kerrick/ratatui_ruby.
|
|
13
|
-
|
|
14
|
-
Issues for Ratatui should be filed at [ratatui/ratatui](https://github.com/ratatui/ratatui).
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
## Requesting Features
|
|
18
|
-
|
|
19
|
-
ratatui_ruby aims to wrap all [Ratatui](https://ratatui.rs) features. Please request new features there.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
## Pull Requests
|
|
23
|
-
|
|
24
|
-
Please join our **devel** mailing list at https://lists.sr.ht/~kerrick/ratatui_ruby-devel. Then, send a pull request via email to the mailing list.
|
|
25
|
-
|
|
26
|
-
The easiest way to send a pull request via email is to use [git-send-email](https://git-scm.com/docs/git-send-email). If you are unfamiliar with using git to send a pull request via email, read the [four-step tutorial at git-send-email.io](https://git-send-email.io).
|
|
27
|
-
|
|
28
|
-
Alternatively, [sourcehut](https://sourcehut.org) has a web UI you can use to prepare the email to send. [Read their documentation](https://man.sr.ht/git.sr.ht/#sending-patches-upstream) to find out if this is right for you.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
## Development
|
|
32
|
-
|
|
33
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
34
|
-
|
|
35
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## Contributors’ Documentation
|
|
39
|
-
|
|
40
|
-
We have documentation on how **ratatui_ruby** works internally, how it is designed, and how it interacts with the official Ratatui projects. See the [contributors’ documentation index](docs/contributors/index.md) for more information.
|
|
File without changes
|