{"id":21871675,"url":"https://github.com/paradoxv5/template-ruby-gem","last_synced_at":"2026-05-18T19:03:20.634Z","repository":{"id":138726023,"uuid":"534862698","full_name":"ParadoxV5/template-ruby-gem","owner":"ParadoxV5","description":"a moderate yet thorough template for a Ruby Gem project","archived":false,"fork":false,"pushed_at":"2025-06-08T04:53:14.000Z","size":180,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-08T05:42:44.057Z","etag":null,"topics":["ruby","ruby-gem","template"],"latest_commit_sha":null,"homepage":"https://paradoxv5.github.io/template-ruby-gem/","language":"Ruby","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"wtfpl","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ParadoxV5.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"ParadoxV5"}},"created_at":"2022-09-10T01:56:39.000Z","updated_at":"2025-06-08T04:53:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"d8bd875b-3408-4a89-8fb2-1ff03b1e5a6e","html_url":"https://github.com/ParadoxV5/template-ruby-gem","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/ParadoxV5/template-ruby-gem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParadoxV5%2Ftemplate-ruby-gem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParadoxV5%2Ftemplate-ruby-gem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParadoxV5%2Ftemplate-ruby-gem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParadoxV5%2Ftemplate-ruby-gem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ParadoxV5","download_url":"https://codeload.github.com/ParadoxV5/template-ruby-gem/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ParadoxV5%2Ftemplate-ruby-gem/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269780615,"owners_count":24474682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ruby","ruby-gem","template"],"created_at":"2024-11-28T06:14:56.310Z","updated_at":"2026-05-18T19:03:20.627Z","avatar_url":"https://github.com/ParadoxV5.png","language":"Ruby","funding_links":["https://github.com/sponsors/ParadoxV5"],"categories":[],"sub_categories":[],"readme":"# `template-ruby-gem`\n\nBuilt upon [`ParadoxV5/mygem`](https://github.com/ParadoxV5/mygem),\nthis is a moderate yet thorough template for a Ruby Gem project.\nNote: just `gem`. The `rake` is for invoking minitest (See [§Rakefile](#Rakefile).\n\n\n## How to Setup\n\n* Rename all occurrences of `mygem`, lower- or title-case, with the name of your epic Gem.\n  * [`lib/mygem/`](lib/mygem/)\n  * [`lib/mygem.rb` and Line 1 \u0026 2](lib/mygem.rb#L1-2)\n  * [`lib/mygem/version.rb` Line 1](lib/mygem/version.rb#L1)\n  * [`sig/mygem.rbs` and Line 1](sig/mygem.rbs#L1)\n  * [`test/mygem_test.rb` and Lines 2 \u0026 3](test/mygem_test.rb#L2-3)\n  * [`mygem.gemspec` and Lines 1, 4 \u0026 6](mygem.gemspec#L1-L6)\n* Update the [`gemspec`](mygem.gemspec) with your Gem’s information. (See [§`*.gemspec`](#gemspec))\n* Overwrite this `README` with an introduction to your epic project.\n* Replace *this template’s* [`LICENSE.txt`](LICENSE.txt) with\n  [one](https://choosealicense.com) that engraves your honor for posterity.\n* Add [your “Push rubygem” API key](https://rubygems.org/profile/api_keys) as a\n  [GitHub Secret](https://docs.github.com/actions/security-guides/encrypted-secrets)\n  (aptly) named `GEM_HOST_API_KEY`. (See [§package.yml](#packageyml)))\n\n\n## What’s Inside\n\nFollow [the convention](https://guides.rubygems.org/patterns/#file-names) regarding the file structure:\n\n\n### [`lib/**`](lib/)\n\nThis is the folder where people put their Gem sources, starting with their\n[entry script](lib/mygem.rb) right under `lib` and the rest in a sub-folder.\n\n\n### [`sig/**`](sig/)\n\nHave you heard of [RBS](https://github.com/ruby/rbs)?\nYep, Ruby 3 introduced this official type checking system. (And we are at Ruby 4 now!)\nThe convention is to put your RBS signatures in this folder.\n\n\n### [`*.gemspec`](mygem.gemspec)\n\nThe `gemspec` is [the metadata file](https://guides.rubygems.org/specification-reference/) for your epic Gem.\nAny file name is technically acceptable, but a `.gemspec` suffix is the convention.\nI have also neatly prepared developer, license and URL information lines in the metadata,\nthough you can remove any bells and whistles that don’t apply to your project.\n\n\n### [`Gemfile`](Gemfile)\n\n[The `Gemfile`](https://bundler.io/guides/gemfile.html) is the **Bundler** project file where\nyou *would* declare dependencies **if only using Bundler** (i.e., not cutting a Gem).\nFor Gems, the [`gemspec`](#gemspec) already covers this role in its metadata – *mostly*.\n\n\u003e There was a discussion before about whether the `Gemfile` makes `.gemspec`’s\n\u003e [`add_development_dependency`](https://guides.rubygems.org/specification-reference/#add_development_dependency)\n\u003e obsolete: rubygems/rubygems#1104\n\u003e \n\u003e Overall, I took their conclusion as – Bundler (`Gemfile`) and RubyGem (`.gemspec`) are two separate utilities;\n\u003e it’s just good Rubyists like us that use them together.\n\n\n### [`LICENSE.txt`](LICENSE.txt)\n\nSee [§License](#License)\n\n\n### [Rakefile](Rakefile)\n\nThe cool li’l testing toolkit minitest does not come with an executable,\nbut rather a Ruby API that generates a handful of [Rake](https://github.com/ruby/rake) tasks.\n\n\n### [`README.md`](README.md)\n\nYou are reading this right now, so you should know what this is for…\n\n\n### [`.github/workflows/*`](.github/workflows/)\n\nInside this folder are small but thoroughly configured ([minimal modification](#How-to-Setup) required)\n[GitHub Actions](https://github.com/features/actions) scripts that enable basic continuous deployment:\n\n#### [`documentation.yml`](.github/workflows/documentation.yml)\nGenerate [YARD docs](https://yardoc.org) and\n[publish to GitHub Pages](https://github.blog/changelog/2022-07-27-github-pages-custom-github-actions-workflows-beta)\nafter the `main` branch receives an update in the Ruby sources ([`lib/`](lib/)) folder.\n\n#### [`test.yml`](.github/workflows/test.yml)\nRun tests independently (`rake test:isolated`) after any branch receives an update\non the [`.gemspec`](mygem.gemspec) (in the event of library version changes) or\nin the sources ([`lib`](lib/)) or test ([`test`](test/)) folders.\n\n#### [`type_check.yml`](.github/workflows/type_check.yml)\nCheck your RBS appendices (see [§sig/**](#sig)) after any branch receives an update\non the [`.gemspec`](mygem.gemspec) (in the event of library version changes) or\nin the sources ([`lib`](lib/)) or signature ([`sig`](sig/)) folders.\n\n#### [`package.yml`](.github/workflows/package.yml)\nPublish to RubyGems after the GitHub repo publishes a Release. This workflow requires a “Push rubygem”\nAPI key as a GitHub Secret named `GEM_HOST_API_KEY` in order to authenticate an upload for you.\n\n### [`.github/dependabot.yml`](.github/dependabot.yml)\n\nWhat’s a dependency, you may ask? Well, if your project uses another project to do stuff,\nyour project then *depend*s on that project; got it?\n[Dependabot](https://github.blog/2020-06-01-keep-all-your-packages-up-to-date-with-dependabot)\ncan do the update check part of the housekeeping so you can focus on your own responsibility.\n\n\n### [`.yardopts`](.yardopts)\n\n[The `.yardopts` file ](https://rubydoc.info/gems/yard/file/docs/GettingStarted.md#yardopts-options-file)\nrecords the default command-line parameters, so both you and automated doc bots only need to execute `yard doc`.\n\n* `--markup markdown` – ~~Who doesn’t use Markdown?~~\n* `--markup-provider commonmarker` – Use [the CommonMarker Gem](https://github.com/gjtorikian/commonmarker)\n  instead of *whatever impaired default it happens to be out-of-the-box* (mine was `RDoc::Markdown`).\n\n\n### [`.gitignore`](.gitignore)\n\n[The `.gitignore` file](https://git-scm.com/docs/gitignore) lists file patterns to exclude from Git’s records.\n\n* Omitting `Gemfile.lock` and `rbs_collection.lock.yaml` encourages the use (or experimentation)\n  of updated (yet (hopefully) compatible) dependency versions. \n  Check them in if your paranoia prefers the guarantee of identical functioning dependency versions.\n* Don’t include IDE (just JetBrains ones like [RubyMine](https://www.jetbrains.com/ruby) at the movement)\n  configurations unless you want to enforce your organization’s digital environment.\n\n\n## License\n\nI have determined that this template is all traditional knowledge and no copyrightable production.\nTherefore, I am licensing this template under the infamous [WTFPL](http://www.wtfpl.net).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparadoxv5%2Ftemplate-ruby-gem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparadoxv5%2Ftemplate-ruby-gem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparadoxv5%2Ftemplate-ruby-gem/lists"}