Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/musicglue/mongoid_silo
Creates representations of Mongoid Documents
https://github.com/musicglue/mongoid_silo
Last synced: 1 day ago
JSON representation
Creates representations of Mongoid Documents
- Host: GitHub
- URL: https://github.com/musicglue/mongoid_silo
- Owner: musicglue
- License: mit
- Created: 2013-01-02T17:14:51.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2017-02-13T11:01:25.000Z (over 7 years ago)
- Last Synced: 2024-10-31T13:12:03.534Z (8 days ago)
- Language: Ruby
- Size: 58.6 KB
- Stars: 2
- Watchers: 15
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/musicglue/mongoid_silo) [![Build Status](https://travis-ci.org/musicglue/mongoid_silo.png?branch=master)](https://travis-ci.org/musicglue/mongoid_silo)
# MongoidSiloMongoidSilo creates and transparently manages static representations of a model - e.g. for creating Feeds or other diverse datastructures.
It's pretty opinionated, and thus must be awesome. It requires the latest Mongoid and Sidekiq, mainly because they are both awesome, secondly because it uses them.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'mongoid_silo'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install mongoid_silo
## Usage
Include ```Mongoid::Silo``` in your model, and then declare your silos.
```ruby
# The default usage creates a "default" silo, accessable through instance#default_silo that will call
# down to the default 'GrainBelt' generator. This will simply store all the attributes on your model,
# so you almost certainly don't want this. See below for more details.
silo# Or you can specify the silo name and the class that will be called to populate it, like so...
silo :feed, generator: "MyGeneratorClass"# You can now pass a block to the constructor, and declare child classes that will cause this silo to be updated:
silo :feed do |config|
config.generator = "MyGeneratorClass"
config.dependents << {class_name: "OtherClass", foreign_key: "my_class_id"}
end# To create a custom generator class, simply inherit from MongoidSilo::GrainBelt and override the
# generate method.
class MyGeneratorClass < MongoidSilo::GrainBelt
def generate
{
name: name,
age: age,
dingbats: true
}
end
end
```
The generator class gets passed the instance of your model when the Silo is generated, and it exposes
your methods and attributes on that instance. Otherwise, you have access to the instance through the ```object``` accessor.## Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request