Skip to content
This repository has been archived by the owner on Jan 2, 2023. It is now read-only.

iconara/immutable_struct

Repository files navigation

ImmutableStruct

An immutable implementation of Ruby's Struct class. It works just as Struct, but there are no setters, and you can't use []=.

class Spaceship < ImmutableStruct.new(:name, :max_speed)
end

ship = Spaceship.new('Enterprise', 'Warp 9')

puts ship.max_speed # => Warp 9

ship.max_speed = '299792458 m/s' # raises NoMethodError

In addition to the above, ImmutableStruct enhances the constructor to accept a hash (but as you can see above the Struct behaviour works too):

ship = Spaceship.new(:max_speed => '∞', :name => 'The TARDIS')

puts ship.max_speed # => ∞

You can create a strict version of the struct, which will raise an error if you initialize it with a Hash that does not contain all the fields of the struct

StrictSpaceship = Spaceship.strict

strict_ship = StrictSpaceship.new(:name => 'Enterprise') # raises ArgumentError

I'm surprised every time I look at the RDoc for Struct that it doesn't do this.

About

An immutable version of Ruby's Struct class

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages