mongoid-crud

CRUD methods for mongoid models

Four method to rule them all!

Four super simple to use method on any mongoid model.

    __create__ || _create
    __read__   || _read
    __update__ || _update
    __delete__ || _delete

Behavior

create:

  • if the model is an embeds it require a parent_id passed by "parent_id" or :parent_id key
    • same goes for the referenced
  • if the model is a main one it's the same as normaly, pass the hash obj

read:

  • if the model embeds or referenced you MAY tell the parent_id but you dont have to
    • in that case every doc that match the query hash will be returned in an array
  • if you give _id than it will the object (even if it's embedded deeply in mordor)
  • if you pass parent_id but no _id it will return a mongoid criteria with the collection of finds under the specified parent

update:

  • you must give the _id for the target obj and any other hash tag will be the values to be set

delete:

  • you must give the _id for delete the target obj
    • if you want drop a collection from a parent i suggest to use read + _id to find that object and give direct order to drop the embeds/reference collection

Example

short example:

    require "mongoid-crud"

    require_relative "helper/connection"
    require_relative "helper/models"

    test_a= TestA.__create__( hello: "world" )
    test_b= TestB.__create__( hello: "world", world: "no", parent_id: test_a['_id'] )
    test_C= TestC.__create__( hello: "embeds one", parent_id: test_a['_id'] )

    #> puts into json
    puts TestA._read( _id: test_a['_id'] ).to_json

produce:

  [{"_id":"536b298b241548e55a000001","created_at":"2014-05-08T08:51:55+02:00","hello":"world","test_b":[{"_id":"536b298b241548e55a000002","created_at":"2014-05-08T08:51:55+02:00","hello":"world","updated_at":"2014-05-08T08:51:55+02:00","world":"no"}],"test_c":{"_id":"536b298b241548e55a000003","created_at":"2014-05-08T08:51:55+02:00","hello":"embeds one","updated_at":"2014-05-08T08:51:55+02:00"},"updated_at":"2014-05-08T08:51:55+02:00"}]

Complex example

    require "mongoid-crud"

    require_relative "helper/connection"
    require_relative "helper/models"

    test_a= TestA.__create__( hello: "world" )
    #> TestA obj return

    test_b= TestB.__create__( hello: "world", world: "no", parent_id: test_a['_id'] )
    #> TestB obj return

    TestB.__read__( hello: "world", world: "no", parent_id: test_a['_id'] ).each{|e|puts(e.inspect)}
    #> search by parent_id + query , mongoid criteria return

    puts TestB.__read__(  _id: test_b['_id'] ).inspect
    #> search for target _id in embeds, object return

    TestB.__read__( hello: "world", world: "no" ).inspect
    #> search all embeds by query , return in simple array

    TestB.__update__ _id: test_b['_id'], hello: "sup!"
    #> true

    TestB.__read__(  _id: test_b['_id'] )
    #> TestB Obj

    TestB.__delete__(  _id: test_b['_id'] )
    #> true

    TestB.__read__(  _id: test_b['_id'] )
    #> nil