Sha256: 85228243b635b514d90a45d7c1c17a5765dd24bfef609670013456e8df414c35

Contents?: true

Size: 1.62 KB

Versions: 8

Compression:

Stored size: 1.62 KB

Contents

namespace :db do
  desc "Will create if missing database and add default views"
  task setup: :environment do
    Dolly::Document.database.put "", nil
    puts "Database created"
  end

  desc "Will update design document with what is on db/designs/*.coffee"
  task design: :environment do
    design_dir = Rails.root.join 'db', 'designs'
    files = Dir.glob File.join design_dir, '**', '*.coffee'
    data = {}

    files.each do |filename|
      parts = filename[design_dir.to_s.length+1..-1].split '/'
      design_doc_name = parts.count == 1 ? Dolly::Document.design_doc : "_design/#{parts.first}"

      name, key  = File.basename(filename).sub(/.coffee/i, '').split(/\./)
      key ||= 'map'
      source = File.read filename

      vd = data[design_doc_name] ||= { 'views' => {}, 'filters' => {} }

      if key == 'filter'
        vd['filters'][name] = source
      else
        v = vd['views'][name] ||= {}
        v[key] = source
      end
    end

    data.each do |design_doc_name, view_doc|
      view_doc.merge!( '_id' => design_doc_name, 'language' => 'coffeescript')

      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
          puts "Updating #{design_doc_name}"
          will_save = true
        end

      rescue Dolly::ResourceNotFound
        puts "Creating design doc: #{design_doc_name}"
        will_save = true
      end

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

end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
dolly-1.0.0 lib/tasks/db.rake
dolly-0.9.0 lib/tasks/db.rake
dolly-0.8.1 lib/tasks/db.rake
dolly-0.8.0 lib/tasks/db.rake
dolly-0.7.6 lib/tasks/db.rake
dolly-0.7.5 lib/tasks/db.rake
dolly-0.7.3 lib/tasks/db.rake
dolly-0.7.2 lib/tasks/db.rake