1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
# Awrence
[](https://badge.fury.io/rb/awrence)

Have you ever needed to automatically convert Rubyish `snake_case` to JSON-style `camelBack` or `CamelCase` hash keys?
Awrence to the rescue!
This gem recursively converts all snake_case keys in a hash structure to camelBack or CamelCase.
## Requirements
* Ruby >= 3.0
For Ruby < 3.0 use version 2.0.1
## Installation
Add this to your Gemfile:
```ruby
gem "awrence"
```
Or install it yourself as:
```bash
gem install awrence
```
## Usage
```ruby
my_hash = {"first_key" => 1, "foo_bars" => [{"baz_baz" => "value"}, {"blah_blah" => "value"}]}
camel_hash = my_hash.to_camel_keys
# => {"FirstKey" => 1, "FooBars" => [{"BazBaz" => "value"}, {"BlahBlah" => "value"}]}
# OR
camel_hash = my_hash.to_camelback_keys
# => {"firstKey" => 1, "fooBars" => [{"bazBaz" => "value"}, {"blahBlah" => "value"}]}
```
Awrence works on either string keys or symbolized keys. It has no dependencies, as it has its own `camelize` method lifted out of ActiveSupport.
### Acronyms
You can set acronyms that Awrence will now check against when converting the keys.
```ruby
Awrence.acronyms = { "url" => "URL", "id" => "ID" }
my_hash = { "user_url" => "http://a.com", "user_id" => 2 }
camel_hash = my_hash.to_camel_keys
# => { "UserURL" => "http://a.com", "UserID" => 2 }
camel_hash = my_hash.to_camelback_keys
# => { "userURL" => "http://a.com", "userID" => 2 }
```
The acronym will be ignored when it's the first word and `to_camelback_keys` is called.
```ruby
Awrence.acronyms = { "id" => "ID" }
my_hash = { "id" => 2 }
camel_hash = my_hash.to_camel_keys
# => { "ID" => 2 }
camel_hash = my_hash.to_camelback_keys
# => { "id" => 2 }
```
## Limitations
* There is no `Hash#to_camel_keys!` form.
# Going the other way
If you've already got `CamelCase` and need to `snake_case` it, you are encouraged to try
the [Plissken](http://github.com/technicalpanda/plissken) gem.
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/technicalpanda/awrence. 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.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
## Code of Conduct
Everyone interacting with this project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/technicalpanda/awrence/blob/main/CODE_OF_CONDUCT.md).
|