Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/douglaslise/mongoid_enumerable
Mongoid Enumerable
https://github.com/douglaslise/mongoid_enumerable
enum enumerable mongodb mongoid ruby status
Last synced: 3 months ago
JSON representation
Mongoid Enumerable
- Host: GitHub
- URL: https://github.com/douglaslise/mongoid_enumerable
- Owner: douglaslise
- License: mit
- Created: 2018-05-20T00:43:38.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-08-19T12:43:02.000Z (about 1 year ago)
- Last Synced: 2024-06-03T20:00:50.096Z (5 months ago)
- Topics: enum, enumerable, mongodb, mongoid, ruby, status
- Language: Ruby
- Homepage:
- Size: 59.6 KB
- Stars: 15
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Mongoid Enumerable
[![Unit Tests](https://github.com/douglaslise/mongoid_enumerable/workflows/Unit%20Tests%20-%20RSpec/badge.svg?branch=master)](https://github.com/douglaslise/mongoid_enumerable/actions?query=workflow%3A%22Unit+Tests+-+RSpec%22+branch%3Amaster)
[![Lint](https://github.com/douglaslise/mongoid_enumerable/workflows/Lint%20-%20Rubocop/badge.svg?branch=master)](https://github.com/douglaslise/mongoid_enumerable/actions?query=workflow%3A%22Lint+-+Rubocop%22+branch%3Amaster)
[![Maintainability](https://api.codeclimate.com/v1/badges/bc09bc91c31fed14924a/maintainability)](https://codeclimate.com/github/douglaslise/mongoid_enumerable/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/bc09bc91c31fed14924a/test_coverage)](https://codeclimate.com/github/douglaslise/mongoid_enumerable/test_coverage)
[![Gem Version](https://badge.fury.io/rb/mongoid_enumerable.svg)](https://badge.fury.io/rb/mongoid_enumerable)Define enumerable fields in your Mongoid documents.
- [Installation](#installation)
- [Usage](#usage)
- [Options](#options)
- [Default](#default)
- [Prefix](#prefix)
- [Callbacks](#callbacks)
- [Before Change](#before-change)
- [After Change](#after-change)
- [Scopes/Criterias](#scopescriterias)
- [Development](#development)
- [Contributing](#contributing)
- [Releasing a New Version](#releasing-a-new-version)## Installation
Add this line to your application's Gemfile:
```ruby
gem 'mongoid_enumerable'
```And then execute:
```shell
bundle
```Or install it yourself as:
```shell
gem install mongoid_enumerable
```## Usage
Simply include `MongoidEnumerable` in your document.
After add `enumerable` with:- Field name
- An array with possible values
- Options (default, prefix and callbacks)Example:
```ruby
class Task
include Mongoid::Document
include MongoidEnumerableenumerable :status, %w[completed running failed waiting], default: "waiting"
end
```Now we have methods in this document's instance:
```ruby
task = Task.newtask.status # "waiting"
task.waiting? # truetask.running! # changes status field to "running"
task.running? # true
task.waiting? # false
```### Options
#### Default
Defines which value is the default for new documents. If not specified the first value is used as default.
```ruby
enumerable :status, %w[completed running failed waiting], default: "waiting"
```#### Prefix
You can define a prefix for your methods that could be useful if you have more than one enumerable with the same values.
```ruby
enumerable :build_status,
%w[completed running failed waiting],
default: "waiting",
prefix: "build_"enumerable :deploy_status,
%w[completed running failed waiting],
default: "waiting",
prefix: "deploy_"task.build_completed?
task.build_failed!
task.deploy_running?
task.deploy_failed!
```#### Callbacks
##### Before Change
You can define a `before_change` callback that runs before each change. If the method returns a falsey value (`nil` or `false`) then the change will be aborted.
The method must receive two parameters: the old and the new value, respectively.
Example:
```ruby
class Task
include Mongoid::Document
include MongoidEnumerableenumerable :status, %w[completed running failed waiting], default: "waiting", before_change: :can_status_change?
def can_status_change?(old_value, new_value)
new_value != "waiting"
end
endtask = Task.new
task.status # "waiting"task.running!
task.status # "running"task.waiting!
task.status # "running"
```##### After Change
You can define an `after_change` callback that runs after each change. The method must receive two parameters: the old and the new value, respectively.
Example:
```ruby
class Task
include Mongoid::Document
include MongoidEnumerableenumerable :status, %w[completed running failed waiting],
default: "waiting",
after_change: :status_changeddef status_changed(old_value, new_value)
puts "Status changed from #{old_value} to #{new_value}."
end
endtask = Task.new
task.running!
# Console output: "Status changed from waiting to running."
```### Scopes/Criterias
All values are added as scopes/criterias to your document class:
```ruby
Task.waiting # Returns all tasks with waiting status
Task.running # Returns all tasks with running status
```If prefixed, the scopes/criterias are prefixed too:
```ruby
Task.build_waiting # Returns all tasks with build waiting status
Task.deploy_running # Returns all tasks with deploy running status
```## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` 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](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at .
## Releasing a New Version
After change version in file `lib/mongoid_enumerable/version.rb` it is needed only to run this command in terminal:
```shell
rake release
```