akdubya-cushion 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/cushion.rb CHANGED
@@ -2,7 +2,7 @@ require 'json'
2
2
  require 'restclient'
3
3
  require 'uri'
4
4
 
5
- dir = File.dirname(__FILE__) + '/cushion/'
5
+ dir = File.expand_path(File.dirname(__FILE__)) + '/cushion/'
6
6
 
7
7
  require dir + 'core_ext'
8
8
  require dir + 'server'
@@ -13,7 +13,7 @@ require dir + 'design'
13
13
  DEFAULT_COUCH_HOST = "http://127.0.0.1:5984"
14
14
 
15
15
  module Cushion
16
- VERSION = '0.5.1'
16
+ VERSION = '0.5.2'
17
17
 
18
18
  class << self
19
19
 
@@ -19,7 +19,7 @@ module Cushion
19
19
 
20
20
  # Compacts this database.
21
21
  def compact(headers = {})
22
- server.post("#{@name}/_compact", nil, headers)
22
+ post("_compact", nil, headers)
23
23
  end
24
24
 
25
25
  # Creates this database on the server.
@@ -28,7 +28,7 @@ module Cushion
28
28
  end
29
29
 
30
30
  # Deletes this database from the server.
31
- def delete(headers = {})
31
+ def drop(headers = {})
32
32
  server.delete(@name, headers)
33
33
  end
34
34
 
@@ -39,11 +39,11 @@ module Cushion
39
39
  def all_docs(params = {})
40
40
  keys = params.delete(:keys)
41
41
  opts = params.delete(:headers) || {}
42
- path = Cushion.paramify_url("#{@name}/_all_docs", params)
42
+ path = Cushion.paramify_url("_all_docs", params)
43
43
  if keys
44
- server.post(path, {:keys => keys}, opts)
44
+ post(path, {:keys => keys}, opts)
45
45
  else
46
- server.get(path, opts)
46
+ get(path, opts)
47
47
  end
48
48
  end
49
49
 
@@ -52,8 +52,8 @@ module Cushion
52
52
  def open_doc(id, params = {})
53
53
  opts = params.delete(:headers) || {}
54
54
  slug = Cushion.escape_docid(id)
55
- path = Cushion.paramify_url("#{@name}/#{slug}", params)
56
- server.get(path, opts)
55
+ path = Cushion.paramify_url("#{slug}", params)
56
+ get(path, opts)
57
57
  end
58
58
 
59
59
  # Retrieves a single document by +id+ and returns a <tt>Cushion::Document</tt>
@@ -79,17 +79,17 @@ module Cushion
79
79
  end
80
80
  if params['_id']
81
81
  slug = Cushion.escape_docid(params['_id'])
82
- server.put("#{@name}/#{slug}", params, opts)
82
+ put("#{slug}", params, opts)
83
83
  else
84
84
  slug = params['_id'] = server.next_uuid
85
- server.put("#{@name}/#{slug}", params, opts)
85
+ put("#{slug}", params, opts)
86
86
  end
87
87
  end
88
88
 
89
89
  # Deletes a single document by +id+ and +rev+.
90
90
  def delete_doc(id, rev, headers = {})
91
91
  slug = Cushion.escape_docid(id)
92
- server.delete("#{@name}/#{slug}?rev=#{rev}", headers)
92
+ delete("#{slug}?rev=#{rev}", headers)
93
93
  end
94
94
 
95
95
  # Creates, updates and deletes multiple documents in this database according
@@ -130,7 +130,7 @@ module Cushion
130
130
  doc['_id'] = nextid if nextid
131
131
  end
132
132
  end
133
- server.post("#{@name}/_bulk_docs", {:docs => docs}, headers)
133
+ post("_bulk_docs", {:docs => docs}, headers)
134
134
  end
135
135
 
136
136
  # A convenience method for deleting multiple documents at once. Just pass in
@@ -155,7 +155,7 @@ module Cushion
155
155
  # db.purge(doc_revs)
156
156
  #
157
157
  def purge(doc_revs, headers = {})
158
- server.post("#{@name}/_purge", doc_revs, headers)
158
+ post("_purge", doc_revs, headers)
159
159
  end
160
160
 
161
161
  # Copies the document identified by +source_id+ to a new or existing document
@@ -171,7 +171,7 @@ module Cushion
171
171
  else
172
172
  dest_id
173
173
  end
174
- server.copy("#{@name}/#{slug}", destination, headers)
174
+ copy("#{slug}", destination, headers)
175
175
  end
176
176
 
177
177
  # Moves the document identified by +source_id+ and +src_rev+ to a new or
@@ -188,7 +188,7 @@ module Cushion
188
188
  else
189
189
  dest_id
190
190
  end
191
- server.move("#{@name}/#{slug}?rev=#{src_rev}", destination, headers)
191
+ move("#{slug}?rev=#{src_rev}", destination, headers)
192
192
  end
193
193
 
194
194
  # Supply +funcs+ to create a temporary view and run a query against it. Set
@@ -207,8 +207,8 @@ module Cushion
207
207
  keys = params.delete(:keys)
208
208
  headers = params.delete(:headers) || {}
209
209
  funcs = funcs.merge({:keys => keys}) if keys
210
- path = Cushion.paramify_url("#{@name}/_temp_view", params)
211
- server.post(path, funcs, headers)
210
+ path = Cushion.paramify_url("_temp_view", params)
211
+ post(path, funcs, headers)
212
212
  end
213
213
 
214
214
  # Query a saved view identified by +view+. Set the +keys+ param to perform a
@@ -221,11 +221,11 @@ module Cushion
221
221
  def view(view, params = {})
222
222
  keys = params.delete(:keys)
223
223
  headers = params.delete(:headers) || {}
224
- path = Cushion.paramify_url("#{@name}/_view/#{view}", params)
224
+ path = Cushion.paramify_url("_view/#{view}", params)
225
225
  if keys
226
- server.post(path, {:keys => keys}, headers)
226
+ post(path, {:keys => keys}, headers)
227
227
  else
228
- server.get(path, headers)
228
+ get(path, headers)
229
229
  end
230
230
  end
231
231
 
@@ -237,8 +237,8 @@ module Cushion
237
237
  defaults = { :accept => "text/html;text/plain;*/*" }
238
238
  headers = params.delete(:headers) || {}
239
239
  slug = Cushion.escape_docid(id)
240
- path = Cushion.paramify_url("#{@name}/_show/#{design}/#{show_template}/#{slug}", params)
241
- server.get(path, defaults.merge(headers))
240
+ path = Cushion.paramify_url("_show/#{design}/#{show_template}/#{slug}", params)
241
+ get(path, defaults.merge(headers))
242
242
  end
243
243
 
244
244
  # Query the list template identified by +design+, +list_template+ and +view+.
@@ -248,8 +248,8 @@ module Cushion
248
248
  def list(design, list_template, view, params = {})
249
249
  defaults = { :accept => "text/html;text/plain;*/*" }
250
250
  headers = params.delete(:headers) || {}
251
- path = Cushion.paramify_url("#{@name}/_list/#{design}/#{list_template}/#{view}", params)
252
- server.get(path, defaults.merge(headers))
251
+ path = Cushion.paramify_url("_list/#{design}/#{list_template}/#{view}", params)
252
+ get(path, defaults.merge(headers))
253
253
  end
254
254
 
255
255
  # Issues a request to the CouchDB external server identified by +process+.
@@ -258,7 +258,7 @@ module Cushion
258
258
  #
259
259
  def external(verb, process_path, params = {})
260
260
  path = Cushion.paramify_url("_#{process_path}", params[:query])
261
- server.request(verb, path, :body => params[:body], :headers => params[:headers])
261
+ request(verb, path, :body => params[:body], :headers => params[:headers])
262
262
  end
263
263
 
264
264
  # Uses open-uri to open the attachment identified by +id+ and +filename+.
@@ -280,7 +280,7 @@ module Cushion
280
280
  defaults = { :content_type => "application/octet-stream" }
281
281
  slug = Cushion.escape_docid(id)
282
282
  fname = CGI.escape(filename)
283
- server.put("#{@name}/#{slug}/#{fname}?rev=#{rev}", data, defaults.merge(headers))
283
+ put("#{slug}/#{fname}?rev=#{rev}", data, defaults.merge(headers))
284
284
  end
285
285
 
286
286
  # Deletes an attachment under the document identified by +id+ and +rev+ with
@@ -289,7 +289,7 @@ module Cushion
289
289
  def delete_attachment(id, rev, filename, headers = {})
290
290
  slug = Cushion.escape_docid(id)
291
291
  fname = CGI.escape(filename)
292
- server.delete("#{@name}/#{slug}/#{fname}?rev=#{rev}", headers)
292
+ delete("#{slug}/#{fname}?rev=#{rev}", headers)
293
293
  end
294
294
 
295
295
  # Renames an attachment under the document identified by +id+ and +rev+.
