An immutable version of Ruby's Struct class
Ruby
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.document
.gitignore
.rspec
.travis.yml
Gemfile
LICENSE
README.mdown
Rakefile
immutable_struct.gemspec

README.mdown

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.