Skip to content
This repository was archived by the owner on Jun 6, 2020. It is now read-only.

ceritium/vimo

Repository files navigation

Vimo

Rails engine that allow to your users create and customize their own virtual models.

Warning

This engine is in a very early stage and the DSL and APIs could change, if you are interested on use it you can email me: ceritium@gmail.com.

Installation

Add this line to your application's Gemfile:

gem 'vimo'

And then execute:

$ bundle

Or install it yourself as:

$ gem install vimo

Usage

Expose the manage API

Add mount Vimo::Engine => "/vimo" in config/routers.rb to expose an restfull API to manage the virtual models and their contents.

CRUD of entities, where :entity is the id or system_name of the entity.

GET    /vimo/entities
POST   /vimo/entities
GET    /vimo/entities/:entity
PATCH  /vimo/entities/:entity
PUT    /vimo/entities/:entity
DELETE /vimo/entities/:entity

Entity attributes:

{
  "name": "posts",          # required
  "system_name": "posts",   # unique per owner
  "field_attributes": {
    "id": 42,               # just for update
    "name": "title",        # required
    "kind": "string",       # required, options: string, integer, float, boolean, date or datetime
    "required": true,       # options: true or false
    "_destroy": false,      # just for update, mark to destroy the field, options: true or false
  }
}

Create an entity curl example:

curl localhost:3000/vimo/entities -X POST -H 'Content-Type: application/json' -d '{"entity": {"name": "comments", "fields_attributes": [{"name": "title", "kind": "string", "required": true}]}}'

CRUD for your virtual models:

GET    /vimo/entities/:entity/items
POST   /vimo/entities/:entity/items
GET    /vimo/entities/:entity/items/:id
PATCH  /vimo/entities/:entity/items/:id
PUT    /vimo/entities/:entity/items/:id
DELETE /vimo/entities/:entity/items/:id

Create an item curl example:

curl localhost:3000/vimo/entities/comments/items -X POST -H 'Content-Type: application/json' -d '{"item" : {"title": "a title"}}'

Short path version

GET    /vimo/resources/:entity
POST   /vimo/resources/:entity
GET    /vimo/resources/:entity/:id
PATCH  /vimo/resources/:entity/:id
PUT    /vimo/resources/:entity/:id
DELETE /vimo/resources/:entity/:id

API authentication

Vimo allow you to authenticate and set ownership to your models.

Vimo.configure do |config|

  # The name of the before filter we'll call to authenticate the current user.
  # Defaults to :login_required
  config.authentication_method = :authenticate!

  # The name of the controller method we'll call to return the owner for
  # the virtual models.
  config.owner_method = :current_account
end

Setting a owner scope the uniquenes constraints.

The owner should respond to vimo_entities

class Account < ApplicationRecord
  vimo_owner
end

Expand your models

Having a model like Post that belongs to an Account you can allow to your users expand it.

class Post < ApplicationRecord
  belongs_to :account

  vimo_expand owner: :account
end

Now can manage the virtual attributes of the model Post with the identifier _expand_posts.

License

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

About

Rails engine that allow to your users create and customize their own virtual models.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •