Sha256: 277933167177cc06f6a2f1225fa63e44d526a4f3d26b6cc42b0e8ec44d38e106

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

namespace :db do
  desc "Will create if missing database and add default views"
  task setup: :environment do
    VIEW_DOC = {
      language: "coffeescript",
      views: {
        find: {
          map: "(d)->\n  if d._id\n    [str, t, id] = d._id.match /([^/]+)[/](.+)/\n    emit [t, id], 1 if t and id"
        }
      }
    }.freeze

    Dolly::Document.database.put "", nil

    remote_doc = begin
      JSON.parse Dolly::Document.database.get(Dolly::Document.design_doc).parsed_response
    rescue Dolly::ResourceNotFound
      {}
    end

    doc = VIEW_DOC.merge remote_doc

    Dolly::Document.database.put Dolly::Document.design_doc, doc.to_json
    puts "design document #{Dolly::Document.design_doc} was created/updated."
  end

  desc "Will update design document with what is on db/designs/*.coffee"
  task design: :environment do
    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' => Dolly::Document.design_doc,
      'language' => 'coffeescript',
      'views' => views,
      'filters' => filters
    }

    begin
      hash_doc = JSON::parse Dolly::Document.database.get(view_doc["_id"]).parsed_response

      rev = hash_doc.delete('_rev')

      if hash_doc == view_doc
        puts 'everything up to date'
      else
        view_doc["_rev"] = rev
        view_doc["views"].merge!(hash_doc['views'])
        puts 'updating design document'
        will_save = true
      end

    rescue Dolly::ResourceNotFound
      puts 'creating design document'
      will_save = true
    end

    Dolly::Document.database.put Dolly::Document.design_doc, view_doc.to_json if will_save
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dolly-0.5.2 lib/tasks/db.rake
dolly-0.5.1 lib/tasks/db.rake