CouchRestAdapter

This is a realy early version.

This project rocks and uses MIT-LICENSE.

Requirements

  • Rails > 4

  • Couchrest

  • Requires config/database.yml file

Instalation

Right now there will be a conflict if you use it as it is mixed with ActoveRecord, so you should create your reails project without AR, as in rails new my_app -O

In Gemfile

gem 'couch_rest_adapter'

Sample config/couchdb.yml

All this are required attributes.

defaults: &defaults
  host: localhost
  port: 5984
  protocol: http
  design_doc: my_app
  # optional
  # username: username
  # password: password

development:
  <<: *defaults
  name: db

test:
  <<: *defaults
  name: db_test

Versions > 0.8.0 support https protocol, s

CouchViews

After installing the gem you should run “‘rake db:push:config“` this will setup a design document called as the database.yml “`design_doc“` value with the next structure:

{
   "_id": "_design/my_app",
   "language": "coffeescript",
   "views": {
       "all": {
           "map": "(d) ->\n  split_id = d._id.split('/')\n  t = split_id[0]\n  emit t, d\n",
           "reduce": "# This is only for demosntration one can use the built in count\n(keys, values, rereduce)->\n  if rereduce\n    sum(values)\n  else\n    values.length\n"
       },
       "by_attribute": {
           "map": "(doc) ->\n  type = doc._id.split('/')[0]\n  for a of doc\n    emit([type, a, doc[a]], doc._id)\n"
       },
       "by_type": {
           "map": "(d)->\n  emit d.type.toLowerCase(), d._id if d.type\n"
       },
   }
}

You can add more views as needed into “‘db/designs/“` folder.

This is how the designs are delcared:

db
  designs
    my_map_name.map.coffee
    my_filter_name.filter.coffee
    my_reduce_name.reduce.coffee

Then if you run “‘rake db:push:design“` the “`_design/my_app“ document will be updated. The views need to be written on coffeescript code.

One thing: this will allow you to add tests to your couch views ;-)

Model Declaration

class User < CouchRestAdpater::Base
  use_default_database
end

TODO

  • Allow setting new attributes with “‘model.attribute = value“`

  • More test coverage

  • Add tasks for pushing design documents