langalex-couch_potato 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/README.md +260 -0
  2. data/VERSION.yml +2 -2
  3. data/init.rb +3 -0
  4. data/lib/core_ext/date.rb +10 -0
  5. data/lib/core_ext/string.rb +15 -0
  6. data/lib/core_ext/time.rb +6 -9
  7. data/lib/couch_potato/database.rb +90 -0
  8. data/lib/couch_potato/persistence/belongs_to_property.rb +1 -1
  9. data/lib/couch_potato/persistence/callbacks.rb +14 -11
  10. data/lib/couch_potato/persistence/dirty_attributes.rb +13 -6
  11. data/lib/couch_potato/persistence/json.rb +9 -14
  12. data/lib/couch_potato/persistence/magic_timestamps.rb +13 -0
  13. data/lib/couch_potato/persistence/properties.rb +10 -8
  14. data/lib/couch_potato/persistence/simple_property.rb +14 -11
  15. data/lib/couch_potato/persistence.rb +11 -165
  16. data/lib/couch_potato/view/base_view_spec.rb +20 -0
  17. data/lib/couch_potato/view/custom_view_spec.rb +26 -0
  18. data/lib/couch_potato/view/custom_views.rb +30 -0
  19. data/lib/couch_potato/view/model_view_spec.rb +39 -0
  20. data/lib/couch_potato/view/properties_view_spec.rb +35 -0
  21. data/lib/couch_potato/view/raw_view_spec.rb +21 -0
  22. data/lib/couch_potato/view/view_query.rb +45 -0
  23. data/lib/couch_potato.rb +23 -6
  24. data/rails/init.rb +7 -0
  25. data/spec/callbacks_spec.rb +40 -43
  26. data/spec/create_spec.rb +9 -60
  27. data/spec/custom_view_spec.rb +93 -19
  28. data/spec/destroy_spec.rb +5 -4
  29. data/spec/property_spec.rb +22 -8
  30. data/spec/spec_helper.rb +12 -14
  31. data/spec/unit/attributes_spec.rb +26 -0
  32. data/spec/unit/create_spec.rb +58 -0
  33. data/spec/{dirty_attributes_spec.rb → unit/dirty_attributes_spec.rb} +31 -13
  34. data/spec/unit/string_spec.rb +13 -0
  35. data/spec/unit/view_query_spec.rb +2 -3
  36. data/spec/update_spec.rb +8 -7
  37. metadata +54 -32
  38. data/README.textile +0 -340
  39. data/lib/couch_potato/active_record/compatibility.rb +0 -9
  40. data/lib/couch_potato/ordering.rb +0 -84
  41. data/lib/couch_potato/persistence/bulk_save_queue.rb +0 -47
  42. data/lib/couch_potato/persistence/collection.rb +0 -51
  43. data/lib/couch_potato/persistence/custom_view.rb +0 -41
  44. data/lib/couch_potato/persistence/external_collection.rb +0 -83
  45. data/lib/couch_potato/persistence/external_has_many_property.rb +0 -72
  46. data/lib/couch_potato/persistence/find.rb +0 -21
  47. data/lib/couch_potato/persistence/finder.rb +0 -65
  48. data/lib/couch_potato/persistence/inline_has_many_property.rb +0 -43
  49. data/lib/couch_potato/persistence/view_query.rb +0 -81
  50. data/lib/couch_potato/versioning.rb +0 -46
  51. data/spec/attributes_spec.rb +0 -42
  52. data/spec/belongs_to_spec.rb +0 -55
  53. data/spec/find_spec.rb +0 -96
  54. data/spec/finder_spec.rb +0 -125
  55. data/spec/has_many_spec.rb +0 -241
  56. data/spec/inline_collection_spec.rb +0 -15
  57. data/spec/ordering_spec.rb +0 -95
  58. data/spec/reload_spec.rb +0 -50
  59. data/spec/unit/external_collection_spec.rb +0 -84
  60. data/spec/unit/finder_spec.rb +0 -10
  61. data/spec/versioning_spec.rb +0 -150
