handlebars-inflector 0.3.0

Handlebars string inflector helper.
Documentation
[![Crates.io](https://img.shields.io/crates/v/handlebars-inflector?color=4d76ae)](https://crates.io/crates/handlebars-inflector)
[![API](https://docs.rs/handlebars-inflector/badge.svg)](https://docs.rs/handlebars-inflector)
[![build and test](https://github.com/iganev/handlebars-inflector/actions/workflows/rust.yml/badge.svg)](https://github.com/iganev/handlebars-inflector/actions/workflows/rust.yml)
[![dependency status](https://deps.rs/repo/github/iganev/handlebars-inflector/status.svg)](https://deps.rs/repo/github/iganev/handlebars-inflector)

# handlebars-inflector
String inflector helper for [handlebars-rust](https://github.com/sunng87/handlebars-rust)

## Quick Start

Developed and tested with handlebars-rust v4.4.0 and Inflector v0.11.4.  
Versions `0.1.*` are compatible with handlebars `4`.  
Versions `0.2.*` are compatible with handlebars `5`. (Thanks to [campeis](https://github.com/campeis))
Versions `0.3.*` are compatible with handlebars `6`.  

### Registration

```rust
    use handlebars::Handlebars;
    use handlebars_inflector::HandlebarsInflector;
    
    let mut h = Handlebars::new();
    h.register_helper("inflect", Box::new(HandlebarsInflector));
```

### Usage

The helper is looking for exactly one parameter of type string. Operations can be stacked but are then executed  
in a specific predefined order. The operation parameter value doesn't matter as long as the parameter is  
present.

```handlebars
{{inflect param to_singular=true to_sentence_case=true to_lower_case=true }}
```

### Operations

List of possible operations in the order of execution:  
`to_camel_case`: `product_images` to `productImages`  
`to_pascal_case`: `product_images` to `ProductImages`  
`to_snake_case`: `ProductImages` to `product_images`  
`to_screaming_snake_case`: `ProductImages` to `PRODUCT_IMAGES`  
`to_kebab_case`: `product_images` to `product-images`  
`to_train_case`: `product_images` to `Product-Images`  
`to_sentence_case`: `product_images` to `Product images`  
`to_title_case`: `product_images` to `Product Images`  
`ordinalize`: `July 1` to `July 1st`  
`deordinalize`: `July 1st` to `July 1`  
`to_foreign_key`: `Product image` to `product_image_id`  
`demodulize`: `std::io` to `Io`  
`deconstantize`: `std::io` to `Std`  
`to_class_case`: `product_images` to `ProductImage`  
`to_table_case`: `ProductImage` to `product_images`  
`to_plural`: `ProductImage` to `ProductImages`  
`to_singular`: `product_images` to `product_image`  
`to_upper_case`: `product_images` to `PRODUCT_IMAGES`  
`to_lower_case`: `ProductImages` to `productimages`  
  
Note that some combinations might not be compatible with one another.  
If you still absolutely need to do such type of combination you could nest the operations like:  
`Bars::Foos` to `Bar`
  
```handlebars
{{inflect (inflect param deconstantize=true) to_singular=true}}
```

## Acknowledgements

This is basically a thin wrapper around the [Inflector](https://github.com/whatisinternet/inflector) crate. Kudos to it's developer.

## License

This library (handlebars-inflector) is open sourced under the BSD 2 License.  
P.S.: I don't really care about the license so I picked one of my dependencies' license. :)