0.0
No release in over a year
It is built on top of standard `Struct` and `OpenStruct` classes with all their features preserved while adding a few on top for conveniences like handling nested hashes/arrays, unified constructor interface, immutability.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 12.0
~> 3.0
 Project Readme

HashToStruct

Gem Version Ruby

It enables recursive conversion of a ruby Hash to a Struct-like object and back.

Stop thinking about symbols vs strings when accessing values in your hash. Simply call a method.

It is built on top of standard Struct and OpenStruct classes with all their features preserved while adding a few on top for conveniences like handling nested hashes/arrays, unified constructor interface, immutability.

Installation

Add this line to your application's Gemfile:

gem 'hash_to_struct'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install hash_to_struct

Usage

Struct based conversion:

struct = HashToStruct.struct({q: 1})

struct.q # => 1
struct[:x] # => NameError: no member 'x' in struct

OpenStruct based conversion:

ostruct = HashToStruct.ostruct({q: 1})

ostruct.q # => 1
ostruct[:x] = 5
ostruct.x # => 5

Convert back to Hash:

ostruct.to_h # => { :q => 1, :x => 5 }

Recursive conversion:

struct = HashToStruct.struct({q: 1, w: { e: 2 }})

struct.q.w.e # => 2

Note! It will only convert objects of type Hash, not Hash derivatives or some acting like a Hash.

Recursive conversions inside Array:

struct = HashToStruct.struct({q: 1, w: [{ e: 2 }]}, including_arrays: true)

struct.q.w.first.e # => 2

Note! It will only iterate over objects of type Array, not Array derivatives or other enumerables.

Make immutable:

struct = HashToStruct.struct({q: 1}, immutable: true)

struct.q = 2 # => FrozenError: can't modify frozen #<struct q=1>

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/a-bohush/hash_to_struct.

License

The gem is available as open source under the terms of the MIT License.