Enum-rb
Enum-rb tries to be a flexible way to store arbitrary data that your application needs to function but doesn't really fit anywhere and has no defined structure.
The idea is to use it to store things like key => value
mappings for
your select
boxes, or any mappings for that matter. Anytime you need
to just have some bit of formless data, Enum should be able to hold it.
Have more of these mappings than it would be smart to store in-memory?
No worries, Enum-rb comes with a RedisStore
that will store your
enums in Redis.
Installation
Add this line to your application's Gemfile:
gem 'enum-rb'
And then execute:
$ bundle
Or install it yourself as:
$ gem install enum-rb
Usage
You can use Enum-rb in two ways. If having a single store is all you need, you can set
Enum.default_backend
# to either a populated `MemoryStore`, which you can get with
Enum.default_backend = Enum::MemoryStore.new({your: {'enum' => 'data'}})
# or a configured `RedisStore`, which you can get with
Enum.default_backend = Enum::RedisStore.new(configured_redis_namespace)
# and then use
Enum[:your] # => {'enum' => 'data'}
Enum.fetch(:your) # => {'enum' => 'data'}
# unknown Enums cause exceptions
Enum[:nope] # => ArgumentError
Or you can alternatively have multiple enum stores by creating an instance
of Enum
and passing it the store to use.
@enum = Enum.new(Enum::MemoryStore.new({a: 'small', amount: ['of', 'enums']}))
@enum[:a] # => 'small'
@enum.fetch(:amount) # => ['of', 'enums']
# unknown Enums cause exceptions
@enum.feth(:nope) # => ArgumentError
If you are using the RedisStore
, you can use RedisStore#load_hash
or
RedisStore#load_yaml
to load the store. In redis, you can't use symbols
as names, but the RedisStore
will handle storing nested hashes or arrays.
For instance you could call:
Enum::RedisStore.new(configured_redis).load_hash(
{
'select_options' => [
{'name' => 'howdy', 'value' => 'hello'},
{'name' => 'later', 'value' => 'bye'}
],
'other_stuff' => {
['somehow', 'this', 'seems', 'important']
},
'2 + 2' => '5'
}
)
and the RedisStore
will get all that saved so that
Enum['select_options']
# => [{'name' => 'howdy', 'value' => 'hello'}, {...}]
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request