@@ -306,5 +306,47 @@ module Cushion
306
306
  end
307
307
  end
308
308
 
309
+ # Issues a HEAD request to this database. See Cushion::Server#head.
310
+ def head(path, headers = {})
311
+ server.head("#{@name}/#{path}", headers)
312
+ end
313
+
314
+ # Issues a GET request to this database. See Cushion::Server#get.
315
+ def get(path, headers = {})
316
+ server.get("#{@name}/#{path}", headers)
317
+ end
318
+
319
+ # Issues a POST request to this database. See Cushion::Server#post.
320
+ def post(path, body, headers = {})
321
+ server.post("#{@name}/#{path}", body, headers)
322
+ end
323
+
324
+ # Issues a PUT request to this database. See Cushion::Server#put.
325
+ def put(path, body, headers = {})
326
+ server.put("#{@name}/#{path}", body, headers)
327
+ end
328
+
329
+ # Issues a DELETE request to this database. See Cushion::Server#delete.
330
+ def delete(path, headers = {})
331
+ server.delete("#{@name}/#{path}", headers)
332
+ end
333
+
334
+ # Issues a COPY request to this database. See Cushion::Server#copy.
335
+ def copy(source, destination, headers = {})
336
+ server.copy("#{@name}/#{source}", destination, headers)
337
+ end
338
+
339
+ # Issues a MOVE request to this database. See Cushion::Server#move.
340
+ def move(source, destination, headers = {})
341
+ server.move("#{@name}/#{source}", destination, headers)
342
+ end
343
+
344
+ # Issues a generic request to this database. See Cushion::Server#request.
345
+ def request(verb, path, params)
346
+ server.request(verb, "#{@name}/#{path}", params)
347
+ end
348
+
349
+ ## EXPERIMENTAL ##
350
+
309
351
  end
310
352
  end
@@ -58,8 +58,8 @@ module Cushion
58
58
  end
59
59
 
60
60
  # Deletes the database identified by +name+ from this server.
61
- def delete(name, headers = {})
62
- db(name).delete(headers)
61
+ def drop(name, headers = {})
62
+ db(name).drop(headers)
63
63
  end
64
64
 
65
65
  # Deletes and re-creates the database identified by +name+.
@@ -67,7 +67,7 @@ module Cushion
67
67
  def recreate(name)
68
68
  rdb = db(name)
69
69
  begin
70
- rdb.delete
70
+ rdb.drop
71
71
  rescue RestClient::ResourceNotFound
72
72
  nil
73
73
  end
@@ -105,7 +105,7 @@ module Cushion
105
105
  end
106
106
 
107
107
  # Issues a GET request to the CouchDB server. Returns a parsed response body
108
- # if the +accept+ options is set to 'application/json' (the default), otherwise
108
+ # if the +accept+ option is set to 'application/json' (the default), otherwise
109
109
  # returns the raw RestClient response body.
110
110
  def get(path, headers = {})
111
111
  defaults = { :accept => "application/json" }
@@ -114,7 +114,7 @@ module Cushion
114
114
 
115
115
  # Issues a POST request to the CouchDB server. Parses the request body if
116
116
  # the +content_type+ option is set to 'application/json' (the default).
117
- # Returns a parsed response body if the +accept+ options is set to
117
+ # Returns a parsed response body if the +accept+ option is set to
118
118
  # 'application/json' (the default), otherwise returns the raw
119
119
  # RestClient response body.
120
120
  def post(path, body, headers = {})
@@ -135,7 +135,7 @@ module Cushion
135
135
  end
136
136
 
137
137
  # Issues a DELETE request to the CouchDB server. Returns a parsed response body
138
- # if the +accept+ options is set to 'application/json' (the default), otherwise
138
+ # if the +accept+ option is set to 'application/json' (the default), otherwise
139
139
  # returns the raw RestClient response body.
140
140
  def delete(path, headers = {})
141
141
  defaults = { :accept => "application/json" }
@@ -143,7 +143,7 @@ module Cushion
143
143
  end
144
144
 
145
145
  # Issues a COPY request to the CouchDB server, copying a document from +source+
146
- # to +destination+. Returns a parsed response body if the +accept+ options
146
+ # to +destination+. Returns a parsed response body if the +accept+ option
147
147
  # is set to 'application/json' (the default), otherwise returns the raw
148
148
  # RestClient response body.
149
149
  def copy(source, destination, headers = {})
@@ -152,7 +152,7 @@ module Cushion
152
152
  end
153
153
 
154
154
  # Issues a MOVE request to the CouchDB server, moving a document from +source+
