namelessjon-couchrest 1.0.0

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.
Files changed (53) hide show
  1. data/LICENSE +176 -0
  2. data/README.md +46 -0
  3. data/Rakefile +69 -0
  4. data/THANKS.md +21 -0
  5. data/couchrest.gemspec +111 -0
  6. data/examples/word_count/markov +38 -0
  7. data/examples/word_count/views/books/chunked-map.js +3 -0
  8. data/examples/word_count/views/books/united-map.js +1 -0
  9. data/examples/word_count/views/markov/chain-map.js +6 -0
  10. data/examples/word_count/views/markov/chain-reduce.js +7 -0
  11. data/examples/word_count/views/word_count/count-map.js +6 -0
  12. data/examples/word_count/views/word_count/count-reduce.js +3 -0
  13. data/examples/word_count/word_count.rb +46 -0
  14. data/examples/word_count/word_count_query.rb +40 -0
  15. data/examples/word_count/word_count_views.rb +26 -0
  16. data/history.txt +145 -0
  17. data/lib/couchrest/commands/generate.rb +71 -0
  18. data/lib/couchrest/commands/push.rb +103 -0
  19. data/lib/couchrest/database.rb +373 -0
  20. data/lib/couchrest/design.rb +80 -0
  21. data/lib/couchrest/document.rb +89 -0
  22. data/lib/couchrest/helper/attachments.rb +29 -0
  23. data/lib/couchrest/helper/pager.rb +103 -0
  24. data/lib/couchrest/helper/streamer.rb +51 -0
  25. data/lib/couchrest/helper/upgrade.rb +52 -0
  26. data/lib/couchrest/json_response.rb +14 -0
  27. data/lib/couchrest/middlewares/logger.rb +263 -0
  28. data/lib/couchrest/monkeypatches.rb +42 -0
  29. data/lib/couchrest/response.rb +35 -0
  30. data/lib/couchrest/rest_api.rb +62 -0
  31. data/lib/couchrest/server.rb +90 -0
  32. data/lib/couchrest/support/inheritable_attributes.rb +107 -0
  33. data/lib/couchrest.rb +127 -0
  34. data/spec/couchrest/couchrest_spec.rb +202 -0
  35. data/spec/couchrest/database_spec.rb +870 -0
  36. data/spec/couchrest/design_spec.rb +158 -0
  37. data/spec/couchrest/document_spec.rb +279 -0
  38. data/spec/couchrest/helpers/pager_spec.rb +123 -0
  39. data/spec/couchrest/helpers/streamer_spec.rb +52 -0
  40. data/spec/couchrest/server_spec.rb +35 -0
  41. data/spec/fixtures/attachments/README +3 -0
  42. data/spec/fixtures/attachments/couchdb.png +0 -0
  43. data/spec/fixtures/attachments/test.html +11 -0
  44. data/spec/fixtures/views/lib.js +3 -0
  45. data/spec/fixtures/views/test_view/lib.js +3 -0
  46. data/spec/fixtures/views/test_view/only-map.js +4 -0
  47. data/spec/fixtures/views/test_view/test-map.js +3 -0
  48. data/spec/fixtures/views/test_view/test-reduce.js +3 -0
  49. data/spec/spec.opts +5 -0
  50. data/spec/spec_helper.rb +44 -0
  51. data/utils/remap.rb +27 -0
  52. data/utils/subset.rb +30 -0
  53. metadata +179 -0
