slash and burn reorg

This commit is contained in:
Chris Anderson 2008-09-11 20:53:38 -07:00
parent 40f22ffadc
commit fa1ef4b4f9
8 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,29 @@
require "rubygems"
require 'json'
require 'rest_client'
require File.dirname(__FILE__) + '/couch_rest'
require File.dirname(__FILE__) + '/database'
require File.dirname(__FILE__) + '/pager'
require File.dirname(__FILE__) + '/file_manager'
require File.dirname(__FILE__) + '/streamer'
# this has to come after the JSON gem
# this date format sorts lexicographically
# and is compatible with Javascript's new Date(time_string) constructor
# note that sorting will break if you store times from multiple timezones
# I like to add a ENV['TZ'] = 'UTC' to my apps
class Time
def to_json(options = nil)
%("#{strftime("%Y/%m/%d %H:%M:%S %z")}")
end
# this works to decode the outputted time format
# from ActiveSupport
# def self.parse string, fallback=nil
# d = DateTime.parse(string).new_offset
# self.utc(d.year, d.month, d.day, d.hour, d.min, d.sec)
# rescue
# fallback
# end
end

105
lib/couchrest/database.rb Normal file
View file

@ -0,0 +1,105 @@
require 'cgi'
require "base64"
class CouchRest
class Database
attr_reader :server, :host, :name, :root
def initialize server, name
@name = name
@server = server
@host = server.uri
@root = "#{host}/#{name}"
end
def to_s
@root
end
def info
CouchRest.get @root
end
def documents params = nil
url = CouchRest.paramify_url "#{@root}/_all_docs", params
CouchRest.get url
end
def temp_view funcs, params = nil
url = CouchRest.paramify_url "#{@root}/_temp_view", params
JSON.parse(RestClient.post(url, funcs.to_json, {"Content-Type" => 'application/json'}))
end
def view name, params = nil
url = CouchRest.paramify_url "#{@root}/_view/#{name}", params
CouchRest.get url
end
# experimental
def search params = nil
url = CouchRest.paramify_url "#{@root}/_search", params
CouchRest.get url
end
# experimental
def action action, params = nil
url = CouchRest.paramify_url "#{@root}/_action/#{action}", params
CouchRest.get url
end
def get id
slug = CGI.escape(id)
CouchRest.get "#{@root}/#{slug}"
end
def fetch_attachment doc, name
doc = CGI.escape(doc)
name = CGI.escape(name)
RestClient.get "#{@root}/#{doc}/#{name}"
end
# PUT or POST depending on presence of _id attribute
def save doc
if doc['_attachments']
doc['_attachments'] = encode_attachments(doc['_attachments'])
end
if doc['_id']
slug = CGI.escape(doc['_id'])
else
slug = doc['_id'] = @server.next_uuid
end
CouchRest.put "#{@root}/#{slug}", doc
end
def bulk_save docs
ids, noids = docs.partition{|d|d['_id']}
uuid_count = [noids.length, @server.uuid_batch_count].max
noids.each do |doc|
doc['_id'] = @server.next_uuid(uuid_count)
end
CouchRest.post "#{@root}/_bulk_docs", {:docs => docs}
end
def delete doc
slug = CGI.escape(doc['_id'])
CouchRest.delete "#{@root}/#{slug}?rev=#{doc['_rev']}"
end
def delete!
CouchRest.delete @root
end
private
def encode_attachments attachments
attachments.each do |k,v|
next if v['stub']
v['data'] = base64(v['data'])
end
attachments
end
def base64 data
Base64.encode64(data).gsub(/\s/,'')
end
end
end