u-attributes 2.4.0
This gem allows you to define "immutable" objects, and your objects will have only getters and no setters. So, if you change some object attribute, you will have a new object instance. That is, you transform the object instead of modifying it.