MetaEnum

MetaEnum is a library for handling enum types in Ruby. It makes it easy to convert between external numbers and internal names.

Installation

Add this line to your application's Gemfile:

gem 'meta_enum'

And then execute:

$ bundle

Or install it yourself as:

$ gem install meta_enum

Usage

Create a enum type:

require 'meta_enum'

ColorType = MetaEnum::Type.new(red: 0, green: 1, blue: 2)

Use the [] operator to lookup a value by name:

ColorType[:green] # => #<MetaEnum::Value: 1 => green}>

Or lookup by number:

ColorType[1] # => #<MetaEnum::Value: 1 => green}>

Values can also be easily compared with numbers or names:

ColorType[:green] == 1 # => true
ColorType[:green] == :green # => true

Missing names would almost always be a programming error, so that will raise an exception.

ColorType[:purple] # => raises: KeyError: key not found: :purple

But missing numbers could mean that there are values defined externally we do not know about. So it is preferable not to raise an exception.

ColorType[42] # => #<MetaEnum::MissingValue: 42}>

Number and name can be retrieved from a MetaEnum::Value

v = ColorType[:red] # => #<MetaEnum::Value: 0 => red}>
v.number # => 0
v.name # => :red

Values can have extra associated data.

AgeType = MetaEnum::Type.new(child: [0, "Less than 18"], adult: [1, "At least 18"])
AgeType[:child].data # => "Less than 18"

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/ccsalespro/meta_enum.

License

The gem is available as open source under the terms of the MIT License.