couchrest_model 1.1.0.beta2 → 1.1.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.gitignore +2 -1
  2. data/README.md +50 -3
  3. data/VERSION +1 -1
  4. data/benchmarks/dirty.rb +118 -0
  5. data/couchrest_model.gemspec +1 -0
  6. data/history.txt +12 -0
  7. data/lib/couchrest/model/base.rb +15 -23
  8. data/lib/couchrest/model/casted_array.rb +26 -1
  9. data/lib/couchrest/model/casted_by.rb +23 -0
  10. data/lib/couchrest/model/casted_hash.rb +76 -0
  11. data/lib/couchrest/model/casted_model.rb +9 -6
  12. data/lib/couchrest/model/collection.rb +10 -1
  13. data/lib/couchrest/model/configuration.rb +4 -4
  14. data/lib/couchrest/model/design_doc.rb +65 -71
  15. data/lib/couchrest/model/designs/view.rb +26 -19
  16. data/lib/couchrest/model/designs.rb +0 -2
  17. data/lib/couchrest/model/dirty.rb +49 -0
  18. data/lib/couchrest/model/extended_attachments.rb +7 -1
  19. data/lib/couchrest/model/persistence.rb +15 -4
  20. data/lib/couchrest/model/properties.rb +50 -9
  21. data/lib/couchrest/model/property.rb +6 -2
  22. data/lib/couchrest/model/proxyable.rb +13 -19
  23. data/lib/couchrest/model/support/couchrest_design.rb +33 -0
  24. data/lib/couchrest/model/views.rb +4 -18
  25. data/lib/couchrest_model.rb +8 -3
  26. data/spec/couchrest/base_spec.rb +1 -28
  27. data/spec/couchrest/casted_model_spec.rb +1 -1
  28. data/spec/couchrest/collection_spec.rb +0 -1
  29. data/spec/couchrest/design_doc_spec.rb +211 -0
  30. data/spec/couchrest/designs/view_spec.rb +41 -17
  31. data/spec/couchrest/designs_spec.rb +0 -5
  32. data/spec/couchrest/dirty_spec.rb +355 -0
  33. data/spec/couchrest/property_spec.rb +5 -2
  34. data/spec/couchrest/proxyable_spec.rb +0 -11
  35. data/spec/couchrest/subclass_spec.rb +6 -16
  36. data/spec/couchrest/view_spec.rb +6 -50
  37. data/spec/fixtures/base.rb +1 -1
  38. data/spec/fixtures/more/card.rb +2 -2
  39. data/spec/spec_helper.rb +2 -0
  40. metadata +9 -4
  41. data/Gemfile.lock +0 -76
  42. data/lib/couchrest/model/support/couchrest.rb +0 -19
@@ -0,0 +1,355 @@
1
+ require File.expand_path("../../spec_helper", __FILE__)
2
+
3
+ require File.join(FIXTURE_PATH, 'more', 'cat')
4
+ require File.join(FIXTURE_PATH, 'more', 'article')
5
+ require File.join(FIXTURE_PATH, 'more', 'course')
6
+ require File.join(FIXTURE_PATH, 'more', 'card')
7
+ require File.join(FIXTURE_PATH, 'base')
8
+
9
+ class WithCastedModelMixin < Hash
10
+ include CouchRest::Model::CastedModel
11
+ property :name
12
+ property :details, Object, :default => {}
13
+ property :casted_attribute, WithCastedModelMixin
14
+ end
15
+
16
+ class DummyModel < CouchRest::Model::Base
17
+ use_database DB
18
+
19
+ property :casted_attribute, WithCastedModelMixin
20
+ property :title, :default => 'Sample Title'
21
+ property :details, Object, :default => { 'color' => 'blue' }
22
+ property :keywords, [String], :default => ['default-keyword']
23
+ property :sub_models do
24
+ property :title
25
+ end
26
+ end
27
+
28
+ describe "Dirty" do
29
+
30
+ describe "changes" do
31
+
32
+ it "should return changes on an attribute" do
33
+ @card = Card.new(:first_name => "matt")
34
+ @card.first_name = "andrew"
35
+ @card.first_name_changed?.should be_true
36
+ @card.changes.should == { "first_name" => ["matt", "andrew"] }
37
+ end
38
+
39
+ end
40
+
41
+ describe "save" do
42
+
43
+ it "should not save unchanged records" do
44
+ card_id = Card.create!(:first_name => "matt").id
45
+ @card = Card.find(card_id)
46
+ @card.database.should_not_receive(:save_doc)
47
+ @card.save
48
+ end
49
+
50
+ it "should save changed records" do
51
+ card_id = Card.create!(:first_name => "matt").id
52
+ @card = Card.find(card_id)
53
+ @card.first_name = "andrew"
54
+ @card.database.should_receive(:save_doc).and_return({"ok" => true})
55
+ @card.save
56
+ end
57
+
58
+ end
59
+
60
+ describe "changed?" do
61
+
62
+ # match activerecord behaviour
63
+ it "should report no changes on a new object with no attributes set" do
64
+ @card = Card.new
65
+ @card.changed?.should be_false
66
+ end
67
+
68
+ it "should report no changes on a hash property with a default value" do
69
+ @obj = DummyModel.new
70
+ @obj.details.changed?.should be_false
71
+ end
72
+
73
+ =begin
74
+ # match activerecord behaviour
75
+ # not currently working - not too important
76
+ it "should report changes on a new object with attributes set" do
77
+ @card = Card.new(:first_name => "matt")
78
+ @card.changed?.should be_true
79
+ end
80
+ =end
81
+
82
+ it "should report no changes on objects fetched from the database" do
83
+ card_id = Card.create!(:first_name => "matt").id
84
+ @card = Card.find(card_id)
85
+ @card.changed?.should be_false
86
+ end
87
+
88
+ it "should report changes if the record is modified" do
89
+ @card = Card.new
90
+ @card.first_name = "andrew"
91
+ @card.changed?.should be_true
92
+ @card.first_name_changed?.should be_true
93
+ end
94
+
95
+ it "should report no changes for unmodified records" do
96
+ card_id = Card.create!(:first_name => "matt").id
97
+ @card = Card.find(card_id)
98
+ @card.first_name = "matt"
99
+ @card.changed?.should be_false
100
+ @card.first_name_changed?.should be_false
101
+ end
102
+
103
+ it "should report no changes after a new record has been saved" do
104
+ @card = Card.new(:first_name => "matt")
105
+ @card.save!
106
+ @card.changed?.should be_false
107
+ end
108
+
109
+ it "should report no changes after a record has been saved" do
110
+ card_id = Card.create!(:first_name => "matt").id
111
+ @card = Card.find(card_id)
112
+ @card.first_name = "andrew"
113
+ @card.save!
114
+ @card.changed?.should be_false
115
+ end
116
+
117
+ # test changing list properties
118
+
119
+ it "should report changes if a list property is modified" do
120
+ cat_id = Cat.create!(:name => "Felix", :toys => [{:name => "Mouse"}]).id
121
+ @cat = Cat.find(cat_id)
122
+ @cat.toys = [{:name => "Feather"}]
123
+ @cat.changed?.should be_true
124
+ end
125
+
126
+ it "should report no changes if a list property is unmodified" do
127
+ cat_id = Cat.create!(:name => "Felix", :toys => [{:name => "Mouse"}]).id
128
+ @cat = Cat.find(cat_id)
129
+ @cat.toys = [{:name => "Mouse"}] # same as original list
130
+ @cat.changed?.should be_false
131
+ end
132
+
133
+ # attachments
134
+
135
+ it "should report changes if an attachment is added" do
136
+ cat_id = Cat.create!(:name => "Felix", :toys => [{:name => "Mouse"}]).id
137
+ @file = File.open(FIXTURE_PATH + '/attachments/test.html')
138
+ @cat = Cat.find(cat_id)
139
+ @cat.create_attachment(:file => @file, :name => "my_attachment")
140
+ @cat.changed?.should be_true
141
+ end
142
+
143
+ it "should report changes if an attachment is deleted" do
144
+ @cat = Cat.create!(:name => "Felix", :toys => [{:name => "Mouse"}])
145
+ @file = File.open(FIXTURE_PATH + '/attachments/test.html')
146
+ @attachment_name = "my_attachment"
147
+ @cat.create_attachment(:file => @file, :name => @attachment_name)
148
+ @cat.save
149
+ @cat = Cat.find(@cat.id)
150
+ @cat.delete_attachment(@attachment_name)
151
+ @cat.changed?.should be_true
152
+ end
153
+
154
+ # casted models
155
+
156
+ it "should report changes to casted models" do
157
+ @cat = Cat.create!(:name => "Felix", :favorite_toy => { :name => "Mouse" })
158
+ @cat = Cat.find(@cat.id)
159
+ @cat.favorite_toy['name'] = 'Feather'
160
+ @cat.changed?.should be_true
161
+ end
162
+
163
+ # casted arrays
164
+
165
+ def test_casted_array(change_expected)
166
+ obj = DummyModel.create!
167
+ obj = DummyModel.get(obj.id)
168
+ array = obj.keywords
169
+ yield array, obj
170
+ if change_expected
171
+ obj.changed?.should be_true
172
+ else
173
+ obj.changed?.should be_false
174
+ end
175
+ end
176
+
177
+ def should_change_array
178
+ test_casted_array(true) { |a,b| yield a,b }
179
+ end
180
+
181
+ def should_not_change_array
182
+ test_casted_array(false) { |a,b| yield a,b }
183
+ end
184
+
185
+ it "should report changes if an array index is modified" do
186
+ should_change_array do |array, obj|
187
+ array[0] = "keyword"
188
+ end
189
+ end
190
+
191
+ it "should report no changes if an array index is unmodified" do
192
+ should_not_change_array do |array, obj|
193
+ array[0] = array[0]
194
+ end
195
+ end
196
+
197
+ it "should report changes if an array is appended with <<" do
198
+ should_change_array do |array, obj|
199
+ array << 'keyword'
200
+ end
201
+ end
202
+
203
+ it "should report changes if an array is popped" do
204
+ should_change_array do |array, obj|
205
+ array.pop
206
+ end
207
+ end
208
+
209
+ it "should report no changes if an empty array is popped" do
210
+ should_not_change_array do |array, obj|
211
+ array.clear
212
+ obj.save! # clears changes
213
+ array.pop
214
+ end
215
+ end
216
+
217
+ it "should report changes if an array is pushed" do
218
+ should_change_array do |array, obj|
219
+ array.push("keyword")
220
+ end
221
+ end
222
+
223
+ it "should report changes if an array is shifted" do
224
+ should_change_array do |array, obj|
225
+ array.shift
226
+ end
227
+ end
228
+
229
+ it "should report no changes if an empty array is shifted" do
230
+ should_not_change_array do |array, obj|
231
+ array.clear
232
+ obj.save! # clears changes
233
+ array.shift
234
+ end
235
+ end
236
+
237
+ it "should report changes if an array is unshifted" do
238
+ should_change_array do |array, obj|
239
+ array.unshift("keyword")
240
+ end
241
+ end
242
+
243
+ it "should report changes if an array is cleared" do
244
+ should_change_array do |array, obj|
245
+ array.clear
246
+ end
247
+ end
248
+
249
+ # Object, {} (casted hash)
250
+
251
+ def test_casted_hash(change_expected)
252
+ obj = DummyModel.create!
253
+ obj = DummyModel.get(obj.id)
254
+ hash = obj.details
255
+ yield hash, obj
256
+ if change_expected
257
+ obj.changed?.should be_true
258
+ else
259
+ obj.changed?.should be_false
260
+ end
261
+ end
262
+
263
+ def should_change_hash
264
+ test_casted_hash(true) { |a,b| yield a,b }
265
+ end
266
+
267
+ def should_not_change_hash
268
+ test_casted_hash(false) { |a,b| yield a,b }
269
+ end
270
+
271
+ it "should report changes if a hash is modified" do
272
+ should_change_hash do |hash, obj|
273
+ hash['color'] = 'orange'
274
+ end
275
+ end
276
+
277
+ it "should report no changes if a hash is unmodified" do
278
+ should_not_change_hash do |hash, obj|
279
+ hash['color'] = hash['color']
280
+ end
281
+ end
282
+
283
+ it "should report changes when deleting from a hash" do
284
+ should_change_hash do |hash, obj|
285
+ hash.delete('color')
286
+ end
287
+ end
288
+
289
+ it "should report no changes when deleting a non existent key from a hash" do
290
+ should_not_change_hash do |hash, obj|
291
+ hash.delete('non-existent-key')
292
+ end
293
+ end
294
+
295
+ it "should report changes when clearing a hash" do
296
+ should_change_hash do |hash, obj|
297
+ hash.clear
298
+ end
299
+ end
300
+
301
+ it "should report changes when merging changes to a hash" do
302
+ should_change_hash do |hash, obj|
303
+ hash.merge!('foo' => 'bar')
304
+ end
305
+ end
306
+
307
+ it "should report no changes when merging no changes to a hash" do
308
+ should_not_change_hash do |hash, obj|
309
+ hash.merge!('color' => hash['color'])
310
+ end
311
+ end
312
+
313
+ it "should report changes when replacing hash content" do
314
+ should_change_hash do |hash, obj|
315
+ hash.replace('foo' => 'bar')
316
+ end
317
+ end
318
+
319
+ it "should report no changes when replacing hash content with same content" do
320
+ should_not_change_hash do |hash, obj|
321
+ hash.replace(hash)
322
+ end
323
+ end
324
+
325
+ it "should report changes when removing records with delete_if" do
326
+ should_change_hash do |hash, obj|
327
+ hash.delete_if { true }
328
+ end
329
+ end
330
+
331
+ it "should report no changes when removing no records with delete_if" do
332
+ should_not_change_hash do |hash, obj|
333
+ hash.delete_if { false }
334
+ end
335
+ end
336
+
337
+ if {}.respond_to?(:keep_if)
338
+
339
+ it "should report changes when removing records with keep_if" do
340
+ should_change_hash do |hash, obj|
341
+ hash.keep_if { false }
342
+ end
343
+ end
344
+
345
+ it "should report no changes when removing no records with keep_if" do
346
+ should_not_change_hash do |hash, obj|
347
+ hash.keep_if { true }
348
+ end
349
+ end
350
+
351
+ end
352
+
353
+ end
354
+
355
+ end
@@ -55,6 +55,9 @@ describe "Model properties" do
55
55
  card.calias.name.should == ["Aimonetti"]
56
56
  end
57
57
 
58
+ it "should raise error if property name coincides with model type key" do
59
+ lambda { Person.property(Person.model_type_key) }.should raise_error(/already used/)
60
+ end
58
61
 
59
62
  it "should be auto timestamped" do
60
63
  @card.created_at.should be_nil
@@ -354,10 +357,10 @@ describe "Property Class" do
354
357
  property.cast(parent, ["2010-06-01", "2010-06-02"]).class.should eql(CouchRest::Model::CastedArray)
355
358
  end
356
359
 
357
- it "should not set a CastedArray on array of Strings" do
360
+ it "should set a CastedArray on array of Strings" do
358
361
  property = CouchRest::Model::Property.new(:test, [String])
359
362
  parent = mock("FooObject")
360
- property.cast(parent, ["2010-06-01", "2010-06-02"]).class.should_not eql(CouchRest::Model::CastedArray)
363
+ property.cast(parent, ["2010-06-01", "2010-06-02"]).class.should eql(CouchRest::Model::CastedArray)
361
364
  end
362
365
 
363
366
  it "should raise and error if value is array when type is not" do
@@ -233,17 +233,6 @@ describe "Proxyable" do
233
233
  @obj.design_doc
234
234
  end
235
235
 
236
- describe "#refresh_design_doc" do
237
- it "should be proxied without database arg" do
238
- Cat.should_receive(:refresh_design_doc).with('database')
239
- @obj.refresh_design_doc
240
- end
241
- it "should be proxied with database arg" do
242
- Cat.should_receive(:refresh_design_doc).with('db')
243
- @obj.refresh_design_doc('db')
244
- end
245
- end
246
-
247
236
  describe "#save_design_doc" do
248
237
  it "should be proxied without args" do
249
238
  Cat.should_receive(:save_design_doc).with('database')
@@ -61,37 +61,27 @@ describe "Subclassing a Model" do
61
61
  validated_fields.should_not include(:extension_code)
62
62
  validated_fields.should_not include(:job_title)
63
63
  end
64
-
64
+
65
65
  it "should inherit default property values" do
66
66
  @card.bg_color.should == '#ccc'
67
67
  end
68
-
68
+
69
69
  it "should be able to overwrite a default property" do
70
70
  DesignBusinessCard.new.bg_color.should == '#eee'
71
71
  end
72
-
72
+
73
73
  it "should have a design doc slug based on the subclass name" do
74
- Course.refresh_design_doc
75
74
  OnlineCourse.design_doc_slug.should =~ /^OnlineCourse/
76
75
  end
77
-
78
- it "should have its own design_doc_fresh" do
79
- Animal.refresh_design_doc
80
- Dog.send(:design_doc_fresh, Dog.database).should_not == true
81
- Dog.refresh_design_doc
82
- Dog.send(:design_doc_fresh, Dog.database).should == true
83
- end
84
-
76
+
85
77
  it "should not add views to the parent's design_doc" do
86
78
  Course.design_doc['views'].keys.should_not include('by_url')
87
79
  end
88
-
80
+
89
81
  it "should not add the parent's views to its design doc" do
90
- Course.refresh_design_doc
91
- OnlineCourse.refresh_design_doc
92
82
  OnlineCourse.design_doc['views'].keys.should_not include('by_title')
93
83
  end
94
-
84
+
95
85
  it "should have an all view with a guard clause for model == subclass name in the map function" do
96
86
  OnlineCourse.design_doc['views']['all']['map'].should =~ /if \(doc\['#{OnlineCourse.model_type_key}'\] == 'OnlineCourse'\)/
97
87
  end
@@ -19,11 +19,11 @@ describe "Model views" do
19
19
  # NOTE! Add more unit tests!
20
20
 
21
21
  describe "#view" do
22
-
22
+
23
23
  it "should not alter original query" do
24
24
  options = { :database => DB }
25
25
  view = Article.view('by_date', options)
26
- options[:database].should_not be_nil
26
+ options[:database].should eql(DB)
27
27
  end
28
28
 
29
29
  end
@@ -56,35 +56,6 @@ describe "Model views" do
56
56
  written_at += 24 * 3600
57
57
  end
58
58
  end
59
- it "should have a design doc" do
60
- Article.design_doc["views"]["by_date"].should_not be_nil
61
- end
62
- it "should save the design doc" do
63
- Article.by_date #rescue nil
64
- doc = Article.database.get Article.design_doc.id
65
- doc['views']['by_date'].should_not be_nil
66
- end
67
- it "should save design doc if a view changed" do
68
- Article.by_date
69
- orig = Article.stored_design_doc
70
- orig['views']['by_date']['map'] = "function() { }"
71
- Article.database.save_doc(orig)
72
- rev = Article.stored_design_doc['_rev']
73
- Article.req_design_doc_refresh # prepare for re-load
74
- Article.by_date
75
- orig = Article.stored_design_doc
76
- orig['views']['by_date']['map'].should eql(Article.design_doc['views']['by_date']['map'])
77
- orig['_rev'].should_not eql(rev)
78
- end
79
- it "should not save design doc if not changed" do
80
- Article.by_date
81
- orig = Article.stored_design_doc['_rev']
82
- Article.req_design_doc_refresh
83
- Article.by_date
84
- Article.stored_design_doc['_rev'].should eql(orig)
85
- end
86
-
87
-
88
59
  it "should return the matching raw view result" do
89
60
  view = Article.by_date :raw => true
90
61
  view['rows'].length.should == 4
@@ -107,9 +78,8 @@ describe "Model views" do
107
78
  Article.view_by :title
108
79
  lambda{Article.by_title}.should_not raise_error
109
80
  end
110
-
111
81
  end
112
-
82
+
113
83
  describe "another model with a simple view" do
114
84
  before(:all) do
115
85
  reset_test_db!
@@ -240,7 +210,6 @@ describe "Model views" do
240
210
  lambda{Unattached.all}.should raise_error
241
211
  end
242
212
  it "should query all" do
243
- # Unattached.cleanup_design_docs!(@db)
244
213
  rs = Unattached.all :database => @db
245
214
  rs.length.should == 4
246
215
  end
@@ -297,19 +266,7 @@ describe "Model views" do
297
266
  u = Unattached.last :database=>@db
298
267
  u.title.should == "aaa"
299
268
  end
300
-
301
- it "should barf on all_design_doc_versions if no database given" do
302
- lambda{Unattached.all_design_doc_versions}.should raise_error
303
- end
304
- it "should be able to cleanup the db/bump the revision number" do
305
- # if the previous specs were not run, the model_design_doc will be blank
306
- Unattached.use_database DB
307
- Unattached.view_by :questions
308
- Unattached.by_questions(:database => @db)
309
- original_revision = Unattached.model_design_doc(@db)['_rev']
310
- Unattached.save_design_doc!(@db)
311
- Unattached.model_design_doc(@db)['_rev'].should_not == original_revision
312
- end
269
+
313
270
  end
314
271
 
315
272
  describe "a model with a compound key view" do
@@ -377,7 +334,7 @@ describe "Model views" do
377
334
  before(:each) do
378
335
  reset_test_db!
379
336
  Article.by_date
380
- @original_doc_rev = Article.model_design_doc['_rev']
337
+ @original_doc_rev = Article.stored_design_doc['_rev']
381
338
  @design_docs = Article.database.documents :startkey => "_design/", :endkey => "_design/\u9999"
382
339
  end
383
340
  it "should not create a design doc on view definition" do
@@ -386,10 +343,9 @@ describe "Model views" do
386
343
  newdocs["rows"].length.should == @design_docs["rows"].length
387
344
  end
388
345
  it "should create a new version of the design document on view access" do
389
- ddocs = Article.all_design_doc_versions["rows"].length
390
346
  Article.view_by :updated_at
391
347
  Article.by_updated_at
392
- @original_doc_rev.should_not == Article.model_design_doc['_rev']
348
+ @original_doc_rev.should_not == Article.stored_design_doc['_rev']
393
349
  Article.design_doc["views"].keys.should include("by_updated_at")
394
350
  end
395
351
  end
@@ -131,7 +131,7 @@ class WithUniqueValidationView < CouchRest::Model::Base
131
131
  attr_accessor :code
132
132
  unique_id :code
133
133
  def code
134
- self["_id"] ||= @code
134
+ @code
135
135
  end
136
136
  property :title
137
137
 
@@ -7,10 +7,10 @@ class Card < CouchRest::Model::Base
7
7
  property :last_name, :alias => :family_name
8
8
  property :read_only_value, :read_only => true
9
9
  property :cast_alias, Person, :alias => :calias
10
+ property :fg_color, :default => '#000'
10
11
 
11
-
12
12
  timestamps!
13
-
13
+
14
14
  # Validation
15
15
  validates_presence_of :first_name
16
16
 
data/spec/spec_helper.rb CHANGED
@@ -22,6 +22,8 @@ end
22
22
 
23
23
  def reset_test_db!
24
24
  DB.recreate! rescue nil
25
+ # Reset the Design Cache
26
+ Thread.current[:couchrest_design_cache] = {}
25
27
  DB
26
28
  end
27
29
 
metadata CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
6
6
  - 1
7
7
  - 1
8
8
  - 0
9
- - beta2
10
- version: 1.1.0.beta2
9
+ - beta3
10
+ version: 1.1.0.beta3
11
11
  platform: ruby
12
12
  authors:
13
13
  - J. Chris Anderson
@@ -141,12 +141,12 @@ files:
141
141
  - .gitignore
142
142
  - .rspec
143
143
  - Gemfile
144
- - Gemfile.lock
145
144
  - LICENSE
146
145
  - README.md
147
146
  - Rakefile
148
147
  - THANKS.md
149
148
  - VERSION
149
+ - benchmarks/dirty.rb
150
150
  - couchrest_model.gemspec
151
151
  - history.txt
152
152
  - init.rb
@@ -155,6 +155,8 @@ files:
155
155
  - lib/couchrest/model/base.rb
156
156
  - lib/couchrest/model/callbacks.rb
157
157
  - lib/couchrest/model/casted_array.rb
158
+ - lib/couchrest/model/casted_by.rb
159
+ - lib/couchrest/model/casted_hash.rb
158
160
  - lib/couchrest/model/casted_model.rb
159
161
  - lib/couchrest/model/class_proxy.rb
160
162
  - lib/couchrest/model/collection.rb
@@ -164,6 +166,7 @@ files:
164
166
  - lib/couchrest/model/design_doc.rb
165
167
  - lib/couchrest/model/designs.rb
166
168
  - lib/couchrest/model/designs/view.rb
169
+ - lib/couchrest/model/dirty.rb
167
170
  - lib/couchrest/model/document_queries.rb
168
171
  - lib/couchrest/model/errors.rb
169
172
  - lib/couchrest/model/extended_attachments.rb
@@ -172,7 +175,7 @@ files:
172
175
  - lib/couchrest/model/property.rb
173
176
  - lib/couchrest/model/property_protection.rb
174
177
  - lib/couchrest/model/proxyable.rb
175
- - lib/couchrest/model/support/couchrest.rb
178
+ - lib/couchrest/model/support/couchrest_design.rb
176
179
  - lib/couchrest/model/typecast.rb
177
180
  - lib/couchrest/model/validations.rb
178
181
  - lib/couchrest/model/validations/casted_model.rb
@@ -194,8 +197,10 @@ files:
194
197
  - spec/couchrest/collection_spec.rb
195
198
  - spec/couchrest/configuration_spec.rb
196
199
  - spec/couchrest/core_extensions/time_parsing.rb
200
+ - spec/couchrest/design_doc_spec.rb
197
201
  - spec/couchrest/designs/view_spec.rb
198
202
  - spec/couchrest/designs_spec.rb
203
+ - spec/couchrest/dirty_spec.rb
199
204
  - spec/couchrest/inherited_spec.rb
200
205
  - spec/couchrest/persistence_spec.rb
201
206
  - spec/couchrest/property_protection_spec.rb