{"id":28630938,"url":"https://github.com/piotrmurach/strings-ansi","last_synced_at":"2025-08-08T17:36:09.898Z","repository":{"id":52592332,"uuid":"146126549","full_name":"piotrmurach/strings-ansi","owner":"piotrmurach","description":"Handle ANSI escape codes in strings","archived":false,"fork":false,"pushed_at":"2023-06-30T22:49:07.000Z","size":37,"stargazers_count":20,"open_issues_count":2,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-05T13:45:20.297Z","etag":null,"topics":["ansi","rubygem","strings","strip-ansi"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/piotrmurach.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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":"piotrmurach"}},"created_at":"2018-08-25T20:12:28.000Z","updated_at":"2024-10-13T14:27:51.000Z","dependencies_parsed_at":"2024-06-18T20:01:11.250Z","dependency_job_id":null,"html_url":"https://github.com/piotrmurach/strings-ansi","commit_stats":{"total_commits":40,"total_committers":2,"mean_commits":20.0,"dds":"0.025000000000000022","last_synced_commit":"35d0c9430cf0a8022dc12bdab005bce296cb9f00"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Fstrings-ansi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Fstrings-ansi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Fstrings-ansi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Fstrings-ansi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach","download_url":"https://codeload.github.com/piotrmurach/strings-ansi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Fstrings-ansi/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":258501198,"owners_count":22711353,"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","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":["ansi","rubygem","strings","strip-ansi"],"created_at":"2025-06-12T13:09:22.940Z","updated_at":"2025-06-12T13:09:23.667Z","avatar_url":"https://github.com/piotrmurach.png","language":"Ruby","funding_links":["https://github.com/sponsors/piotrmurach"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"225\" src=\"https://github.com/piotrmurach/strings/blob/master/assets/strings_logo.png\" alt=\"Strings logo\" /\u003e\n\u003c/div\u003e\n\n# Strings::ANSI\n\n[![Gem Version](https://badge.fury.io/rb/strings-ansi.svg)][gem]\n[![Actions CI](https://github.com/piotrmurach/strings-ansi/workflows/CI/badge.svg?branch=master)][gh_actions_ci]\n[![Build status](https://ci.appveyor.com/api/projects/status/amffv5g25m02yu9h?svg=true)][appveyor]\n[![Maintainability](https://api.codeclimate.com/v1/badges/7c018a761a342ccb0746/maintainability)][codeclimate]\n[![Coverage Status](https://coveralls.io/repos/github/piotrmurach/strings-ansi/badge.svg?branch=master)][coverage]\n[![Inline docs](http://inch-ci.org/github/piotrmurach/strings-ansi.svg?branch=master)][inchpages]\n\n[gem]: http://badge.fury.io/rb/strings-ansi\n[gh_actions_ci]: https://github.com/piotrmurach/strings-ansi/actions?query=workflow%3ACI\n[appveyor]: https://ci.appveyor.com/project/piotrmurach/strings-ansi\n[codeclimate]: https://codeclimate.com/github/piotrmurach/strings-ansi/maintainability\n[coverage]: https://coveralls.io/github/piotrmurach/strings-ansi?branch=master\n[inchpages]: http://inch-ci.org/github/piotrmurach/strings-ansi\n\n\u003e Handle ANSI escape codes in strings.\n\n**Strings::ANSI** provides ANSI handling component for [Strings](https://github.com/piotrmurach/strings).\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'strings-ansi'\n```\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install strings-ansi\n\n## Contents\n\n* [1. Usage](#1-usage)\n* [2. API](#2-api)\n  * [2.1 ansi?](#21-ansi)\n  * [2.2 only_ansi?](#22-only_ansi)\n  * [2.3 sanitize](#23-sanitize)\n* [3. Extending String class](#3-extending-string-class)\n\n## Usage\n\nThe `Strings::ANSI` is a module that can check if a string has ANSI escape codes:\n\n```ruby\nStrings::ANSI.ansi?(\"\\e[32mHello\\e[0m\")\n# =\u003e true\n```\n\nIt can also check if a string consists of only ANSI codes:\n\n```ruby\nStrings::ANSI.only_ansi?(\"\\e[32mHello\\e[0m\")\n# =\u003e false\n```\n\nFinally, you can remove any ANSI codes from a string:\n\n```ruby\nStrings::ANSI.sanitize(\"\\e[32mHello\\e[0m\")\n# =\u003e \"Hello\"\n```\n\n## 2. API\n\n### 2.1 ansi?\n\nTo check if a string includes ANSI escape codes use `ansi?` like so:\n\n```ruby\nStrings::ANSI.ansi?(\"\\e[33;44mfoo\\e[0m\")\n# =\u003e true\n```\n\n### 2.2 only_ansi?\n\nTo check if a string includes only ANSI escape codes use `only_ansi?`:\n\n```ruby\nStrings::ANSI.only_ansi?(\"\\e[33;44mfoo\\e[0m\")\n# =\u003e false\n```\n\n### 2.3 sanitize\n\nTo remove ANSI codes from a string use `sanitize`:\n\n```ruby\nStrings::ANSI.sanitize(\"\\e[0;33;49mHello\\e[0m\")\n# =\u003e Hello\n```\n\n## 3. Extending String class\n\nThough it is highly discouraged to pollute core Ruby classes, you can add the required methods to `String` class by using refinements.\n\nFor example, if you wish to only extend strings with `sanitize` method do:\n\n```ruby\nmodule MyStringExt\n  refine String do\n    def sanitize\n      Strings::ANSI.sanitize(self)\n    end\n  end\nend\n```\n\nThis will make `sanitize` method available for any strings where refinement is applied:\n\n```ruby\nusing MyStringExt\n\nstring.sanitize(\"\\e[32mHello\\e[0m\")\n# =\u003e Hello\n```\n\nAlternatively, if you want to include all the **Strings::ANSI** methods:\n\n```ruby\nrequire 'strings/ansi/extensions'\n\nusing Strings::ANSI::Extensions\n```\n\n## Development\n\nAfter checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.\n\nTo 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 tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/piotrmurach/strings-ansi. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n## Code of Conduct\n\nEveryone interacting in the Strings::ANSI project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/piotrmurach/strings-ansi/blob/master/CODE_OF_CONDUCT.md).\n\n## Copyright\n\nCopyright (c) 2018 Piotr Murach. See LICENSE for further details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiotrmurach%2Fstrings-ansi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpiotrmurach%2Fstrings-ansi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpiotrmurach%2Fstrings-ansi/lists"}