couch_potato-rails2 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +5 -0
  3. data/CHANGES.md +148 -0
  4. data/CREDITS +6 -0
  5. data/Gemfile +4 -0
  6. data/MIT-LICENSE.txt +19 -0
  7. data/README.md +450 -0
  8. data/Rakefile +82 -0
  9. data/couch_potato.gemspec +27 -0
  10. data/init.rb +3 -0
  11. data/lib/core_ext/date.rb +14 -0
  12. data/lib/core_ext/object.rb +5 -0
  13. data/lib/core_ext/string.rb +12 -0
  14. data/lib/core_ext/symbol.rb +15 -0
  15. data/lib/core_ext/time.rb +23 -0
  16. data/lib/couch_potato.rb +48 -0
  17. data/lib/couch_potato/database.rb +179 -0
  18. data/lib/couch_potato/persistence.rb +124 -0
  19. data/lib/couch_potato/persistence/active_model_compliance.rb +44 -0
  20. data/lib/couch_potato/persistence/attachments.rb +31 -0
  21. data/lib/couch_potato/persistence/callbacks.rb +29 -0
  22. data/lib/couch_potato/persistence/dirty_attributes.rb +56 -0
  23. data/lib/couch_potato/persistence/ghost_attributes.rb +12 -0
  24. data/lib/couch_potato/persistence/json.rb +47 -0
  25. data/lib/couch_potato/persistence/magic_timestamps.rb +23 -0
  26. data/lib/couch_potato/persistence/properties.rb +79 -0
  27. data/lib/couch_potato/persistence/simple_property.rb +82 -0
  28. data/lib/couch_potato/persistence/type_caster.rb +40 -0
  29. data/lib/couch_potato/railtie.rb +25 -0
  30. data/lib/couch_potato/rspec.rb +2 -0
  31. data/lib/couch_potato/rspec/matchers.rb +39 -0
  32. data/lib/couch_potato/rspec/matchers/json2.js +482 -0
  33. data/lib/couch_potato/rspec/matchers/list_as_matcher.rb +54 -0
  34. data/lib/couch_potato/rspec/matchers/map_to_matcher.rb +49 -0
  35. data/lib/couch_potato/rspec/matchers/print_r.js +60 -0
  36. data/lib/couch_potato/rspec/matchers/reduce_to_matcher.rb +50 -0
  37. data/lib/couch_potato/rspec/stub_db.rb +46 -0
  38. data/lib/couch_potato/validation.rb +16 -0
  39. data/lib/couch_potato/validation/with_active_model.rb +27 -0
  40. data/lib/couch_potato/validation/with_validatable.rb +41 -0
  41. data/lib/couch_potato/version.rb +3 -0
  42. data/lib/couch_potato/view/base_view_spec.rb +84 -0
  43. data/lib/couch_potato/view/custom_view_spec.rb +42 -0
  44. data/lib/couch_potato/view/custom_views.rb +52 -0
  45. data/lib/couch_potato/view/lists.rb +23 -0
  46. data/lib/couch_potato/view/model_view_spec.rb +75 -0
  47. data/lib/couch_potato/view/properties_view_spec.rb +47 -0
  48. data/lib/couch_potato/view/raw_view_spec.rb +25 -0
  49. data/lib/couch_potato/view/view_query.rb +82 -0
  50. data/rails/init.rb +4 -0
  51. data/rails/reload_classes.rb +47 -0
  52. data/spec/attachments_spec.rb +23 -0
  53. data/spec/callbacks_spec.rb +297 -0
  54. data/spec/create_spec.rb +35 -0
  55. data/spec/custom_view_spec.rb +239 -0
  56. data/spec/default_property_spec.rb +38 -0
  57. data/spec/destroy_spec.rb +29 -0
  58. data/spec/fixtures/address.rb +10 -0
  59. data/spec/fixtures/person.rb +6 -0
  60. data/spec/property_spec.rb +323 -0
  61. data/spec/rails_spec.rb +50 -0
  62. data/spec/railtie_spec.rb +65 -0
  63. data/spec/spec.opts +2 -0
  64. data/spec/spec_helper.rb +44 -0
  65. data/spec/unit/active_model_compliance_spec.rb +98 -0
  66. data/spec/unit/attributes_spec.rb +135 -0
  67. data/spec/unit/base_view_spec_spec.rb +106 -0
  68. data/spec/unit/callbacks_spec.rb +46 -0
  69. data/spec/unit/couch_potato_spec.rb +39 -0
  70. data/spec/unit/create_spec.rb +69 -0
  71. data/spec/unit/custom_views_spec.rb +15 -0
  72. data/spec/unit/database_spec.rb +317 -0
  73. data/spec/unit/date_spec.rb +22 -0
  74. data/spec/unit/dirty_attributes_spec.rb +136 -0
  75. data/spec/unit/initialize_spec.rb +38 -0
  76. data/spec/unit/json_spec.rb +30 -0
  77. data/spec/unit/lists_spec.rb +20 -0
  78. data/spec/unit/model_view_spec_spec.rb +13 -0
  79. data/spec/unit/properties_view_spec_spec.rb +31 -0
  80. data/spec/unit/rspec_matchers_spec.rb +124 -0
  81. data/spec/unit/rspec_stub_db_spec.rb +35 -0
  82. data/spec/unit/string_spec.rb +7 -0
  83. data/spec/unit/time_spec.rb +15 -0
  84. data/spec/unit/validation_spec.rb +67 -0
  85. data/spec/unit/view_query_spec.rb +86 -0
  86. data/spec/update_spec.rb +40 -0
  87. data/spec/view_updates_spec.rb +28 -0
  88. metadata +243 -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,15 @@
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, 'as_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.as_json.should == "2009/01/01 09:12:23 +0000"
14
+ end
15
+ 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,86 @@
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>', :reduce => '<reduce_code>'}).query_view!
30
+ end
31
+
32
+ it "should not pass in a reduce key if there is no reduce function" do
33
+ db = mock 'db', :get => {'views' => {}}, :view => nil
34
+
35
+ db.should_receive(:save_doc).with('views' => {'view3' => {'map' => '<map code>'}})
36
+
37
+ CouchPotato::View::ViewQuery.new(db, 'design', :view3 => {:map => '<map code>', :reduce => nil}).query_view!
38
+ end
39
+
40
+ it "should update a view when the reduce function has changed" do
41
+ db = mock 'db', :get => {'views' => {'view4' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}}, :view => nil
42
+ db.should_receive(:save_doc)
43
+ CouchPotato::View::ViewQuery.new(db, 'design', :view4 => {:map => '<map_code>', :reduce => '<new reduce_code>'}).query_view!
44
+ end
45
+
46
+ it "should update a view when the list function has changed" do
47
+ db = mock 'db', :get => {
48
+ 'views' => {'view5' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
49
+ 'lists' => {'list1' => '<list_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 update a view when there wasn't a list function but now there is one" do
56
+ db = mock 'db', :get => {
57
+ 'views' => {'view6' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}
58
+ }, :view => nil
59
+ db.should_receive(:save_doc)
60
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view6 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!
61
+ end
62
+
63
+ it "should not update a view when there is a list function but no list function is passed" do
64
+ db = mock 'db', :get => {
65
+ 'views' => {'view7' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}},
66
+ 'lists' => {'list1' => '<list_code>'}
67
+ }, :view => nil
68
+ db.should_not_receive(:save_doc)
69
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view7 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, {}).query_view!
70
+ end
71
+
72
+ it "should not update a view when there were no lists before and no list function is passed" do
73
+ db = mock 'db', :get => {
74
+ 'views' => {'view8' => {'map' => '<map_code>', 'reduce' => '<reduce_code>'}}
75
+ }, :view => nil
76
+ db.should_not_receive(:save_doc)
77
+ CouchPotato::View::ViewQuery.new(db, 'design', {:view8 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, {}).query_view!
78
+ end
79
+
80
+ it "should query CouchRest directly when querying a list" do
81
+ db = stub('db').as_null_object
82
+ CouchRest.should_receive(:get).with('http://127.0.0.1:5984/couch_potato_test/_design/my_design/_list/list1/view9?key=1')
83
+ CouchPotato::View::ViewQuery.new(db, 'my_design', {:view9 => {:map => '<map_code>', :reduce => '<reduce_code>'}}, :list1 => '<new_list_code>').query_view!(:key => 1)
84
+ end
85
+
86
+ 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,243 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: couch_potato-rails2
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.5.6
6
+ platform: ruby
7
+ authors:
8
+ - Alexander Lang
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-18 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: json
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: couchrest
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 1.0.1
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "2.0"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: timecop
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: tzinfo
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: rake
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id006
82
+ description: Ruby persistence layer for CouchDB
83
+ email: alex@upstre.am
84
+ executables: []
85
+
86
+ extensions: []
87
+
88
+ extra_rdoc_files: []
89
+
90
+ files:
91
+ - .gitignore
92
+ - .rvmrc
93
+ - .travis.yml
94
+ - CHANGES.md
95
+ - CREDITS
96
+ - Gemfile
97
+ - MIT-LICENSE.txt
98
+ - README.md
99
+ - Rakefile
100
+ - couch_potato.gemspec
101
+ - init.rb
102
+ - lib/core_ext/date.rb
103
+ - lib/core_ext/object.rb
104
+ - lib/core_ext/string.rb
105
+ - lib/core_ext/symbol.rb
106
+ - lib/core_ext/time.rb
107
+ - lib/couch_potato.rb
108
+ - lib/couch_potato/database.rb
109
+ - lib/couch_potato/persistence.rb
110
+ - lib/couch_potato/persistence/active_model_compliance.rb
111
+ - lib/couch_potato/persistence/attachments.rb
112
+ - lib/couch_potato/persistence/callbacks.rb
113
+ - lib/couch_potato/persistence/dirty_attributes.rb
114
+ - lib/couch_potato/persistence/ghost_attributes.rb
115
+ - lib/couch_potato/persistence/json.rb
116
+ - lib/couch_potato/persistence/magic_timestamps.rb
117
+ - lib/couch_potato/persistence/properties.rb
118
+ - lib/couch_potato/persistence/simple_property.rb
119
+ - lib/couch_potato/persistence/type_caster.rb
120
+ - lib/couch_potato/railtie.rb
121
+ - lib/couch_potato/rspec.rb
122
+ - lib/couch_potato/rspec/matchers.rb
123
+ - lib/couch_potato/rspec/matchers/json2.js
124
+ - lib/couch_potato/rspec/matchers/list_as_matcher.rb
125
+ - lib/couch_potato/rspec/matchers/map_to_matcher.rb
126
+ - lib/couch_potato/rspec/matchers/print_r.js
127
+ - lib/couch_potato/rspec/matchers/reduce_to_matcher.rb
128
+ - lib/couch_potato/rspec/stub_db.rb
129
+ - lib/couch_potato/validation.rb
130
+ - lib/couch_potato/validation/with_active_model.rb
131
+ - lib/couch_potato/validation/with_validatable.rb
132
+ - lib/couch_potato/version.rb
133
+ - lib/couch_potato/view/base_view_spec.rb
134
+ - lib/couch_potato/view/custom_view_spec.rb
135
+ - lib/couch_potato/view/custom_views.rb
136
+ - lib/couch_potato/view/lists.rb
137
+ - lib/couch_potato/view/model_view_spec.rb
138
+ - lib/couch_potato/view/properties_view_spec.rb
139
+ - lib/couch_potato/view/raw_view_spec.rb
140
+ - lib/couch_potato/view/view_query.rb
141
+ - rails/init.rb
142
+ - rails/reload_classes.rb
143
+ - spec/attachments_spec.rb
144
+ - spec/callbacks_spec.rb
145
+ - spec/create_spec.rb
146
+ - spec/custom_view_spec.rb
147
+ - spec/default_property_spec.rb
148
+ - spec/destroy_spec.rb
149
+ - spec/fixtures/address.rb
150
+ - spec/fixtures/person.rb
151
+ - spec/property_spec.rb
152
+ - spec/rails_spec.rb
153
+ - spec/railtie_spec.rb
154
+ - spec/spec.opts
155
+ - spec/spec_helper.rb
156
+ - spec/unit/active_model_compliance_spec.rb
157
+ - spec/unit/attributes_spec.rb
158
+ - spec/unit/base_view_spec_spec.rb
159
+ - spec/unit/callbacks_spec.rb
160
+ - spec/unit/couch_potato_spec.rb
161
+ - spec/unit/create_spec.rb
162
+ - spec/unit/custom_views_spec.rb
163
+ - spec/unit/database_spec.rb
164
+ - spec/unit/date_spec.rb
165
+ - spec/unit/dirty_attributes_spec.rb
166
+ - spec/unit/initialize_spec.rb
167
+ - spec/unit/json_spec.rb
168
+ - spec/unit/lists_spec.rb
169
+ - spec/unit/model_view_spec_spec.rb
170
+ - spec/unit/properties_view_spec_spec.rb
171
+ - spec/unit/rspec_matchers_spec.rb
172
+ - spec/unit/rspec_stub_db_spec.rb
173
+ - spec/unit/string_spec.rb
174
+ - spec/unit/time_spec.rb
175
+ - spec/unit/validation_spec.rb
176
+ - spec/unit/view_query_spec.rb
177
+ - spec/update_spec.rb
178
+ - spec/view_updates_spec.rb
179
+ has_rdoc: true
180
+ homepage: http://github.com/langalex/couch_potato
181
+ licenses: []
182
+
183
+ post_install_message:
184
+ rdoc_options: []
185
+
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: "0"
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: "0"
200
+ requirements: []
201
+
202
+ rubyforge_project:
203
+ rubygems_version: 1.5.2
204
+ signing_key:
205
+ specification_version: 3
206
+ summary: Ruby persistence layer for CouchDB
207
+ test_files:
208
+ - spec/attachments_spec.rb
209
+ - spec/callbacks_spec.rb
210
+ - spec/create_spec.rb
211
+ - spec/custom_view_spec.rb
212
+ - spec/default_property_spec.rb
213
+ - spec/destroy_spec.rb
214
+ - spec/fixtures/address.rb
215
+ - spec/fixtures/person.rb
216
+ - spec/property_spec.rb
217
+ - spec/rails_spec.rb
218
+ - spec/railtie_spec.rb
219
+ - spec/spec.opts
220
+ - spec/spec_helper.rb
221
+ - spec/unit/active_model_compliance_spec.rb
222
+ - spec/unit/attributes_spec.rb
223
+ - spec/unit/base_view_spec_spec.rb
224
+ - spec/unit/callbacks_spec.rb
225
+ - spec/unit/couch_potato_spec.rb
226
+ - spec/unit/create_spec.rb
227
+ - spec/unit/custom_views_spec.rb
228
+ - spec/unit/database_spec.rb
229
+ - spec/unit/date_spec.rb
230
+ - spec/unit/dirty_attributes_spec.rb
231
+ - spec/unit/initialize_spec.rb
232
+ - spec/unit/json_spec.rb
233
+ - spec/unit/lists_spec.rb
234
+ - spec/unit/model_view_spec_spec.rb
235
+ - spec/unit/properties_view_spec_spec.rb
236
+ - spec/unit/rspec_matchers_spec.rb
237
+ - spec/unit/rspec_stub_db_spec.rb
238
+ - spec/unit/string_spec.rb
239
+ - spec/unit/time_spec.rb
240
+ - spec/unit/validation_spec.rb
241
+ - spec/unit/view_query_spec.rb
242
+ - spec/update_spec.rb
243
+ - spec/view_updates_spec.rb