Open Struct
Open structs create new objects while a Struct defines a class that already has attributes, an equality method (==), and is enumerable.
require 'ostruct'
car1 = OpenStruct.new(type: "car", color: "red")
car2 = OpenStruct.new(name: "car", color: "red")
car3 = OpenStruct.new(name: "car", color: "blue")
car1 == car2 # => true
car1 == car3 # => false
While you can’t define a method on and OpenStruct, one advantage they have is that you can add a new attribute to it after it has been defined. You can’t do this with a Struct.
require 'ostruct'
car = OpenStruct.new(type: "Toyota")
car.type # => "Toyota"
car.mpg # => nil
car.mpg = 30
car.mpg # => 30