@@ -1,84 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe CouchPotato::Persistence::ExternalCollection, 'all' do
4
- before(:each) do
5
- @collection = CouchPotato::Persistence::ExternalCollection.new Comment, :commenter_id
6
- @collection.owner_id = 3
7
- @finder = stub 'finder'
8
- CouchPotato::Persistence::Finder.stub!(:new).and_return(@finder)
9
- end
10
-
11
- it "should delegate to a new finder" do
12
- @finder.should_receive(:find).with(Comment, {:commenter_id => 3}).and_return([])
13
- @collection.all
14
- end
15
-
16
- it "should search with the given conditions" do
17
- @finder.should_receive(:find).with(Comment, {:commenter_id => 3, :name => 'xyz'}, {}).and_return([])
18
- @collection.all :name => 'xyz'
19
- end
20
-
21
- it "should return the result of the finder" do
22
- result = stub('item', :_id => 1)
23
- @finder.stub!(:find).and_return([result])
24
- @collection.all.should == [result]
25
- end
26
- end
27
-
28
- describe CouchPotato::Persistence::ExternalCollection, 'count' do
29
- before(:each) do
30
- @collection = CouchPotato::Persistence::ExternalCollection.new Comment, :commenter_id
31
- @collection.owner_id = 3
32
- @finder = stub 'finder'
33
- CouchPotato::Persistence::Finder.stub!(:new).and_return(@finder)
34
- end
35
-
36
- it "should delegate to a new finder" do
37
- @finder.should_receive(:count).with(Comment, {:commenter_id => 3}, {})
38
- @collection.count
39
- end
40
-
41
- it "should count with the given conditions" do
42
- @finder.should_receive(:count).with(Comment, {:commenter_id => 3, :name => 'xyz'}, {})
43
- @collection.count :name => 'xyz'
44
- end
45
-
46
- it "should return the result of the finder" do
47
- @finder.stub!(:count).and_return(2)
48
- @collection.count.should == 2
49
- end
50
- end
51
-
52
- describe CouchPotato::Persistence::ExternalCollection, 'dirty?' do
53
- it "should return false if items haven't been loaded" do
54
- CouchPotato::Persistence::ExternalCollection.new(Comment, :commenter_id).should_not be_dirty
55
- end
56
-
57
- it "should return false if items haven't been touched" do
58
- CouchPotato::Persistence::Finder.stub!(:new).and_return(stub('finder', :find => [stub(:item, :dirty? => false, :_id => 1)]))
59
- collection = CouchPotato::Persistence::ExternalCollection.new(Comment, :commenter_id)
60
- collection.items
61
- collection.should_not be_dirty
62
- end
63
-
64
- it "should return true after adding a new item" do
65
- CouchPotato::Persistence::Finder.stub!(:new).and_return(stub('finder', :find => []))
66
- collection = CouchPotato::Persistence::ExternalCollection.new(Comment, :commenter_id)
67
- collection.items << stub(:item, :dirty? => false, :_id => 1)
68
- collection.should be_dirty
69
- end
70
-
71
- it "should return true after removing an item" do
72
- CouchPotato::Persistence::Finder.stub!(:new).and_return(stub('finder', :find => [stub(:item, :dirty? => false, :_id => 1)]))
73
- collection = CouchPotato::Persistence::ExternalCollection.new(Comment, :commenter_id)
74
- collection.items.pop
75
- collection.should be_dirty
76
- end
77
-
78
- it "should return true when an item is dirty" do
79
- CouchPotato::Persistence::Finder.stub!(:new).and_return(stub('finder', :find => [stub(:item, :dirty? => true, :_id => 1)]))
80
- collection = CouchPotato::Persistence::ExternalCollection.new(Comment, :commenter_id)
81
- collection.items
82
- collection.should be_dirty
83
- end
84
- end
@@ -1,10 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe CouchPotato::Persistence::Finder, 'find' do
4
- it "should pass the count parameter to the database" do
5
- database = stub 'database'
6
- ::CouchPotato::Persistence.stub!(:Db).and_return(database)
7
- database.should_receive(:view).with(anything, hash_including(:count => 1)).and_return({'rows' => []})
8
- CouchPotato::Persistence::Finder.new.find Comment, {}, :count => 1
9
- end
10
- end
@@ -1,150 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe CouchPotato::Versioning do
4
- class Document
5
- include CouchPotato::Persistence
6
- include CouchPotato::Versioning
7
-
8
- property :title
9
- validates_presence_of :title
10
- end
11
-
12
- class ConditionDocument
13
- attr_accessor :new_version
14
- include CouchPotato::Persistence
15
- include CouchPotato::Versioning
16
- set_version_condition lambda {|doc| doc.new_version}
17
-
18
- property :title
19
- validates_presence_of :title
20
- end
21
-
22
- before(:each) do
23
- CouchPotato::Persistence.Db.delete!
24
- CouchPotato::Persistence.Db!
25
- end
26
-
27
- describe "create" do
28
- it "should not create a version" do
29
- Document.create! :title => 'first doc'
30
- CouchPotato::Persistence.Db.documents['rows'].size.should == 1
31
- end
32
-
33
- it "should set version to 1" do
34
- Document.create!(:title => 'first doc').version.should == 1
35
- end
36
- end
37
-
38
- describe "save" do
39
- it "should create a new version" do
40
- doc = Document.create! :title => 'first doc'
41
- doc.title = 'new title'
42
- doc.save!
43
- CouchPotato::Persistence.Db.documents['rows'].size.should == 2
44
- end
45
-
46
- it "should store the old attributes in the old version" do
47
- doc = Document.create! :title => 'first doc'
48
- doc.title = 'new title'
49
- doc.save!
50
- CouchPotato::Persistence.Db.get(
51
- CouchPotato::Persistence.Db.documents['rows'].select{|row| row['id'] != doc._id}.first['id']
52
- )['title'].should == 'first doc'
53
- end
54
-
55
- it "should store the old version number in the old version" do
56
- doc = Document.create! :title => 'first doc'
57
- doc.title = 'new title'
58
- id = doc._id
59
- doc.save!
60
- CouchPotato::Persistence.Db.get(
61
- CouchPotato::Persistence.Db.documents['rows'].select{|row| row['id'] != doc._id}.first['id']
62
- )['version'].should == 1
63
- end
64
-
65
- it "should store the new attributes in the new version" do
66
- doc = Document.create! :title => 'first doc'
67
- doc.title = 'new title'
68
- doc.save!
69
- CouchPotato::Persistence.Db.get(doc._id)['title'].should == 'new title'
70
- end
71
-
72
- it "should increase the version" do
73
- doc = Document.create! :title => 'first doc'
74
- doc.title = 'new title'
75
- doc.save!
76
- CouchPotato::Persistence.Db.get(doc._id)['version'].should == 2
77
- end
78
-
79
- it "should not create a new version if condition not met" do
80
- doc = ConditionDocument.create! :title => 'first doc'
81
- doc.new_version = false
82
- doc.title = 'new title'
83
- doc.save!
84
- CouchPotato::Persistence.Db.documents['rows'].size.should == 1
85
- end
86
-
87
- it "should not increase the version if condition not met" do
88
- doc = ConditionDocument.create! :title => 'first doc'
89
- doc.new_version = false
90
- doc.title = 'new title'
91
- doc.save!
92
- CouchPotato::Persistence.Db.get(doc._id)['version'].should == 1
93
- end
94
-
95
- it "should create a new version if condition met" do
96
- doc = ConditionDocument.create! :title => 'first doc'
97
- doc.new_version = true
98
- doc.title = 'new title'
99
- doc.save!
100
- CouchPotato::Persistence.Db.documents['rows'].size.should == 2
101
- end
102
-
103
- it "should increase the version if condition met" do
104
- doc = ConditionDocument.create! :title => 'first doc'
105
- doc.new_version = true
106
- doc.title = 'new title'
107
- doc.save!
108
- CouchPotato::Persistence.Db.get(doc._id)['version'].should == 2
109
- end
110
- end
111
-
112
- it "should load a specific version" do
113
- doc = Document.create! :title => 'first doc'
114
- doc.title = 'new title'
115
- doc.save!
116
- doc.versions(1).version.should == 1
117
- end
118
-
119
- it "should load all versions" do
120
- doc = Document.create! :title => 'first doc'
121
- doc.title = 'new title'
122
- doc.save!
123
- doc.title = 'even newer title'
124
- doc.save!
125
- doc.versions.map(&:version).should == [1, 2, 3]
126
- end
127
-
128
- it "should load the only version" do
129
- doc = Document.create! :title => 'first doc'
130
- doc.versions.map(&:version).should == [1]
131
- end
132
-
133
- it "should load version 1" do
134
- doc = Document.create! :title => 'first doc'
135
- doc.versions(1).version.should == 1
136
- end
137
-
138
- it "should not find versions of other instances" do
139
- doc = Document.create! :title => 'first doc'
140
- doc.title = 'new title'
141
- doc.save!
142
-
143
- doc2 = Document.create! :title => 'first doc2'
144
- doc2.title = 'new title2'
145
- doc2.save!
146
-
147
- doc.versions.map(&:title).should == ['first doc', 'new title']
148
- end
149
-
150
- end