! Copyright (C) 2008 Alex Chapman
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs couchdb kernel namespaces sequences strings tools.test ;
+USING: accessors assocs couchdb hashtables kernel namespaces
+random.data sequences strings tools.test ;
IN: couchdb.tests
! You must have a CouchDB server (currently only the version from svn will
} save-doc ] unit-test
[ t ] [ "id" get load-doc delete-doc string? ] unit-test
[ "id" get load-doc ] must-fail
+
+ { t } [
+ "oga" "boga" associate
+ couch get db-url 10 random-string append
+ couch-put "ok" of
+ ] unit-test
+
[ ] [ couch get delete-db ] unit-test
] with-couch
: couch-get ( url -- assoc )
<get-request> couch-request ;
-: couch-put ( post-data url -- assoc )
- <put-request> couch-request ;
+: <json-post-data> ( assoc -- post-data )
+ >json utf8 encode "application/json" <post-data> swap >>data ;
+
+: couch-put ( assoc url -- assoc' )
+ [ <json-post-data> ] dip <put-request> couch-request ;
-: couch-post ( post-data url -- assoc )
- <post-request> couch-request ;
+: couch-post ( assoc url -- assoc' )
+ [ <json-post-data> ] dip <post-request> couch-request ;
: couch-delete ( url -- assoc )
<delete-request> couch-request ;
! TODO: queries. Maybe pass in a hashtable with options
db-url "_all_docs" append couch-get ;
-: <json-post-data> ( assoc -- post-data )
- >json utf8 encode "application/json" <post-data> swap >>data ;
-
: compact-db ( db -- )
- f <json-post-data> swap db-url "_compact" append couch-post response-ok* ;
+ f swap db-url "_compact" append couch-post response-ok* ;
! documents
: id> ( assoc -- id ) "_id" of ;
id> id-url ;
: temp-view ( view -- results )
- <json-post-data> couch get db-url "_temp_view" append couch-post ;
+ couch get db-url "_temp_view" append couch-post ;
: temp-view-map ( map -- results )
"map" associate temp-view ;
: save-doc-as ( assoc id -- )
- [ dup <json-post-data> ] dip id-url couch-put response-ok
+ dupd id-url couch-put response-ok
[ copy-id ] [ copy-rev ] 2bi ;
: save-new-doc ( assoc -- )