Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sqids/sqids-ruby
Official Ruby port of Sqids. Generate short unique IDs from numbers.
https://github.com/sqids/sqids-ruby
hashids id id-generator ruby short-id short-url sqids uid unique-id unique-id-generator
Last synced: 3 months ago
JSON representation
Official Ruby port of Sqids. Generate short unique IDs from numbers.
- Host: GitHub
- URL: https://github.com/sqids/sqids-ruby
- Owner: sqids
- License: mit
- Created: 2023-06-24T15:28:41.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-25T22:55:36.000Z (4 months ago)
- Last Synced: 2024-07-26T01:10:26.427Z (4 months ago)
- Topics: hashids, id, id-generator, ruby, short-id, short-url, sqids, uid, unique-id, unique-id-generator
- Language: Ruby
- Homepage: https://sqids.org/ruby
- Size: 32.2 KB
- Stars: 116
- Watchers: 6
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# [Sqids Ruby](https://sqids.org/ruby)
[![Gem Version](https://badge.fury.io/rb/sqids.svg)](https://rubygems.org/gems/sqids)
[![Github Actions](https://img.shields.io/github/actions/workflow/status/sqids/sqids-ruby/tests.yml)](https://github.com/sqids/sqids-ruby/actions)
[![Downloads](https://img.shields.io/gem/dt/sqids)](https://crates.io/crates/sqids)[Sqids](https://sqids.org/ruby) (*pronounced "squids"*) is a small library that lets you **generate unique IDs from numbers**. It's good for link shortening, fast & URL-safe ID generation and decoding back into numbers for quicker database lookups.
Features:
- **Encode multiple numbers** - generate short IDs from one or several non-negative numbers
- **Quick decoding** - easily decode IDs back into numbers
- **Unique IDs** - generate unique IDs by shuffling the alphabet once
- **ID padding** - provide minimum length to make IDs more uniform
- **URL safe** - auto-generated IDs do not contain common profanity
- **Randomized output** - Sequential input provides nonconsecutive IDs
- **Many implementations** - Support for [40+ programming languages](https://sqids.org/)## 🧰 Use-cases
Good for:
- Generating IDs for public URLs (eg: link shortening)
- Generating IDs for internal systems (eg: event tracking)
- Decoding for quicker database lookups (eg: by primary keys)Not good for:
- Sensitive data (this is not an encryption library)
- User IDs (can be decoded revealing user count)## 🚀 Getting started
Add this line to your application's Gemfile:
```ruby
gem 'sqids'
```And then execute:
```bash
bundle
```Or install it via:
```bash
gem install sqids
```## 👩💻 Examples
Simple encode & decode:
```ruby
sqids = Sqids.new
id = sqids.encode([1, 2, 3]) # '86Rf07'
numbers = sqids.decode(id) # [1, 2, 3]
```> **Note**
> 🚧 Because of the algorithm's design, **multiple IDs can decode back into the same sequence of numbers**. If it's important to your design that IDs are canonical, you have to manually re-encode decoded numbers and check that the generated ID matches.Enforce a *minimum* length for IDs:
```ruby
sqids = Sqids.new(min_length: 10)
id = sqids.encode([1, 2, 3]) # '86Rf07xd4z'
numbers = sqids.decode(id) # [1, 2, 3]
```Randomize IDs by providing a custom alphabet:
```ruby
sqids = Sqids.new(alphabet: 'FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE')
id = sqids.encode([1, 2, 3]) # 'B4aajs'
numbers = sqids.decode(id) # [1, 2, 3]
```Prevent specific words from appearing anywhere in the auto-generated IDs:
```ruby
sqids = Sqids.new(blocklist: Set.new(%w[86Rf07]))
id = sqids.encode([1, 2, 3]) # 'se8ojk'
numbers = sqids.decode(id) # [1, 2, 3]
```> [!WARNING]
> If you provide a large custom blocklist and/or custom alphabet, calls to `Sqid.new` can take
> ~1ms. You should create a singleton instance of `Sqid` at service start and reusing that rather than
> repeatedly calling `Squid.new`## 📝 License
[MIT](LICENSE)