Related

An OpenStruct is a data structure, similar
to a Hash, that allows the definition of arbitrary
attributes with their accompanying values. This is accomplished by using Ruby’s metaprogramming to define
methods on the class itself.

Hash keys with spaces or characters that would
normally not be able to use for method calls (e.g. ()[]*) will not be
immediately available on the OpenStruct
object as a method for retrieval or assignment, but can be still be reached
through the Object#send method.

Implementation:

An OpenStruct utilizes Ruby’s method lookup structure to and
find and define the necessary methods for properties. This is accomplished
through the method method_missing and
define_method.

This should be a consideration if there is a concern about the performance
of the objects that are created, as there is much more overhead in the
setting of these properties compared to using a Hash or a Struct.