mirror of https://github.com/aldy505/Nanoid.jl.git
feat: initialize nanoid
This commit is contained in:
parent
fa79cd3226
commit
074e5e69de
|
@ -3,7 +3,7 @@ on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
tags: '*'
|
tags: ['*']
|
||||||
pull_request:
|
pull_request:
|
||||||
concurrency:
|
concurrency:
|
||||||
# Skip intermediate builds: always.
|
# Skip intermediate builds: always.
|
||||||
|
@ -38,22 +38,3 @@ jobs:
|
||||||
- uses: codecov/codecov-action@v2
|
- uses: codecov/codecov-action@v2
|
||||||
with:
|
with:
|
||||||
files: lcov.info
|
files: lcov.info
|
||||||
docs:
|
|
||||||
name: Documentation
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: julia-actions/setup-julia@v1
|
|
||||||
with:
|
|
||||||
version: '1'
|
|
||||||
- uses: julia-actions/julia-buildpkg@v1
|
|
||||||
- uses: julia-actions/julia-docdeploy@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }}
|
|
||||||
- run: |
|
|
||||||
julia --project=docs -e '
|
|
||||||
using Documenter: DocMeta, doctest
|
|
||||||
using Nanoid
|
|
||||||
DocMeta.setdocmeta!(Nanoid, :DocTestSetup, :(using Nanoid); recursive=true)
|
|
||||||
doctest(Nanoid)'
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
name: CompatHelper
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: 0 0 * * *
|
|
||||||
workflow_dispatch:
|
|
||||||
jobs:
|
|
||||||
CompatHelper:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Pkg.add("CompatHelper")
|
|
||||||
run: julia -e 'using Pkg; Pkg.add("CompatHelper")'
|
|
||||||
- name: CompatHelper.main()
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }}
|
|
||||||
run: julia -e 'using CompatHelper; CompatHelper.main()'
|
|
|
@ -3,6 +3,9 @@ uuid = "649b5ee6-231f-4350-86a5-2b05c0e3780e"
|
||||||
authors = ["Reinaldy Rafli <aldy505@tutanota.com> and contributors"]
|
authors = ["Reinaldy Rafli <aldy505@tutanota.com> and contributors"]
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||||
|
|
||||||
[compat]
|
[compat]
|
||||||
julia = "1.5"
|
julia = "1.5"
|
||||||
|
|
||||||
|
|
36
README.md
36
README.md
|
@ -1,6 +1,34 @@
|
||||||
# Nanoid
|
# Nanoid
|
||||||
|
|
||||||
[![Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://Reinaldy Rafli.github.io/Nanoid.jl/stable)
|
[![Build Status](https://github.com/aldy505/Nanoid.jl/actions/workflows/CI.yml/badge.svg?branch=master)](https://github.com/aldy505/Nanoid.jl/actions/workflows/CI.yml?query=branch%3Amaster)
|
||||||
[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://Reinaldy Rafli.github.io/Nanoid.jl/dev)
|
[![Coverage](https://codecov.io/gh/aldy505/Nanoid.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/aldy505/Nanoid.jl)
|
||||||
[![Build Status](https://github.com/Reinaldy Rafli/Nanoid.jl/actions/workflows/CI.yml/badge.svg?branch=master)](https://github.com/Reinaldy Rafli/Nanoid.jl/actions/workflows/CI.yml?query=branch%3Amaster)
|
|
||||||
[![Coverage](https://codecov.io/gh/Reinaldy Rafli/Nanoid.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/Reinaldy Rafli/Nanoid.jl)
|
Simple and minimalist Julia implementation of [nanoid](https://github.com/ai/nanoid).
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```julia
|
||||||
|
Pkg.add("Nanoid")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```julia
|
||||||
|
import Nanoid
|
||||||
|
|
||||||
|
id = Nanoid.nanoid()
|
||||||
|
# => "tcDIFxMJHw6UgUnbI_6za"
|
||||||
|
|
||||||
|
id = Nanoid.nanoid(10)
|
||||||
|
# => "OutzQWa1SB"
|
||||||
|
|
||||||
|
id = Nanoid.nanoid(; alphabet = "ABCDEFGHIJ")
|
||||||
|
# => "GEHCAGFJIAHCJGIHHIHFF"
|
||||||
|
|
||||||
|
id = Nanoid.nanoid(10; alphabet = "abcdef")
|
||||||
|
# => "abeafebaab"
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](./LICENSE)
|
|
@ -1,100 +0,0 @@
|
||||||
# This file is machine-generated - editing it directly is not advised
|
|
||||||
|
|
||||||
julia_version = "1.7.2"
|
|
||||||
manifest_format = "2.0"
|
|
||||||
|
|
||||||
[[deps.ANSIColoredPrinters]]
|
|
||||||
git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c"
|
|
||||||
uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9"
|
|
||||||
version = "0.0.1"
|
|
||||||
|
|
||||||
[[deps.Base64]]
|
|
||||||
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
|
|
||||||
|
|
||||||
[[deps.Dates]]
|
|
||||||
deps = ["Printf"]
|
|
||||||
uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
|
||||||
|
|
||||||
[[deps.DocStringExtensions]]
|
|
||||||
deps = ["LibGit2"]
|
|
||||||
git-tree-sha1 = "b19534d1895d702889b219c382a6e18010797f0b"
|
|
||||||
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
|
|
||||||
version = "0.8.6"
|
|
||||||
|
|
||||||
[[deps.Documenter]]
|
|
||||||
deps = ["ANSIColoredPrinters", "Base64", "Dates", "DocStringExtensions", "IOCapture", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"]
|
|
||||||
git-tree-sha1 = "7d9a46421aef53cbd6b8ecc40c3dcbacbceaf40e"
|
|
||||||
uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
|
|
||||||
version = "0.27.15"
|
|
||||||
|
|
||||||
[[deps.IOCapture]]
|
|
||||||
deps = ["Logging", "Random"]
|
|
||||||
git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a"
|
|
||||||
uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
|
|
||||||
version = "0.2.2"
|
|
||||||
|
|
||||||
[[deps.InteractiveUtils]]
|
|
||||||
deps = ["Markdown"]
|
|
||||||
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
|
|
||||||
|
|
||||||
[[deps.JSON]]
|
|
||||||
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
|
|
||||||
git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e"
|
|
||||||
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
|
|
||||||
version = "0.21.3"
|
|
||||||
|
|
||||||
[[deps.LibGit2]]
|
|
||||||
deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
|
|
||||||
uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
|
|
||||||
|
|
||||||
[[deps.Logging]]
|
|
||||||
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
|
|
||||||
|
|
||||||
[[deps.Markdown]]
|
|
||||||
deps = ["Base64"]
|
|
||||||
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
|
|
||||||
|
|
||||||
[[deps.Mmap]]
|
|
||||||
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
|
|
||||||
|
|
||||||
[[deps.Nanoid]]
|
|
||||||
path = ".."
|
|
||||||
uuid = "649b5ee6-231f-4350-86a5-2b05c0e3780e"
|
|
||||||
version = "0.1.0"
|
|
||||||
|
|
||||||
[[deps.NetworkOptions]]
|
|
||||||
uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
|
|
||||||
|
|
||||||
[[deps.Parsers]]
|
|
||||||
deps = ["Dates"]
|
|
||||||
git-tree-sha1 = "85b5da0fa43588c75bb1ff986493443f821c70b7"
|
|
||||||
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
|
|
||||||
version = "2.2.3"
|
|
||||||
|
|
||||||
[[deps.Printf]]
|
|
||||||
deps = ["Unicode"]
|
|
||||||
uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
|
|
||||||
|
|
||||||
[[deps.REPL]]
|
|
||||||
deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
|
|
||||||
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
|
||||||
|
|
||||||
[[deps.Random]]
|
|
||||||
deps = ["SHA", "Serialization"]
|
|
||||||
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
|
||||||
|
|
||||||
[[deps.SHA]]
|
|
||||||
uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
|
|
||||||
|
|
||||||
[[deps.Serialization]]
|
|
||||||
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
|
|
||||||
|
|
||||||
[[deps.Sockets]]
|
|
||||||
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
|
|
||||||
|
|
||||||
[[deps.Test]]
|
|
||||||
deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
|
|
||||||
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
|
|
||||||
|
|
||||||
[[deps.Unicode]]
|
|
||||||
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
|
|
@ -1,3 +0,0 @@
|
||||||
[deps]
|
|
||||||
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
|
|
||||||
Nanoid = "649b5ee6-231f-4350-86a5-2b05c0e3780e"
|
|
24
docs/make.jl
24
docs/make.jl
|
@ -1,24 +0,0 @@
|
||||||
using Nanoid
|
|
||||||
using Documenter
|
|
||||||
|
|
||||||
DocMeta.setdocmeta!(Nanoid, :DocTestSetup, :(using Nanoid); recursive=true)
|
|
||||||
|
|
||||||
makedocs(;
|
|
||||||
modules=[Nanoid],
|
|
||||||
authors="Reinaldy Rafli <aldy505@tutanota.com> and contributors",
|
|
||||||
repo="https://github.com/Reinaldy Rafli/Nanoid.jl/blob/{commit}{path}#{line}",
|
|
||||||
sitename="Nanoid.jl",
|
|
||||||
format=Documenter.HTML(;
|
|
||||||
prettyurls=get(ENV, "CI", "false") == "true",
|
|
||||||
canonical="https://Reinaldy Rafli.github.io/Nanoid.jl",
|
|
||||||
assets=String[],
|
|
||||||
),
|
|
||||||
pages=[
|
|
||||||
"Home" => "index.md",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
deploydocs(;
|
|
||||||
repo="github.com/Reinaldy Rafli/Nanoid.jl",
|
|
||||||
devbranch="master",
|
|
||||||
)
|
|
|
@ -1,14 +0,0 @@
|
||||||
```@meta
|
|
||||||
CurrentModule = Nanoid
|
|
||||||
```
|
|
||||||
|
|
||||||
# Nanoid
|
|
||||||
|
|
||||||
Documentation for [Nanoid](https://github.com/Reinaldy Rafli/Nanoid.jl).
|
|
||||||
|
|
||||||
```@index
|
|
||||||
```
|
|
||||||
|
|
||||||
```@autodocs
|
|
||||||
Modules = [Nanoid]
|
|
||||||
```
|
|
|
@ -1,5 +1,61 @@
|
||||||
module Nanoid
|
module Nanoid
|
||||||
|
|
||||||
|
using Random
|
||||||
|
|
||||||
# Write your package code here.
|
# Write your package code here.
|
||||||
|
const urlalphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"
|
||||||
|
|
||||||
|
rng = MersenneTwister()
|
||||||
|
|
||||||
|
function randomcharacter(from::String)::Char
|
||||||
|
return rand(rng, from)
|
||||||
|
end
|
||||||
|
|
||||||
|
function generate(alphabet::String, length::Integer)::String
|
||||||
|
id = []
|
||||||
|
|
||||||
|
for _ = 1:length
|
||||||
|
randomchar = string(randomcharacter(alphabet))
|
||||||
|
append!(id, randomchar)
|
||||||
|
end
|
||||||
|
|
||||||
|
join(id, "")
|
||||||
|
end
|
||||||
|
|
||||||
|
"""
|
||||||
|
nanoid(size::Integer = 21; alphabet::String = "") -> String
|
||||||
|
|
||||||
|
Generate a random Nanoid with the given size and alphabet.
|
||||||
|
Size defaults to 21, and alphabet defaults to the URL-safe alphabet.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```jldoctest
|
||||||
|
julia> nanoid()
|
||||||
|
"tcDIFxMJHw6UgUnbI_6za"
|
||||||
|
|
||||||
|
julia> nanoid(10)
|
||||||
|
"OutzQWa1SB"
|
||||||
|
|
||||||
|
julia> nanoid(; alphabet = "ABCDEFGHIJ")
|
||||||
|
"GEHCAGFJIAHCJGIHHIHFF"
|
||||||
|
|
||||||
|
julia> nanoid(10; alphabet = "abcdef")
|
||||||
|
"abeafebaab"
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
function nanoid(size::Integer=21; alphabet::String = "")::String
|
||||||
|
if size < 1
|
||||||
|
error("size must be at least 1")
|
||||||
|
end
|
||||||
|
|
||||||
|
if alphabet == ""
|
||||||
|
alphabet = urlalphabet
|
||||||
|
end
|
||||||
|
|
||||||
|
generate(alphabet, size)
|
||||||
|
end
|
||||||
|
|
||||||
|
export nanoid
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,5 +2,25 @@ using Nanoid
|
||||||
using Test
|
using Test
|
||||||
|
|
||||||
@testset "Nanoid.jl" begin
|
@testset "Nanoid.jl" begin
|
||||||
# Write your tests here.
|
@testset "Randomness" begin
|
||||||
|
@test nanoid() != nanoid()
|
||||||
|
end
|
||||||
|
@testset "Length" begin
|
||||||
|
@test length(nanoid()) == 21
|
||||||
|
@test length(nanoid(1)) == 1
|
||||||
|
@test length(nanoid(255)) == 255
|
||||||
|
@test length(nanoid(25)) == 25
|
||||||
|
end
|
||||||
|
|
||||||
|
@testset "Errors" begin
|
||||||
|
@test_throws ErrorException("size must be at least 1") nanoid(-1)
|
||||||
|
end
|
||||||
|
|
||||||
|
@testset "Custom alphabet" begin
|
||||||
|
output = nanoid(;alphabet = "ABCDE")
|
||||||
|
|
||||||
|
for chars in output
|
||||||
|
@test chars in "ABCDE"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue