davber_couch_potato 0.3.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 (80) hide show
  1. data/CHANGES.md +106 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.md +409 -0
  4. data/VERSION.yml +5 -0
  5. data/init.rb +3 -0
  6. data/lib/core_ext/date.rb +21 -0
  7. data/lib/core_ext/object.rb +5 -0
  8. data/lib/core_ext/string.rb +8 -0
  9. data/lib/core_ext/symbol.rb +15 -0
  10. data/lib/core_ext/time.rb +21 -0
  11. data/lib/couch_potato/database.rb +161 -0
  12. data/lib/couch_potato/persistence/active_model_compliance.rb +44 -0
  13. data/lib/couch_potato/persistence/attachments.rb +31 -0
  14. data/lib/couch_potato/persistence/callbacks.rb +62 -0
  15. data/lib/couch_potato/persistence/dirty_attributes.rb +56 -0
  16. data/lib/couch_potato/persistence/ghost_attributes.rb +22 -0
  17. data/lib/couch_potato/persistence/json.rb +46 -0
  18. data/lib/couch_potato/persistence/magic_timestamps.rb +20 -0
  19. data/lib/couch_potato/persistence/properties.rb +86 -0
  20. data/lib/couch_potato/persistence/simple_property.rb +72 -0
  21. data/lib/couch_potato/persistence/type_caster.rb +40 -0
  22. data/lib/couch_potato/persistence.rb +105 -0
  23. data/lib/couch_potato/railtie.rb +18 -0
  24. data/lib/couch_potato/rspec/matchers/json2.js +482 -0
  25. data/lib/couch_potato/rspec/matchers/list_as_matcher.rb +54 -0
  26. data/lib/couch_potato/rspec/matchers/map_to_matcher.rb +49 -0
  27. data/lib/couch_potato/rspec/matchers/print_r.js +60 -0
  28. data/lib/couch_potato/rspec/matchers/reduce_to_matcher.rb +50 -0
  29. data/lib/couch_potato/rspec/matchers.rb +39 -0
  30. data/lib/couch_potato/rspec/stub_db.rb +46 -0
  31. data/lib/couch_potato/rspec.rb +2 -0
  32. data/lib/couch_potato/validation/with_active_model.rb +27 -0
  33. data/lib/couch_potato/validation/with_validatable.rb +37 -0
  34. data/lib/couch_potato/validation.rb +16 -0
  35. data/lib/couch_potato/view/base_view_spec.rb +67 -0
  36. data/lib/couch_potato/view/custom_view_spec.rb +42 -0
  37. data/lib/couch_potato/view/custom_views.rb +52 -0
  38. data/lib/couch_potato/view/lists.rb +23 -0
  39. data/lib/couch_potato/view/model_view_spec.rb +75 -0
  40. data/lib/couch_potato/view/properties_view_spec.rb +47 -0
  41. data/lib/couch_potato/view/raw_view_spec.rb +25 -0
  42. data/lib/couch_potato/view/view_query.rb +78 -0
  43. data/lib/couch_potato.rb +79 -0
  44. data/rails/init.rb +4 -0
  45. data/rails/reload_classes.rb +47 -0
  46. data/spec/attachments_spec.rb +23 -0
  47. data/spec/callbacks_spec.rb +308 -0
  48. data/spec/create_spec.rb +34 -0
  49. data/spec/custom_view_spec.rb +239 -0
  50. data/spec/default_property_spec.rb +38 -0
  51. data/spec/destroy_spec.rb +29 -0
  52. data/spec/fixtures/address.rb +10 -0
  53. data/spec/fixtures/person.rb +6 -0
  54. data/spec/property_spec.rb +315 -0
  55. data/spec/rails_spec.rb +51 -0
  56. data/spec/spec.opts +4 -0
  57. data/spec/spec_helper.rb +47 -0
  58. data/spec/unit/active_model_compliance_spec.rb +98 -0
  59. data/spec/unit/attributes_spec.rb +125 -0
  60. data/spec/unit/base_view_spec_spec.rb +73 -0
  61. data/spec/unit/callbacks_spec.rb +72 -0
  62. data/spec/unit/couch_potato_spec.rb +39 -0
  63. data/spec/unit/create_spec.rb +58 -0
  64. data/spec/unit/custom_views_spec.rb +15 -0
  65. data/spec/unit/database_spec.rb +266 -0
  66. data/spec/unit/date_spec.rb +22 -0
  67. data/spec/unit/dirty_attributes_spec.rb +166 -0
  68. data/spec/unit/json_create_id_spec.rb +14 -0
  69. data/spec/unit/lists_spec.rb +20 -0
  70. data/spec/unit/model_view_spec_spec.rb +13 -0
  71. data/spec/unit/properties_view_spec_spec.rb +31 -0
  72. data/spec/unit/rspec_matchers_spec.rb +124 -0
  73. data/spec/unit/rspec_stub_db_spec.rb +35 -0
  74. data/spec/unit/string_spec.rb +7 -0
  75. data/spec/unit/time_spec.rb +22 -0
  76. data/spec/unit/validation_spec.rb +67 -0
  77. data/spec/unit/view_query_spec.rb +78 -0
  78. data/spec/update_spec.rb +40 -0
  79. data/spec/view_updates_spec.rb +28 -0
  80. metadata +205 -0
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe String, 'camelize' do
4
+ it "should camelize a string" do
5
+ 'my_string'.camelize.should == 'MyString'
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Time, 'to_json' do
4
+ it "should convert to utc and format the time in a way that i can use it for sorting in couchdb" do
5
+ time = Time.parse('2009-01-01 11:12:23 +0200')
6
+ time.to_json.should == "\"2009/01/01 09:12:23 +0000\""
7
+ end
8
+ end
9
+
10
+ describe Time, 'to_s(:json)' do
11
+ it "should format it in the same way as to_json does so i can use this to do queries over time attributes" do
12
+ time = Time.parse('2009-01-01 11:12:23 +0200')
13
+ time.to_s(:json).should == "2009/01/01 09:12:23 +0000"
14
+ end
15
+ end
16
+
17
+ describe Time, 'to_s' do
18
+ it "should leave the original to_s untouched" do
19
+ time = Time.parse('2009-01-01 10:12:23 +0100').getutc
20
+ time.to_s.should include("09:12:23")
21
+ end
22
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'CouchPotato::Config.validation_framework' do
4
+ before(:each) do
5
+ @original_validation_framework = CouchPotato::Config.validation_framework
6
+ end
7
+ after(:each) do
8
+ CouchPotato::Config.validation_framework = @original_validation_framework
9
+ end
10
+
11
+ describe "access to errors object" do
12
+ it "should description" do
13
+ model_class = Class.new
14
+ model_class.send(:include, CouchPotato::Persistence)
15
+ model_class.new.errors.should respond_to(:errors)
16
+ end
17
+ end
18
+
19
+ begin
20
+ require 'active_model'
21
+
22
+ describe 'with :active_model' do
23
+ before(:each) do
24
+ CouchPotato::Config.validation_framework = :active_model
25
+ end
26
+
27
+ it "should include ActiveModel::Validations upon inclusion of CouchPotato::Persistence" do
28
+ model_class = Class.new
29
+ ActiveModel::Validations.should_receive(:included).with(model_class)
30
+ model_class.send(:include, CouchPotato::Persistence)
31
+ end
32
+ end
33
+
34
+ rescue LoadError
35
+ STDERR.puts "WARNING: active_model gem not installed. Not running ActiveModel validation specs."
36
+ end
37
+
38
+ begin
39
+ require 'validatable'
40
+
41
+ describe 'with :validatable' do
42
+ before(:each) do
43
+ CouchPotato::Config.validation_framework = :validatable
44
+ end
45
+
46
+ it "should include ActiveModel::Validations upon inclusion of CouchPotato::Persistence" do
47
+ model_class = Class.new
48
+ Validatable.should_receive(:included).with(model_class)
49
+ model_class.send(:include, CouchPotato::Persistence)
50
+ end
51
+ end
52
+
53
+ rescue LoadError
54
+ STDERR.puts "WARNING: validatable gem not installed. Not running Validatable validation specs."
55
+ end
56
+
57
+ describe 'with an unknown framework' do
58
+ before(:each) do
59
+ CouchPotato::Config.validation_framework = :unknown_validation_framework
60
+ end
61
+
62
+ it "should raise an error" do
63
+ model_class = Class.new
64
+ lambda { model_class.send(:include, CouchPotato::Persistence) }.should raise_error
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe CouchPotato::View::ViewQuery, 'query_view!' do
4
+ before(:each) do
5
+ CouchRest.stub(:get => nil)
6
+ end
7
+
8
+ it "should not pass a key if conditions are empty" do
9
+ db = mock 'db', :get => nil, :save_doc => nil
10
+ db.should_receive(:view).with(anything, {})
11
+ CouchPotato::View::ViewQuery.new(db, '', {:view0 => {}}).query_view!
12
+ end
13
+
14
+ it "should not update a view when the map/reduce functions haven't changed" do
15
+ db = mock 'db', :get => {'views' => {'view' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}}, :view => nil
16
+ db.should_not_receive(:save_doc)
17
+ CouchPotato::View::ViewQuery.new(db, 'design', :view => {:map => '<map_code>', :reduce => '<reduce_code>'}).query_view!
18
+ end
19
+
20
+ it "should not update a view when the list function hasn't changed" do
21
+ db = mock 'db', :get => {'views' => {'view' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}, 'lists' => {'list0' => '<list_code>'}}, :view => nil
22
+ db.should_not_receive(:save_doc)
23
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list0 => '<list_code>').query_view!
24
+ end
25
+
26
+ it "should update a view when the map function has changed" do
27
+ db = mock 'db', :get => {'views' => {'view2' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}}, :view => nil
28
+ db.should_receive(:save_doc)
29
+ CouchPotato::View::ViewQuery.new(db, 'design', :view2 => {:map => '<new map_code>', :recude => '<reduce_code>'}).query_view!
30
+ end
31
+
32
+ it "should update a view when the reduce function has changed" do
33
+ db = mock 'db', :get => {'views' => {'view3' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}}, :view => nil
34
+ db.should_receive(:save_doc)
35
+ CouchPotato::View::ViewQuery.new(db, 'design', :view3 => {:map => '<map_code>', :reduce => '<new reduce_code>'}).query_view!
36
+ end
37
+
38
+ it "should update a view when the list function has changed" do
39
+ db = mock 'db', :get => {
40
+ 'views' => {'view4' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
41
+ 'lists' => {'list1' => '<list_code>'}
42
+ }, :view => nil
43
+ db.should_receive(:save_doc)
44
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view4 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!
45
+ end
46
+
47
+ it "should update a view when there wasn't a list function but now there is one" do
48
+ db = mock 'db', :get => {
49
+ 'views' => {'view5' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}
50
+ }, :view => nil
51
+ db.should_receive(:save_doc)
52
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view5 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!
53
+ end
54
+
55
+ it "should not update a view when there is a list function but no list function is passed" do
56
+ db = mock 'db', :get => {
57
+ 'views' => {'view6' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
58
+ 'lists' => {'list1' => '<list_code>'}
59
+ }, :view => nil
60
+ db.should_not_receive(:save_doc)
61
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view6 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, {}).query_view!
62
+ end
63
+
64
+ it "should not update a view when there were no lists before and no list function is passed" do
65
+ db = mock 'db', :get => {
66
+ 'views' => {'view6' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}
67
+ }, :view => nil
68
+ db.should_not_receive(:save_doc)
69
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view6 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, {}).query_view!
70
+ end
71
+
72
+ it "should query CouchRest directly when querying a list" do
73
+ db = stub('db').as_null_object
74
+ CouchRest.should_receive(:get).with('http://127.0.0.1:5984/couch_potato_test/_design/my_design/_list/list1/view7?key=1')
75
+ CouchPotato::View::ViewQuery.new(db, 'my_design', {:view7 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!(:key => 1)
76
+ end
77
+
78
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe "create" do
4
+ before(:all) do
5
+ recreate_db
6
+ end
7
+
8
+ before(:each) do
9
+ @comment = Comment.new :title => 'my_title', :updated_at => Time.now - 100
10
+ CouchPotato.database.save_document! @comment
11
+ end
12
+
13
+ it "should update the revision" do
14
+ old_rev = @comment._rev
15
+ @comment.title = 'xyz'
16
+ CouchPotato.database.save_document! @comment
17
+ @comment._rev.should_not == old_rev
18
+ @comment._rev.should_not be_nil
19
+ end
20
+
21
+ it "should not update created at" do
22
+ old_created_at = @comment.created_at
23
+ @comment.title = 'xyz'
24
+ CouchPotato.database.save_document! @comment
25
+ @comment.created_at.should == old_created_at
26
+ end
27
+
28
+ it "should update updated at" do
29
+ old_updated_at = @comment.updated_at
30
+ @comment.title = 'xyz'
31
+ CouchPotato.database.save_document! @comment
32
+ @comment.updated_at.should > old_updated_at
33
+ end
34
+
35
+ it "should update the attributes" do
36
+ @comment.title = 'new title'
37
+ CouchPotato.database.save_document! @comment
38
+ CouchPotato.couchrest_database.get("#{@comment.id}").title.should == 'new title'
39
+ end
40
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe "automatic view updates" do
4
+ before(:each) do
5
+ recreate_db
6
+ @db = CouchPotato.couchrest_database
7
+ end
8
+
9
+ it "should update a view that doesn't match the given functions" do
10
+ CouchPotato::View::ViewQuery.new(@db, 'test_design1', {'test_view' => {:map => 'function(doc) {}', :reduce => 'function() {}'}}, nil).query_view! # create view
11
+ CouchPotato::View::ViewQuery.new(@db, 'test_design1', {'test_view' => {:map => 'function(doc) {emit(doc.id, null)}', :reduce => 'function(key, values) {return sum(values)}'}}, nil).query_view!
12
+ CouchPotato.database.load('_design/test_design1')['views']['test_view'].should == {
13
+ 'map' => 'function(doc) {emit(doc.id, null)}',
14
+ 'reduce' => 'function(key, values) {return sum(values)}'
15
+ }
16
+ end
17
+
18
+ it "should only update a view once to avoid writing the view for every request" do
19
+ CouchPotato::View::ViewQuery.new(@db, 'test_design2', {'test_view' => {:map => 'function(doc) {}', :reduce => 'function() {}'}}, nil).query_view! # create view
20
+ CouchPotato::View::ViewQuery.new(@db, 'test_design2', {'test_view' => {:map => 'function(doc) {emit(doc.id, null)}', :reduce => 'function(key, values) {return sum(values)}'}}, nil).query_view!
21
+ CouchPotato::View::ViewQuery.new(@db, 'test_design2', {'test_view' => {:map => 'function(doc) {}', :reduce => 'function() {}'}}, nil).query_view!
22
+ CouchPotato.database.load('_design/test_design2')['views']['test_view'].should == {
23
+ 'map' => 'function(doc) {emit(doc.id, null)}',
24
+ 'reduce' => 'function(key, values) {return sum(values)}'
25
+ }
26
+ end
27
+
28
+ end
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: davber_couch_potato
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
+ platform: ruby
12
+ authors:
13
+ - David Bergman
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-14 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: json
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: couchrest
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 59
44
+ segments:
45
+ - 0
46
+ - 24
47
+ version: "0.24"
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ description: Ruby persistence layer for CouchDB
51
+ email: davber@gmail.com
52
+ executables: []
53
+
54
+ extensions: []
55
+
56
+ extra_rdoc_files:
57
+ - README.md
58
+ files:
59
+ - CHANGES.md
60
+ - MIT-LICENSE.txt
61
+ - README.md
62
+ - VERSION.yml
63
+ - init.rb
64
+ - lib/core_ext/date.rb
65
+ - lib/core_ext/object.rb
66
+ - lib/core_ext/string.rb
67
+ - lib/core_ext/symbol.rb
68
+ - lib/core_ext/time.rb
69
+ - lib/couch_potato.rb
70
+ - lib/couch_potato/database.rb
71
+ - lib/couch_potato/persistence.rb
72
+ - lib/couch_potato/persistence/active_model_compliance.rb
73
+ - lib/couch_potato/persistence/attachments.rb
74
+ - lib/couch_potato/persistence/callbacks.rb
75
+ - lib/couch_potato/persistence/dirty_attributes.rb
76
+ - lib/couch_potato/persistence/ghost_attributes.rb
77
+ - lib/couch_potato/persistence/json.rb
78
+ - lib/couch_potato/persistence/magic_timestamps.rb
79
+ - lib/couch_potato/persistence/properties.rb
80
+ - lib/couch_potato/persistence/simple_property.rb
81
+ - lib/couch_potato/persistence/type_caster.rb
82
+ - lib/couch_potato/railtie.rb
83
+ - lib/couch_potato/rspec.rb
84
+ - lib/couch_potato/rspec/matchers.rb
85
+ - lib/couch_potato/rspec/matchers/json2.js
86
+ - lib/couch_potato/rspec/matchers/list_as_matcher.rb
87
+ - lib/couch_potato/rspec/matchers/map_to_matcher.rb
88
+ - lib/couch_potato/rspec/matchers/print_r.js
89
+ - lib/couch_potato/rspec/matchers/reduce_to_matcher.rb
90
+ - lib/couch_potato/rspec/stub_db.rb
91
+ - lib/couch_potato/validation.rb
92
+ - lib/couch_potato/validation/with_active_model.rb
93
+ - lib/couch_potato/validation/with_validatable.rb
94
+ - lib/couch_potato/view/base_view_spec.rb
95
+ - lib/couch_potato/view/custom_view_spec.rb
96
+ - lib/couch_potato/view/custom_views.rb
97
+ - lib/couch_potato/view/lists.rb
98
+ - lib/couch_potato/view/model_view_spec.rb
99
+ - lib/couch_potato/view/properties_view_spec.rb
100
+ - lib/couch_potato/view/raw_view_spec.rb
101
+ - lib/couch_potato/view/view_query.rb
102
+ - rails/init.rb
103
+ - rails/reload_classes.rb
104
+ - spec/attachments_spec.rb
105
+ - spec/callbacks_spec.rb
106
+ - spec/create_spec.rb
107
+ - spec/custom_view_spec.rb
108
+ - spec/default_property_spec.rb
109
+ - spec/destroy_spec.rb
110
+ - spec/fixtures/address.rb
111
+ - spec/fixtures/person.rb
112
+ - spec/property_spec.rb
113
+ - spec/rails_spec.rb
114
+ - spec/spec.opts
115
+ - spec/spec_helper.rb
116
+ - spec/unit/active_model_compliance_spec.rb
117
+ - spec/unit/attributes_spec.rb
118
+ - spec/unit/base_view_spec_spec.rb
119
+ - spec/unit/callbacks_spec.rb
120
+ - spec/unit/couch_potato_spec.rb
121
+ - spec/unit/create_spec.rb
122
+ - spec/unit/custom_views_spec.rb
123
+ - spec/unit/database_spec.rb
124
+ - spec/unit/date_spec.rb
125
+ - spec/unit/dirty_attributes_spec.rb
126
+ - spec/unit/json_create_id_spec.rb
127
+ - spec/unit/lists_spec.rb
128
+ - spec/unit/model_view_spec_spec.rb
129
+ - spec/unit/properties_view_spec_spec.rb
130
+ - spec/unit/rspec_matchers_spec.rb
131
+ - spec/unit/rspec_stub_db_spec.rb
132
+ - spec/unit/string_spec.rb
133
+ - spec/unit/time_spec.rb
134
+ - spec/unit/validation_spec.rb
135
+ - spec/unit/view_query_spec.rb
136
+ - spec/update_spec.rb
137
+ - spec/view_updates_spec.rb
138
+ has_rdoc: true
139
+ homepage: http://github.com/davber/couch_potato
140
+ licenses: []
141
+
142
+ post_install_message:
143
+ rdoc_options:
144
+ - --charset=UTF-8
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ hash: 3
153
+ segments:
154
+ - 0
155
+ version: "0"
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ hash: 3
162
+ segments:
163
+ - 0
164
+ version: "0"
165
+ requirements: []
166
+
167
+ rubyforge_project:
168
+ rubygems_version: 1.3.7
169
+ signing_key:
170
+ specification_version: 3
171
+ summary: Ruby persistence layer for CouchDB
172
+ test_files:
173
+ - spec/attachments_spec.rb
174
+ - spec/callbacks_spec.rb
175
+ - spec/create_spec.rb
176
+ - spec/custom_view_spec.rb
177
+ - spec/default_property_spec.rb
178
+ - spec/destroy_spec.rb
179
+ - spec/fixtures/address.rb
180
+ - spec/fixtures/person.rb
181
+ - spec/property_spec.rb
182
+ - spec/rails_spec.rb
183
+ - spec/spec_helper.rb
184
+ - spec/unit/active_model_compliance_spec.rb
185
+ - spec/unit/attributes_spec.rb
186
+ - spec/unit/base_view_spec_spec.rb
187
+ - spec/unit/callbacks_spec.rb
188
+ - spec/unit/couch_potato_spec.rb
189
+ - spec/unit/create_spec.rb
190
+ - spec/unit/custom_views_spec.rb
191
+ - spec/unit/database_spec.rb
192
+ - spec/unit/date_spec.rb
193
+ - spec/unit/dirty_attributes_spec.rb
194
+ - spec/unit/json_create_id_spec.rb
195
+ - spec/unit/lists_spec.rb
196
+ - spec/unit/model_view_spec_spec.rb
197
+ - spec/unit/properties_view_spec_spec.rb
198
+ - spec/unit/rspec_matchers_spec.rb
199
+ - spec/unit/rspec_stub_db_spec.rb
200
+ - spec/unit/string_spec.rb
201
+ - spec/unit/time_spec.rb
202
+ - spec/unit/validation_spec.rb
203
+ - spec/unit/view_query_spec.rb
204
+ - spec/update_spec.rb
205
+ - spec/view_updates_spec.rb