@@ -0,0 +1,158 @@
1
+ require File.expand_path("../../spec_helper", __FILE__)
2
+
3
+ describe CouchRest::Design do
4
+
5
+ describe "defining a view" do
6
+ it "should add a view to the design doc" do
7
+ @des = CouchRest::Design.new
8
+ method = @des.view_by :name
9
+ method.should == "by_name"
10
+ @des["views"]["by_name"].should_not be_nil
11
+ end
12
+ end
13
+
14
+ describe "with an unsaved view" do
15
+ before(:each) do
16
+ @des = CouchRest::Design.new
17
+ @des.view_by :name
18
+ end
19
+ it "should accept a name" do
20
+ @des.name = "mytest"
21
+ @des.name.should == "mytest"
22
+ end
23
+ it "should not save on view definition" do
24
+ @des.rev.should be_nil
25
+ end
26
+ it "should freak out on view access" do
27
+ lambda{@des.view :by_name}.should raise_error
28
+ end
29
+ end
30
+
31
+ describe "saving" do
32
+ before(:each) do
33
+ @des = CouchRest::Design.new
34
+ @des.view_by :name
35
+ @des.database = reset_test_db!
36
+ end
37
+ it "should fail without a name" do
38
+ lambda{@des.save}.should raise_error(ArgumentError)
39
+ end
40
+ it "should work with a name" do
41
+ @des.name = "myview"
42
+ @des.save
43
+ end
44
+ end
45
+
46
+ describe "when it's saved" do
47
+ before(:each) do
48
+ @db = reset_test_db!
49
+ @db.bulk_save([{"name" => "x"},{"name" => "y"}])
50
+ @des = CouchRest::Design.new
51
+ @des.database = @db
52
+ @des.view_by :name
53
+ end
54
+ it "should by queryable when it's saved" do
55
+ @des.name = "mydesign"
56
+ @des.save
57
+ res = @des.view :by_name
58
+ res["rows"][0]["key"].should == "x"
59
+ end
60
+ it "should be queryable on specified database" do
61
+ @des.name = "mydesign"
62
+ @des.save
63
+ @des.database = nil
64
+ res = @des.view_on @db, :by_name
65
+ res["rows"][0]["key"].should == "x"
66
+ end
67
+ end
68
+
69
+ describe "from a saved document" do
70
+ before(:each) do
71
+ @db = reset_test_db!
72
+ @db.save_doc({
73
+ "_id" => "_design/test",
74
+ "views" => {
75
+ "by_name" => {
76
+ "map" => "function(doc){if (doc.name) emit(doc.name, null)}"
77
+ }
78
+ }
79
+ })
80
+ @db.bulk_save([{"name" => "a"},{"name" => "b"}])
81
+ @des = @db.get "_design/test"
82
+ end
83
+ it "should be a Design" do
84
+ @des.should be_an_instance_of(CouchRest::Design)
85
+ end
86
+ it "should have a modifiable name" do
87
+ @des.name.should == "test"
88
+ @des.name = "supertest"
89
+ @des.id.should == "_design/supertest"
90
+ end
91
+ it "should by queryable" do
92
+ res = @des.view :by_name
93
+ res["rows"][0]["key"].should == "a"
94
+ end
95
+ end
96
+
97
+ describe "a view with default options" do
98
+ before(:all) do
99
+ @db = reset_test_db!
100
+ @des = CouchRest::Design.new
101
+ @des.name = "test"
102
+ @des.view_by :name, :descending => true
103
+ @des.database = @db
104
+ @des.save
105
+ @db.bulk_save([{"name" => "a"},{"name" => "z"}])
106
+ end
107
+ it "should save them" do
108
+ @d2 = @db.get(@des.id)
109
+ @d2["views"]["by_name"]["couchrest-defaults"].should == {"descending"=>true}
110
+ end
111
+ it "should use them" do
112
+ res = @des.view :by_name
113
+ res["rows"].first["key"].should == "z"
114
+ end
115
+ it "should override them" do
116
+ res = @des.view :by_name, :descending => false
117
+ res["rows"].first["key"].should == "a"
118
+ end
119
+ end
120
+
121
+ describe "a view with multiple keys" do
122
+ before(:all) do
123
+ @db = reset_test_db!
124
+ @des = CouchRest::Design.new
125
+ @des.name = "test"
126
+ @des.view_by :name, :age
127
+ @des.database = @db
128
+ @des.save
129
+ @db.bulk_save([{"name" => "a", "age" => 2},
130
+ {"name" => "a", "age" => 4},{"name" => "z", "age" => 9}])
131
+ end
132
+ it "should work" do
133
+ res = @des.view :by_name_and_age
134
+ res["rows"].first["key"].should == ["a",2]
135
+ end
136
+ end
137
+
138
+ describe "a view with nil and 0 values" do
139
+ before(:all) do
140
+ @db = reset_test_db!
141
+ @des = CouchRest::Design.new
142
+ @des.name = "test"
143
+ @des.view_by :code
144
+ @des.database = @db
145
+ @des.save
146
+ @db.bulk_save([{"code" => "a", "age" => 2},
147
+ {"code" => nil, "age" => 4},{"code" => 0, "age" => 9}])
148
+ end
149
+ it "should work" do
150
+ res = @des.view :by_code
151
+ res["rows"][0]["key"].should == 0
152
+ res["rows"][1]["key"].should == "a"
153
+ res["rows"][2].should be_nil
154
+ end
155
+ end
156
+
157
+
158
+ end
@@ -0,0 +1,279 @@
1
+ require File.expand_path("../../spec_helper", __FILE__)
2
+
3
+ class Video < CouchRest::Document; end
4
+
5
+ describe CouchRest::Document do
6
+
7
+ before(:all) do
8
+ @couch = CouchRest.new
9
+ @db = @couch.database!(TESTDB)
10
+ end
11
+
12
+ describe "[]=" do
13
+ before(:each) do
14
+ @doc = CouchRest::Document.new
15
+ end
16
+ it "should work" do
17
+ @doc["enamel"].should == nil
18
+ @doc["enamel"] = "Strong"
19
+ @doc["enamel"].should == "Strong"
20
+ end
21
+ it "[]= should convert to string" do
22
+ @doc["enamel"].should == nil
23
+ @doc[:enamel] = "Strong"
24
+ @doc["enamel"].should == "Strong"
25
+ end
26
+ it "should read as a string" do
27
+ @doc[:enamel] = "Strong"
28
+ @doc[:enamel].should == "Strong"
29
+ end
30
+ end
31
+
32
+ describe "default database" do
33
+ before(:each) do
34
+ Video.use_database nil
35
+ end
36
+ it "should be set using use_database on the model" do
37
+ Video.new.database.should be_nil
38
+ Video.use_database @db
39
+ Video.new.database.should == @db
40
+ Video.use_database nil
41
+ end
42
+
43
+ it "should be overwritten by instance" do
44
+ db = @couch.database('test')
45
+ article = Video.new
46
+ article.database.should be_nil
47
+ article.database = db
48
+ article.database.should_not be_nil
49
+ article.database.should == db
50
+ end
51
+ end
52
+
53
+ describe "new" do
54
+ before(:each) do
55
+ @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
56
+ end
57
+ it "should create itself from a Hash" do
58
+ @doc["key"].should == [1,2,3]
59
+ @doc["more"].should == "values"
60
+ end
61
+ it "should not have rev and id" do
62
+ @doc.rev.should be_nil
63
+ @doc.id.should be_nil
64
+ end
65
+ it "should be possible to set id" do
66
+ @doc.id = 1
67
+ @doc.id.should eql(1)
68
+ end
69
+
70
+ it "should freak out when saving without a database" do
71
+ lambda{@doc.save}.should raise_error(ArgumentError)
72
+ end
73
+
74
+ end
75
+
76
+ # move to database spec
77
+ describe "saving using a database" do
78
+ before(:all) do
79
+ @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
80
+ @db = reset_test_db!
81
+ @resp = @db.save_doc(@doc)
82
+ end
83
+ it "should apply the database" do
84
+ @doc.database.should == @db
85
+ end
86
+ it "should get id and rev" do
87
+ @doc.id.should == @resp["id"]
88
+ @doc.rev.should == @resp["rev"]
89
+ end
90
+ it "should generate a correct URI" do
91
+ @doc.uri.should == "#{@db.root}/#{@doc.id}"
92
+ URI.parse(@doc.uri).to_s.should == @doc.uri
93
+ end
94
+ it "should generate a correct URI with revision" do
95
+ @doc.uri(true).should == "#{@db.root}/#{@doc.id}?rev=#{@doc.rev}"
96
+ URI.parse(@doc.uri(true)).to_s.should == @doc.uri(true)
97
+ end
98
+ end
99
+
100
+ describe "bulk saving" do
101
+ before :all do
102
+ @db = reset_test_db!
103
+ end
104
+
105
+ it "should use the document bulk save cache" do
106
+ doc = CouchRest::Document.new({"_id" => "bulkdoc", "val" => 3})
107
+ doc.database = @db
108
+ doc.save(true)
109
+ lambda { doc.database.get(doc["_id"]) }.should raise_error(RestClient::ResourceNotFound)
110
+ doc.database.bulk_save
111
+ doc.database.get(doc["_id"])["val"].should == doc["val"]
112
+ end
113
+ end
114
+
115
+ describe "getting from a database" do
116
+ before(:all) do
117
+ @db = reset_test_db!
118
+ @resp = @db.save_doc({
119
+ "key" => "value"
120
+ })
121
+ @doc = @db.get @resp['id']
122
+ end
123
+ it "should return a document" do
124
+ @doc.should be_an_instance_of(CouchRest::Document)
125
+ end
126
+ it "should have a database" do
127
+ @doc.database.should == @db
128
+ end
129
+ it "should be saveable and resavable" do
130
+ @doc["more"] = "keys"
131
+ @doc.save
132
+ @db.get(@resp['id'])["more"].should == "keys"
133
+ @doc["more"] = "these keys"
134
+ @doc.save
135
+ @db.get(@resp['id'])["more"].should == "these keys"
136
+ end
137
+ end
138
+
139
+ describe "destroying a document from a db" do
140
+ before(:all) do
141
+ @db = reset_test_db!
142
+ @resp = @db.save_doc({
143
+ "key" => "value"
144
+ })
145
+ @doc = @db.get @resp['id']
146
+ end
147
+ it "should make it disappear" do
148
+ @doc.destroy
149
+ lambda{@db.get @resp['id']}.should raise_error
150
+ end
151
+ it "should error when there's no db" do
152
+ @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
153
+ lambda{@doc.destroy}.should raise_error(ArgumentError)
154
+ end
155
+ end
156
+
157
+
158
+ describe "destroying a document from a db using bulk save" do
159
+ before(:all) do
160
+ @db = reset_test_db!
161
+ @resp = @db.save_doc({
162
+ "key" => "value"
163
+ })
164
+ @doc = @db.get @resp['id']
165
+ end
166
+ it "should defer actual deletion" do
167
+ @doc.destroy(true)
168
+ @doc['_id'].should == nil
169
+ @doc['_rev'].should == nil
170
+ lambda{@db.get @resp['id']}.should_not raise_error
171
+ @db.bulk_save
172
+ lambda{@db.get @resp['id']}.should raise_error
173
+ end
174
+ end
175
+
176
+ describe "copying a document" do
177
+ before :each do
178
+ @db = reset_test_db!
179
+ @resp = @db.save_doc({'key' => 'value'})
180
+ @docid = 'new-location'
181
+ @doc = @db.get(@resp['id'])
182
+ end
183
+ describe "to a new location" do
184
+ it "should work" do
185
+ @doc.copy @docid
186
+ newdoc = @db.get(@docid)
187
+ newdoc['key'].should == 'value'
188
+ end
189
+ it "should fail without a database" do
190
+ lambda{CouchRest::Document.new({"not"=>"a real doc"}).copy}.should raise_error(ArgumentError)
191
+ end
192
+ end
193
+ describe "to an existing location" do
194
+ before :each do
195
+ @db.save_doc({'_id' => @docid, 'will-exist' => 'here'})
196
+ end
197
+ it "should fail without a rev" do
198
+ lambda{@doc.copy @docid}.should raise_error(RestClient::RequestFailed)
199
+ end
200
+ it "should succeed with a rev" do
201
+ @to_be_overwritten = @db.get(@docid)
202
+ @doc.copy "#{@docid}?rev=#{@to_be_overwritten['_rev']}"
203
+ newdoc = @db.get(@docid)
204
+ newdoc['key'].should == 'value'
205
+ end
206
+ it "should succeed given the doc to overwrite" do
207
+ @to_be_overwritten = @db.get(@docid)
208
+ @doc.copy @to_be_overwritten
209
+ newdoc = @db.get(@docid)
210
+ newdoc['key'].should == 'value'
211
+ end
212
+ end
213
+ end
214
+ end
215
+
216
+ describe "dealing with attachments" do
217
+ before do
218
+ @db = reset_test_db!
219
+ @attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
220
+ response = @db.save_doc({'key' => 'value'})
221
+ @doc = @db.get(response['id'])
222
+ end
223
+
224
+ def append_attachment(name='test.html', attach=@attach)
225
+ @doc['_attachments'] ||= {}
226
+ @doc['_attachments'][name] = {
227
+ 'type' => 'text/html',
228
+ 'data' => attach
229
+ }
230
+ @doc.save
231
+ @rev = @doc['_rev']
232
+ end
233
+
234
+ describe "PUTing an attachment directly to the doc" do
235
+ before do
236
+ @doc.put_attachment('test.html', @attach)
237
+ end
238
+
239
+ it "is there" do
240
+ @db.fetch_attachment(@doc, 'test.html').should == @attach
241
+ end
242
+
243
+ it "updates the revision" do
244
+ @doc['_rev'].should_not == @rev
245
+ end
246
+
247
+ it "updates attachments" do
248
+ @attach2 = "<html><head><title>My Doc</title></head><body><p>Is Different.</p></body></html>"
249
+ @doc.put_attachment('test.html', @attach2)
250
+ @db.fetch_attachment(@doc, 'test.html').should == @attach2
251
+ end
252
+ end
253
+
254
+ describe "fetching an attachment from a doc directly" do
255
+ before do
256
+ append_attachment
257
+ end
258
+
259
+ it "pulls the attachment" do
260
+ @doc.fetch_attachment('test.html').should == @attach
261
+ end
262
+ end
263
+
264
+ describe "deleting an attachment from a doc directly" do
265
+ before do
266
+ append_attachment
267
+ @doc.delete_attachment('test.html')
268
+ end
269
+
270
+ it "removes it" do
271
+ lambda { @db.fetch_attachment(@doc, 'test.html').should }.should raise_error(RestClient::ResourceNotFound)
272
+ end
273
+
274
+ it "updates the revision" do
275
+ @doc['_rev'].should_not == @rev
276
+ end
277
+ end
278
+
279
+ end
@@ -0,0 +1,123 @@
1
+ require File.expand_path("../../../spec_helper", __FILE__)
2
+ require 'couchrest/helper/pager'
3
+
4
+ describe CouchRest::Pager do
5
+ before(:all) do
6
+ @cr = CouchRest.new(COUCHHOST)
7
+ @db = @cr.database(TESTDB)
8
+ @db.delete! rescue nil
9
+ @db = @cr.create_db(TESTDB) rescue nil
10
+ @pager = CouchRest::Pager.new(@db)
11
+ end
12
+
13
+ after(:all) do
14
+ begin
15
+ @db.delete!
16
+ rescue RestClient::Request::RequestFailed
17
+ end
18
+ end
19
+
20
+ it "should store the db" do
21
+ @pager.db.should == @db
22
+ end
23
+
24
+ describe "paging all docs" do
25
+ before(:all) do
26
+ @docs = []
27
+ 100.times do |i|
28
+ @docs << ({:number => (i % 10)})
29
+ end
30
+ @db.bulk_save(@docs)
31
+ end
32
+ it "should yield total_docs / limit times" do
33
+ n = 0
34
+ @pager.all_docs(10) do |doc|
35
+ n += 1
36
+ end
37
+ n.should == 10
38
+ end
39
+ it "should yield each docrow group without duplicate docs" do
40
+ docids = {}
41
+ @pager.all_docs(10) do |docrows|
42
+ docrows.each do |row|
43
+ docids[row['id']].should be_nil
44
+ docids[row['id']] = true
45
+ end
46
+ end
47
+ docids.keys.length.should == 100
48
+ end
49
+ it "should yield each docrow group" do
50
+ @pager.all_docs(10) do |docrows|
51
+ doc = @db.get(docrows[0]['id'])
52
+ doc['number'].class.should == Fixnum
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "Pager with a view and docs" do
58
+ before(:all) do
59
+ @docs = []
60
+ 100.times do |i|
61
+ @docs << ({:number => (i % 10)})
62
+ end
63
+ @db.bulk_save(@docs)
64
+ @db.save_doc({
65
+ '_id' => '_design/magic',
66
+ 'views' => {
67
+ 'number' => {
68
+ 'map' => 'function(doc){emit(doc.number,null)}'
69
+ }
70
+ }
71
+ })
72
+ end
73
+
74
+ it "should have docs" do
75
+ @docs.length.should == 100
76
+ @db.documents['rows'].length.should == 101
77
+ end
78
+
79
+ it "should have a view" do
80
+ @db.view('magic/number', :limit => 10)['rows'][0]['key'].should == 0
81
+ end
82
+
83
+ it "should yield once per key" do
84
+ results = {}
85
+ @pager.key_reduce('magic/number', 20) do |k,vs|
86
+ results[k] = vs.length
87
+ end
88
+ results[0].should == 10
89
+ results[3].should == 10
90
+ end
91
+
92
+ it "with a small step size should yield once per key" do
93
+ results = {}
94
+ @pager.key_reduce('magic/number', 7) do |k,vs|
95
+ results[k] = vs.length
96
+ end
97
+ results[0].should == 10
98
+ results[3].should == 10
99
+ results[9].should == 10
100
+ end
101
+ it "with a large step size should yield once per key" do
102
+ results = {}
103
+ @pager.key_reduce('magic/number', 1000) do |k,vs|
104
+ results[k] = vs.length
105
+ end
106
+ results[0].should == 10
107
+ results[3].should == 10
108
+ results[9].should == 10
109
+ end
110
+ it "with a begin and end should only yield in the range (and leave out the lastkey)" do
111
+ results = {}
112
+ @pager.key_reduce('magic/number', 1000, 4, 7) do |k,vs|
113
+ results[k] = vs.length
114
+ end
115
+ results[0].should be_nil
116
+ results[4].should == 10
117
+ results[6].should == 10
118
+ results[7].should be_nil
119
+ results[8].should be_nil
120
+ results[9].should be_nil
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path("../../../spec_helper", __FILE__)
2
+
3
+ describe CouchRest::Streamer do
4
+ before(:all) do
5
+ @cr = CouchRest.new(COUCHHOST)
6
+ @db = @cr.database(TESTDB)
7
+ @db.delete! rescue nil
8
+ @db = @cr.create_db(TESTDB) rescue nil
9
+ @streamer = CouchRest::Streamer.new(@db)
10
+ @docs = (1..1000).collect{|i| {:integer => i, :string => i.to_s}}
11
+ @db.bulk_save(@docs)
12
+ @db.save_doc({
13
+ "_id" => "_design/first",
14
+ :views => {
15
+ :test => {
16
+ :map => "function(doc){for(var w in doc){ if(!w.match(/^_/))emit(w,doc[w])}}"
17
+ }
18
+ }
19
+ })
20
+ end
21
+
22
+ it "should yield each row in a view" do
23
+ count = 0
24
+ sum = 0
25
+ @streamer.view("_all_docs") do |row|
26
+ count += 1
27
+ end
28
+ count.should == 1001
29
+ end
30
+
31
+ it "should accept several params" do
32
+ count = 0
33
+ @streamer.view("_design/first/_view/test", :include_docs => true, :limit => 5) do |row|
34
+ count += 1
35
+ end
36
+ count.should == 5
37
+ end
38
+
39
+ it "should accept both view formats" do
40
+ count = 0
41
+ @streamer.view("_design/first/_view/test") do |row|
42
+ count += 1
43
+ end
44
+ count.should == 2000
45
+ count = 0
46
+ @streamer.view("first/test") do |row|
47
+ count += 1
48
+ end
49
+ count.should == 2000
50
+ end
51
+
52
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path("../../spec_helper", __FILE__)
2
+
3
+ describe CouchRest::Server do
4
+
5
+ describe "available databases" do
6
+ before(:each) do
7
+ @couch = CouchRest::Server.new COUCHHOST
8
+ end
9
+
10
+ after(:each) do
11
+ @couch.available_databases.each do |ref, db|
12
+ db.delete!
13
+ end
14
+ end
15
+
16
+ it "should let you add more databases" do
17
+ @couch.available_databases.should be_empty
18
+ @couch.define_available_database(:default, "cr-server-test-db")
19
+ @couch.available_databases.keys.should include(:default)
20
+ end
21
+
22
+ it "should verify that a database is available" do
23
+ @couch.define_available_database(:default, "cr-server-test-db")
24
+ @couch.available_database?(:default).should be_true
25
+ @couch.available_database?("cr-server-test-db").should be_true
26
+ @couch.available_database?(:matt).should be_false
27
+ end
28
+
29
+ it "should let you set a default database" do
30
+ @couch.default_database = 'cr-server-test-default-db'
31
+ @couch.available_database?(:default).should be_true
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,3 @@
1
+ This is an example README file.
2
+
3
+ More of the README, whee.
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Test</title>
5
+ </head>
6
+ <body>
7
+ <p>
8
+ Test
9
+ </p>
10
+ </body>
11
+ </html>
@@ -0,0 +1,3 @@
1
+ function globalLib() {
2
+ return "fixture";
3
+ };
@@ -0,0 +1,3 @@
1
+ function justThisView() {
2
+ return "fixture";
3
+ };
@@ -0,0 +1,4 @@
1
+ function(doc) {
2
+ //include-lib
3
+ emit(null, null);
4
+ };
@@ -0,0 +1,3 @@
1
+ function(doc) {
2
+ emit(null, null);
3
+ };
@@ -0,0 +1,3 @@
1
+ function(ks,vs,co) {
2
+ return vs.length;
3
+ };
data/spec/spec.opts ADDED
@@ -0,0 +1,5 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime