samflores-couchrest 0.2.1 → 0.12.3

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 (66) hide show
  1. data/README.md +10 -34
  2. data/Rakefile +5 -2
  3. data/bin/couchdir +20 -0
  4. data/examples/model/example.rb +13 -19
  5. data/examples/word_count/word_count.rb +24 -3
  6. data/examples/word_count/word_count_query.rb +6 -7
  7. data/lib/couchrest/core/database.rb +49 -126
  8. data/lib/couchrest/core/document.rb +25 -58
  9. data/lib/couchrest/core/model.rb +612 -0
  10. data/lib/couchrest/core/server.rb +10 -47
  11. data/lib/couchrest/core/validations.rb +328 -0
  12. data/lib/couchrest/monkeypatches.rb +0 -95
  13. data/lib/couchrest.rb +10 -57
  14. data/spec/couchrest/core/database_spec.rb +68 -183
  15. data/spec/couchrest/core/design_spec.rb +1 -1
  16. data/spec/couchrest/core/document_spec.rb +104 -285
  17. data/spec/couchrest/core/model_spec.rb +855 -0
  18. data/spec/couchrest/helpers/pager_spec.rb +1 -1
  19. data/spec/spec_helper.rb +7 -13
  20. metadata +17 -83
  21. data/examples/word_count/word_count_views.rb +0 -26
  22. data/lib/couchrest/core/response.rb +0 -16
  23. data/lib/couchrest/mixins/attachments.rb +0 -31
  24. data/lib/couchrest/mixins/callbacks.rb +0 -483
  25. data/lib/couchrest/mixins/design_doc.rb +0 -64
  26. data/lib/couchrest/mixins/document_queries.rb +0 -48
  27. data/lib/couchrest/mixins/extended_attachments.rb +0 -68
  28. data/lib/couchrest/mixins/extended_document_mixins.rb +0 -6
  29. data/lib/couchrest/mixins/properties.rb +0 -125
  30. data/lib/couchrest/mixins/validation.rb +0 -234
  31. data/lib/couchrest/mixins/views.rb +0 -168
  32. data/lib/couchrest/mixins.rb +0 -4
  33. data/lib/couchrest/more/casted_model.rb +0 -28
  34. data/lib/couchrest/more/extended_document.rb +0 -217
  35. data/lib/couchrest/more/property.rb +0 -40
  36. data/lib/couchrest/support/blank.rb +0 -42
  37. data/lib/couchrest/support/class.rb +0 -191
  38. data/lib/couchrest/validation/auto_validate.rb +0 -163
  39. data/lib/couchrest/validation/contextual_validators.rb +0 -78
  40. data/lib/couchrest/validation/validation_errors.rb +0 -118
  41. data/lib/couchrest/validation/validators/absent_field_validator.rb +0 -74
  42. data/lib/couchrest/validation/validators/confirmation_validator.rb +0 -99
  43. data/lib/couchrest/validation/validators/format_validator.rb +0 -117
  44. data/lib/couchrest/validation/validators/formats/email.rb +0 -66
  45. data/lib/couchrest/validation/validators/formats/url.rb +0 -43
  46. data/lib/couchrest/validation/validators/generic_validator.rb +0 -120
  47. data/lib/couchrest/validation/validators/length_validator.rb +0 -134
  48. data/lib/couchrest/validation/validators/method_validator.rb +0 -89
  49. data/lib/couchrest/validation/validators/numeric_validator.rb +0 -104
  50. data/lib/couchrest/validation/validators/required_field_validator.rb +0 -109
  51. data/spec/couchrest/core/server_spec.rb +0 -35
  52. data/spec/couchrest/more/casted_extended_doc_spec.rb +0 -40
  53. data/spec/couchrest/more/casted_model_spec.rb +0 -98
  54. data/spec/couchrest/more/extended_doc_attachment_spec.rb +0 -130
  55. data/spec/couchrest/more/extended_doc_spec.rb +0 -509
  56. data/spec/couchrest/more/extended_doc_view_spec.rb +0 -207
  57. data/spec/couchrest/more/property_spec.rb +0 -130
  58. data/spec/couchrest/support/class_spec.rb +0 -59
  59. data/spec/fixtures/more/article.rb +0 -34
  60. data/spec/fixtures/more/card.rb +0 -20
  61. data/spec/fixtures/more/course.rb +0 -14
  62. data/spec/fixtures/more/event.rb +0 -6
  63. data/spec/fixtures/more/invoice.rb +0 -17
  64. data/spec/fixtures/more/person.rb +0 -8
  65. data/spec/fixtures/more/question.rb +0 -6
  66. data/spec/fixtures/more/service.rb +0 -12
@@ -1,311 +1,130 @@
1
1
  require File.dirname(__FILE__) + '/../../spec_helper'
2
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)
3
+ describe CouchRest::Document, "[]=" do
4
+ before(:each) do
5
+ @doc = CouchRest::Document.new
10
6
  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
7
+ it "should work" do
8
+ @doc["enamel"].should == nil
9
+ @doc["enamel"] = "Strong"
10
+ @doc["enamel"].should == "Strong"
30
11
  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
12
+ it "[]= should convert to string" do
13
+ @doc["enamel"].should == nil
14
+ @doc[:enamel] = "Strong"
15
+ @doc["enamel"].should == "Strong"
51
16
  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
-
66
- it "should freak out when saving without a database" do
67
- lambda{@doc.save}.should raise_error(ArgumentError)
68
- end
69
-
17
+ it "should read as a string" do
18
+ @doc[:enamel] = "Strong"
19
+ @doc[:enamel].should == "Strong"
70
20
  end
21
+ end
71
22
 
72
- # move to database spec
73
- describe "saving using a database" do
74
- before(:all) do
75
- @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
76
- @db = reset_test_db!
77
- @resp = @db.save_doc(@doc)
78
- end
79
- it "should apply the database" do
80
- @doc.database.should == @db
81
- end
82
- it "should get id and rev" do
83
- @doc.id.should == @resp["id"]
84
- @doc.rev.should == @resp["rev"]
85
- end
23
+ describe CouchRest::Document, "new" do
24
+ before(:each) do
25
+ @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
86
26
  end
87
-
88
- describe "bulk saving" do
89
- before :all do
90
- @db = reset_test_db!
91
- end
92
-
93
- it "should use the document bulk save cache" do
94
- doc = CouchRest::Document.new({"_id" => "bulkdoc", "val" => 3})
95
- doc.database = @db
96
- doc.save(true)
97
- lambda { doc.database.get(doc["_id"]) }.should raise_error(RestClient::ResourceNotFound)
98
- doc.database.bulk_save
99
- doc.database.get(doc["_id"])["val"].should == doc["val"]
100
- end
27
+ it "should create itself from a Hash" do
28
+ @doc["key"].should == [1,2,3]
29
+ @doc["more"].should == "values"
101
30
  end
102
-
103
- describe "getting from a database" do
104
- before(:all) do
105
- @db = reset_test_db!
106
- @resp = @db.save_doc({
107
- "key" => "value"
108
- })
109
- @doc = @db.get @resp['id']
110
- end
111
- it "should return a document" do
112
- @doc.should be_an_instance_of(CouchRest::Document)
113
- end
114
- it "should have a database" do
115
- @doc.database.should == @db
116
- end
117
- it "should be saveable and resavable" do
118
- @doc["more"] = "keys"
119
- @doc.save
120
- @db.get(@resp['id'])["more"].should == "keys"
121
- @doc["more"] = "these keys"
122
- @doc.save
123
- @db.get(@resp['id'])["more"].should == "these keys"
124
- end
31
+ it "should not have rev and id" do
32
+ @doc.rev.should be_nil
33
+ @doc.id.should be_nil
125
34
  end
126
-
127
- describe "destroying a document from a db" do
128
- before(:all) do
129
- @db = reset_test_db!
130
- @resp = @db.save_doc({
131
- "key" => "value"
132
- })
133
- @doc = @db.get @resp['id']
134
- end
135
- it "should make it disappear" do
136
- @doc.destroy
137
- lambda{@db.get @resp['id']}.should raise_error
138
- end
139
- it "should error when there's no db" do
140
- @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
141
- lambda{@doc.destroy}.should raise_error(ArgumentError)
142
- end
35
+ it "should freak out when saving without a database" do
36
+ lambda{@doc.save}.should raise_error(ArgumentError)
143
37
  end
38
+ end
144
39
 
145
-
146
- describe "destroying a document from a db using bulk save" do
147
- before(:all) do
148
- @db = reset_test_db!
149
- @resp = @db.save_doc({
150
- "key" => "value"
151
- })
152
- @doc = @db.get @resp['id']
153
- end
154
- it "should defer actual deletion" do
155
- @doc.destroy(true)
156
- @doc['_id'].should == nil
157
- @doc['_rev'].should == nil
158
- lambda{@db.get @resp['id']}.should_not raise_error
159
- @db.bulk_save
160
- lambda{@db.get @resp['id']}.should raise_error
161
- end
40
+ # move to database spec
41
+ describe CouchRest::Document, "saving using a database" do
42
+ before(:all) do
43
+ @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
44
+ @db = reset_test_db!
45
+ @resp = @db.save(@doc)
46
+ end
47
+ it "should apply the database" do
48
+ @doc.database.should == @db
162
49
  end
50
+ it "should get id and rev" do
51
+ @doc.id.should == @resp["id"]
52
+ @doc.rev.should == @resp["rev"]
53
+ end
54
+ end
163
55
 
164
- describe "copying a document" do
165
- before :each do
166
- @db = reset_test_db!
167
- @resp = @db.save_doc({'key' => 'value'})
168
- @docid = 'new-location'
169
- @doc = @db.get(@resp['id'])
170
- end
171
- describe "to a new location" do
172
- it "should work" do
173
- @doc.copy @docid
174
- newdoc = @db.get(@docid)
175
- newdoc['key'].should == 'value'
176
- end
177
- it "should fail without a database" do
178
- lambda{CouchRest::Document.new({"not"=>"a real doc"}).copy}.should raise_error(ArgumentError)
179
- end
180
- end
181
- describe "to an existing location" do
182
- before :each do
183
- @db.save_doc({'_id' => @docid, 'will-exist' => 'here'})
184
- end
185
- it "should fail without a rev" do
186
- lambda{@doc.copy @docid}.should raise_error(RestClient::RequestFailed)
187
- end
188
- it "should succeed with a rev" do
189
- @to_be_overwritten = @db.get(@docid)
190
- @doc.copy "#{@docid}?rev=#{@to_be_overwritten['_rev']}"
191
- newdoc = @db.get(@docid)
192
- newdoc['key'].should == 'value'
193
- end
194
- it "should succeed given the doc to overwrite" do
195
- @to_be_overwritten = @db.get(@docid)
196
- @doc.copy @to_be_overwritten
197
- newdoc = @db.get(@docid)
198
- newdoc['key'].should == 'value'
199
- end
200
- end
56
+ describe CouchRest::Document, "bulk saving" do
57
+ before :all do
58
+ @db = reset_test_db!
201
59
  end
202
60
 
203
- describe "MOVE existing document" do
204
- before :each do
205
- @db = reset_test_db!
206
- @resp = @db.save_doc({'key' => 'value'})
207
- @docid = 'new-location'
208
- @doc = @db.get(@resp['id'])
209
- end
210
- describe "to a new location" do
211
- it "should work" do
212
- @doc.move @docid
213
- newdoc = @db.get(@docid)
214
- newdoc['key'].should == 'value'
215
- lambda {@db.get(@resp['id'])}.should raise_error(RestClient::ResourceNotFound)
216
- end
217
- it "should fail without a database" do
218
- lambda{CouchRest::Document.new({"not"=>"a real doc"}).move}.should raise_error(ArgumentError)
219
- lambda{CouchRest::Document.new({"_id"=>"not a real doc"}).move}.should raise_error(ArgumentError)
220
- end
221
- end
222
- describe "to an existing location" do
223
- before :each do
224
- @db.save_doc({'_id' => @docid, 'will-exist' => 'here'})
225
- end
226
- it "should fail without a rev" do
227
- lambda{@doc.move @docid}.should raise_error(RestClient::RequestFailed)
228
- lambda{@db.get(@resp['id'])}.should_not raise_error
229
- end
230
- it "should succeed with a rev" do
231
- @to_be_overwritten = @db.get(@docid)
232
- @doc.move "#{@docid}?rev=#{@to_be_overwritten['_rev']}"
233
- newdoc = @db.get(@docid)
234
- newdoc['key'].should == 'value'
235
- lambda {@db.get(@resp['id'])}.should raise_error(RestClient::ResourceNotFound)
236
- end
237
- it "should succeed given the doc to overwrite" do
238
- @to_be_overwritten = @db.get(@docid)
239
- @doc.move @to_be_overwritten
240
- newdoc = @db.get(@docid)
241
- newdoc['key'].should == 'value'
242
- lambda {@db.get(@resp['id'])}.should raise_error(RestClient::ResourceNotFound)
243
- end
244
- end
61
+ it "should use the document bulk save cache" do
62
+ doc = CouchRest::Document.new({"_id" => "bulkdoc", "val" => 3})
63
+ doc.database = @db
64
+ doc.save(true)
65
+ lambda { doc.database.get(doc["_id"]) }.should raise_error(RestClient::ResourceNotFound)
66
+ doc.database.bulk_save
67
+ doc.database.get(doc["_id"])["val"].should == doc["val"]
245
68
  end
246
69
  end
247
70
 
248
- describe "dealing with attachments" do
249
- before do
71
+ describe "getting from a database" do
72
+ before(:all) do
250
73
  @db = reset_test_db!
251
- @attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
252
- response = @db.save_doc({'key' => 'value'})
253
- @doc = @db.get(response['id'])
74
+ @resp = @db.save({
75
+ "key" => "value"
76
+ })
77
+ @doc = @db.get @resp['id']
78
+ end
79
+ it "should return a document" do
80
+ @doc.should be_an_instance_of(CouchRest::Document)
81
+ end
82
+ it "should have a database" do
83
+ @doc.database.should == @db
254
84
  end
255
-
256
- def append_attachment(name='test.html', attach=@attach)
257
- @doc['_attachments'] ||= {}
258
- @doc['_attachments'][name] = {
259
- 'type' => 'text/html',
260
- 'data' => attach
261
- }
85
+ it "should be saveable and resavable" do
86
+ @doc["more"] = "keys"
262
87
  @doc.save
263
- @rev = @doc['_rev']
88
+ @db.get(@resp['id'])["more"].should == "keys"
89
+ @doc["more"] = "these keys"
90
+ @doc.save
91
+ @db.get(@resp['id'])["more"].should == "these keys"
92
+ end
93
+ end
94
+
95
+ describe "destroying a document from a db" do
96
+ before(:all) do
97
+ @db = reset_test_db!
98
+ @resp = @db.save({
99
+ "key" => "value"
100
+ })
101
+ @doc = @db.get @resp['id']
264
102
  end
265
-
266
- describe "PUTing an attachment directly to the doc" do
267
- before do
268
- @doc.put_attachment('test.html', @attach)
269
- end
270
-
271
- it "is there" do
272
- @db.fetch_attachment(@doc, 'test.html').should == @attach
273
- end
274
-
275
- it "updates the revision" do
276
- @doc['_rev'].should_not == @rev
277
- end
278
-
279
- it "updates attachments" do
280
- @attach2 = "<html><head><title>My Doc</title></head><body><p>Is Different.</p></body></html>"
281
- @doc.put_attachment('test.html', @attach2)
282
- @db.fetch_attachment(@doc, 'test.html').should == @attach2
283
- end
103
+ it "should make it disappear" do
104
+ @doc.destroy
105
+ lambda{@db.get @resp['id']}.should raise_error
284
106
  end
285
-
286
- describe "fetching an attachment from a doc directly" do
287
- before do
288
- append_attachment
289
- end
290
-
291
- it "pulls the attachment" do
292
- @doc.fetch_attachment('test.html').should == @attach
293
- end
107
+ it "should error when there's no db" do
108
+ @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
109
+ lambda{@doc.destroy}.should raise_error(ArgumentError)
294
110
  end
295
-
296
- describe "deleting an attachment from a doc directly" do
297
- before do
298
- append_attachment
299
- @doc.delete_attachment('test.html')
300
- end
301
-
302
- it "removes it" do
303
- lambda { @db.fetch_attachment(@doc, 'test.html').should }.should raise_error(RestClient::ResourceNotFound)
304
- end
305
-
306
- it "updates the revision" do
307
- @doc['_rev'].should_not == @rev
308
- end
111
+ end
112
+
113
+
114
+ describe "destroying a document from a db using bulk save" do
115
+ before(:all) do
116
+ @db = reset_test_db!
117
+ @resp = @db.save({
118
+ "key" => "value"
119
+ })
120
+ @doc = @db.get @resp['id']
121
+ end
122
+ it "should defer actual deletion" do
123
+ @doc.destroy(true)
124
+ @doc['_id'].should == nil
125
+ @doc['_rev'].should == nil
126
+ lambda{@db.get @resp['id']}.should_not raise_error
127
+ @db.bulk_save
128
+ lambda{@db.get @resp['id']}.should raise_error
309
129
  end
310
-
311
- end
130
+ end