# desc “Explaining what the task does” # task :couch_rest_adapter do # # Task goes here # end namespace :db do
namespace :push do view_doc = { language: "coffeescript", views: { all: { map: "(d) ->\n split_id = d._id.split('/')\n t = split_id[0]\n emit t, d._id\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" } } } desc "Will save the default design document." task :config do # TODO: DRY this methods, the need to have config yml file loaded prevent us to # add this on the namespace. Autoload didn;t work as expected. class BaseModel < CouchRestAdapter::Base use_default_database end doc_id = "_design/#{BaseModel.default_design_doc}" BaseModel.database.save_doc view_doc.merge( "_id" => doc_id ) puts "Design document #{doc_id} added." end desc "Will update design document with what is on db/designs/*.coffee" task design: :environment do class BaseModel < CouchRestAdapter::Base use_default_database end path = File.join Rails.root, 'db', 'designs' files = Dir.glob("**/*.coffee") views = {} filters = {} files.each do |filename| name, key = File.basename(filename).sub(/.coffee/i, '').split(/\./) key ||= 'map' data = File.read filename if key == 'filter' filters[name] ||= data else views[name] ||= {} views[name][key] = data end end view_doc = { '_id' => "_design/#{BaseModel.default_design_doc}", 'language' => 'coffeescript', 'views' => views, 'filters' => filters } begin doc = BaseModel.database.get view_doc["_id"] hash_doc = doc.to_hash rev = hash_doc.delete('_rev') if hash_doc == view_doc puts 'everything up to date' else view_doc["_rev"] = rev puts 'updating design document' will_save = true end rescue RestClient::ResourceNotFound puts 'creating design document' will_save = true end BaseModel.database.save_doc view_doc if will_save end end
end