155
- # to +destination+. Returns a parsed response body if the +accept+ options
155
+ # to +destination+. Returns a parsed response body if the +accept+ option
156
156
  # is set to 'application/json' (the default), otherwise returns the raw
157
157
  # RestClient response body.
158
158
  def move(source, destination, headers = {})
@@ -160,7 +160,9 @@ module Cushion
160
160
  parse_response(RestClient.move("#{@uri}/#{source}", defaults.merge(headers)))
161
161
  end
162
162
 
163
- def request(verb, path, params)
163
+ # Issues a generic request to the server +path+ with the method set to +verb+.
164
+ # Accepts +body+ and +headers+ options.
165
+ def request(verb, path, params = {})
164
166
  RestClient::Request.execute(
165
167
  :method => verb,
166
168
  :url => "#{@uri}/#{path}",
@@ -7,7 +7,7 @@ describe "Cushion::Database" do
7
7
  end
8
8
 
9
9
  after do
10
- @db.delete rescue nil
10
+ @db.drop rescue nil
11
11
  end
12
12
 
13
13
  describe "Operations" do
@@ -18,10 +18,10 @@ describe "Cushion::Database" do
18
18
  lambda { Cushion::Database.new( :foo, "mydb" ) }.should.raise ArgumentError
19
19
  end
20
20
 
21
- it "should create and delete a database" do
21
+ it "should create and drop a database" do
22
22
  newdb = Cushion.db('http://127.0.0.1:5984/foo_test')
23
23
  newdb.create["ok"].should.be.true
24
- newdb.delete["ok"].should.be.true
24
+ newdb.drop["ok"].should.be.true
25
25
  end
26
26
 
27
27
  it "should retrieve database info" do
@@ -31,14 +31,12 @@ describe "Cushion::Database" do
31
31
  it "should compact a database" do
32
32
  @db.save_doc("foo" => "bar")
33
33
  @db.compact["ok"].should.be.true
34
- # Finish compaction before moving on
35
- while @db.server.active_tasks != [] do
36
- sleep(0.5)
37
- end
38
34
  end
39
35
 
40
36
  it "should pass requests to external handlers" do
41
- lambda { @db.external(:get, "stats") }.should.not.raise
37
+ # This is kind of lame, but installing an external handler to run a "real"
38
+ # external test seems like overkill.
39
+ lambda { @db.external(:get, "all_docs") }.should.not.raise
42
40
  end
43
41
 
44
42
  end
data/spec/server_spec.rb CHANGED
@@ -41,21 +41,21 @@ describe "Cushion::Server" do
41
41
 
42
42
  describe "Databases" do
43
43
 
44
- it "should create and delete databases" do
44
+ it "should create and drop databases" do
45
45
  @server.create(:server_test)["ok"].should.be.true
46
- @server.delete(:server_test)["ok"].should.be.true
46
+ @server.drop(:server_test)["ok"].should.be.true
47
47
  end
48
48
 
49
49
  it "should retrieve a list of all databases on the server" do
50
50
  @server.create(:server_list_test)
51
51
  @server.all_dbs.should.include "server_list_test"
52
- @server.delete(:server_list_test)
52
+ @server.drop(:server_list_test)
53
53
  end
54
54
 
55
55
  it "should recreate a database" do
56
56
  @server.recreate(:server_recreate_test).should.be.kind_of Cushion::Database
57
57
  @server.all_dbs.should.include "server_recreate_test"
58
- @server.delete(:server_recreate_test)
58
+ @server.drop(:server_recreate_test)
59
59
  end
60
60
 
61
61
  it "should instantiate a Cushion::Database with server[:dbname]" do
@@ -69,7 +69,7 @@ describe "Cushion::Server" do
69
69
  it "should create a database if it does not already exist with db!('dbname')" do
70
70
  @server.db!(:server_autocreate_test).should.be.kind_of Cushion::Database
71
71
  @server.all_dbs.should.include "server_autocreate_test"
72
- @server.delete(:server_autocreate_test)
72
+ @server.drop(:server_autocreate_test)
73
73
  end
74
74
 
75
75
  end
@@ -82,8 +82,8 @@ describe "Cushion::Server" do
82
82
  end
83
83
 
84
84
  after do
85
- @server.delete(:server_replication_test1)
86
- @server.delete(:server_replication_test2)
85
+ @server.drop(:server_replication_test1)
86
+ @server.drop(:server_replication_test2)
87
87
  end
88
88
 
89
89
  it "should replicate databases" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akdubya-cushion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksander Williams