Skip to content

feat: add RubyGems registry support#43

Open
mvanhorn wants to merge 1 commit intovercel-labs:mainfrom
mvanhorn:feat/rubygems-registry
Open

feat: add RubyGems registry support#43
mvanhorn wants to merge 1 commit intovercel-labs:mainfrom
mvanhorn:feat/rubygems-registry

Conversation

@mvanhorn
Copy link
Copy Markdown

@mvanhorn mvanhorn commented Apr 9, 2026

Summary

Adds gem:, ruby:, and rubygems: prefixes to fetch Ruby gem source code via rubygems.org API. Follows the existing registry pattern used by npm, PyPI, and crates.io.

Usage

opensrc path gem:rails
opensrc path ruby:sidekiq
opensrc path gem:nokogiri@1.16.0

Also adds --rubygems flag to opensrc clean and shows RubyGems in opensrc list.

Demo

RubyGems demo

How it works

The rubygems.org API (/api/v1/gems/{name}.json) returns source_code_uri which maps directly to a git clone URL. Falls back to homepage_uri if source_code_uri is absent, checking if it points to a known git host. Version-specific lookups use the v2 API (/api/v2/rubygems/{name}/versions/{version}.json).

normalize_repo_url (already in mod.rs) strips /tree/vX.Y.Z suffixes that rubygems.org sometimes appends to source_code_uri.

Changes

  • rubygems.rs - New registry module: parse_rubygems_spec and resolve_rubygem following the existing pattern
  • mod.rs - Add RubyGems variant to Registry enum, gem:, ruby:, rubygems: prefixes, extend parse_package_spec and resolve_package
  • main.rs - Add --rubygems flag to clean command
  • list.rs - Add RubyGems to the registries display and empty-state help text

Testing

3 new unit tests covering spec parsing (simple, versioned, hyphenated names). All 35 tests pass with --test-threads=1.

cargo test --manifest-path packages/opensrc/cli/Cargo.toml -- --test-threads=1
cargo clippy --manifest-path packages/opensrc/cli/Cargo.toml -- -D warnings
cargo fmt --manifest-path packages/opensrc/cli/Cargo.toml --check

This contribution was developed with AI assistance (Claude Code).

Add gem:, ruby:, and rubygems: prefixes to fetch Ruby gem source code
via rubygems.org API. Follows the existing registry pattern used by
npm, PyPI, and crates.io modules.

Usage:
  opensrc path gem:rails
  opensrc path ruby:sidekiq
  opensrc path gem:nokogiri@1.16.0

The RubyGems API returns source_code_uri which maps directly to a
git clone URL. Falls back to homepage_uri if source_code_uri is absent.

Also adds --rubygems flag to the clean command and RubyGems to list output.
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 9, 2026

@mvanhorn is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

Copy link
Copy Markdown

@vercel vercel Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Suggestion:

The fallback registry scan in remove.rs is missing Registry::RubyGems, preventing removal of RubyGems packages without an explicit gem: prefix.

Fix on Vercel

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant