Giter VIP home page Giter VIP logo

codez's Introduction

codez logo

Codez

Codez is a library designed to help ease the process of generating codes for your end users that can be helpful for confirmation numbers, reservation systems, error codes, and more.

Getting Started

dotnet add package Codez

Code Generators (ICodeGenerator)

The core of the library is the ICodeGenerator interface, which has two methods: GenerateAsync and TryGenerateAsync. You can also implement your own code generator by inheriting from CodeGeneratorBase. The CodeGeneratorBase class is made up of several dependencies that can change the behavior of the generate methods:

  • Alphabet (IAlphabet)
  • Randomizer (IRandomizer)
  • Uniqueness (IUniqueness)
  • Stop Words (IStopWords)
  • Options (CodeGeneratorOptions)
  • Transformers (ITransformer)
  • Listeners (IListener)

Each dependency is explained in detail below. If you don't want to customize anything, Codez also comes with some generators and dependencies out of the box. Some generators in the Codez package are CodeGenerator and NonRepeatingCodeGenerator.

GenerateAsync

The GenerateAsync method returns a code based on the alphabet and the length specified.

var generator = new CodeGenerator();
// returns "]hG/g"
string result = await generator.GenerateAsync(length: 5);

If the generator fails to generate a code, it will throw a CodeGeneratorException.

TryGenerateAsync

The TryGenerateAsync method returns a CodeGeneratorResult that gives you the generated value, and some other metadata from the generation process. This method will not throw a CodeGeneratorException.

var generator = new CodeGenerator();
// returns CodeGeneratorResult
var result = await generator.TryGenerateAsync(length: 5);

if (result.Success) {
    Console.WriteLine(result.Value);
}

Alphabet

The alphabet is an important part of the generation process. You can constrain what kinds of codes get generated by specifying the alphabet appropriately. Codez comes with an AsciiAlphabet by default with characters between ! (33) and ~ (126) included.

You can also use the StringAlphabet class to pass in a string, and each character will be treated as an option during the generation.

var alphabet = new StringAlphabet("ABCDE");
var characters = alphabet.Characters;

You may also implement your own class using the IAlphabet interface.

Randomizer

The IRandomizer interface picks a random index based on your alphabet size. The RandomRandomizer is used by default.

Uniqueness

The IUniqueness interface allows you to enforce global uniquness on the codes that are being generated. This can be against a database, web api, or whatever you would like. By default, Codez provides a NoUniqueness implementation.

Stop Words

StopWords (IStopWords) provides a mechanism to filter out codes that may be deemed inappropriate or incorrect. You can live on the edge by using the default NoStopWords. If you like it boring, you can also use the InMemoryStopWords implementation and provide inappropriate words there, which uses an IndexOf implementation to find matches.

Transformers

The transformer (ITransfomer) interface allows you to take a uniquely generated code and transform it into something else. The transfomer will only run when the result is a Success. Note, The uniqueness of the code coming from a transfomer is not guaranteed.

There is a sample in which this libary is used to generate unique container names.

IListener

The IListener interface can be implemented on any of the dependencies of a code generator. In CodeGeneratorBase all dependencies that implement the interface will will be called twice: OnBeforeAttempt and OnAfterAttempt. This gives you an oppurtunity to hook into the attempt process.

Options

Options allow you to alter the behavior of the code generation:

  • Retry Limit (default of 5): Number of iterations to attempt generation

Contributors

codez's People

Contributors

adamralph avatar khalidabuhakmeh avatar m-zuber avatar tvanfosson avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.