mongoid_revisions 0.0.2 → 0.0.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.
- data/README.md +10 -2
- data/lib/mongoid_revisions/version.rb +1 -1
- data/lib/mongoid_revisions.rb +20 -10
- data/spec/mongoid_revisions/revisions_spec.rb +27 -2
- metadata +1 -1
data/README.md
CHANGED
@@ -43,7 +43,15 @@ Simply call the revise method
|
|
43
43
|
last_comment_revision=@comment.revise
|
44
44
|
```
|
45
45
|
|
46
|
-
to create a new revision for a document. Please note that the original object will be unchanged!
|
46
|
+
to create a new revision for a document. Please note that the original object will be unchanged!
|
47
|
+
|
48
|
+
To create a new branch of a given document, use
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
new_comment=@comment.branch
|
52
|
+
```
|
53
|
+
|
54
|
+
and the returned document will have a different token and will be at revision 0.
|
47
55
|
|
48
56
|
To access all revisitons for a givent document, use
|
49
57
|
|
@@ -61,8 +69,8 @@ to change the tag attribute of the document and save it in a single call.
|
|
61
69
|
|
62
70
|
## Future changes (sort of TODO list)
|
63
71
|
|
72
|
+
- Check if linked relations cloning work for all relation's tipologies
|
64
73
|
- Recursive revision to linked documents
|
65
|
-
- Branching to create a new document at revision a 0 and with a token different from the original
|
66
74
|
|
67
75
|
## Development
|
68
76
|
|
data/lib/mongoid_revisions.rb
CHANGED
@@ -33,24 +33,34 @@ module Mongoid
|
|
33
33
|
|
34
34
|
# CREATE A NEW REVISION FOR THE DOCUMENT
|
35
35
|
def revise
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
self.
|
36
|
+
self._revise_or_branch((self.revision || 1) + 1,self.token)
|
37
|
+
end
|
38
|
+
|
39
|
+
# CREATE A NEW BRANCH
|
40
|
+
def branch
|
41
|
+
self._revise_or_branch(0)
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def _revise_or_branch(revision,token=nil)
|
47
|
+
new = self.class.create self.attributes.except("_id")
|
48
|
+
new._token = token
|
49
|
+
new._revision = revision
|
50
|
+
new.tag = "#{new.revision}.0.0"
|
51
|
+
new.save
|
52
|
+
self.relations.each do |relation|
|
42
53
|
metadata = self.class.reflect_on_association(relation[0])
|
43
54
|
metadata.class_name.constantize.where(metadata.foreign_key.to_sym=>self.id).each do |child|
|
44
55
|
new_child = metadata.class_name.constantize.create child.attributes.except("_id")
|
45
56
|
new_child.revision = child.revision+1
|
46
57
|
new_child.tag = "#{new_child.revision}.0.0"
|
47
|
-
|
58
|
+
new_child[metadata.foreign_key.to_sym]=new.id
|
48
59
|
new_child.save
|
49
60
|
end
|
50
61
|
end
|
51
|
-
|
52
|
-
|
53
|
-
protected
|
62
|
+
new
|
63
|
+
end
|
54
64
|
|
55
65
|
def _revision=(rev)
|
56
66
|
self[:revision]=rev
|
@@ -65,7 +65,7 @@ describe Mongoid::Revisions do
|
|
65
65
|
|
66
66
|
describe "when I want a new revision" do
|
67
67
|
before :all do
|
68
|
-
@project.revise
|
68
|
+
@new_revised_project = @project.revise
|
69
69
|
end
|
70
70
|
|
71
71
|
it "has 2 revisions" do
|
@@ -80,6 +80,10 @@ describe Mongoid::Revisions do
|
|
80
80
|
@project.revisions.last.revision.should==1
|
81
81
|
end
|
82
82
|
|
83
|
+
it "returned object should be last revision" do
|
84
|
+
@project.revisions.last.should==@new_revised_project
|
85
|
+
end
|
86
|
+
|
83
87
|
it "last revision has the default tag" do
|
84
88
|
@project.revisions.last.tag.should=="1.0.0"
|
85
89
|
end
|
@@ -93,7 +97,6 @@ describe Mongoid::Revisions do
|
|
93
97
|
end
|
94
98
|
|
95
99
|
it "last revision has a single milestone" do
|
96
|
-
#puts @project.revisions.last.inspect
|
97
100
|
@project.revisions.last.milestones.count.should==1
|
98
101
|
end
|
99
102
|
end
|
@@ -107,4 +110,26 @@ describe Mongoid::Revisions do
|
|
107
110
|
@project.revisions.count.should==(count+2)
|
108
111
|
end
|
109
112
|
end
|
113
|
+
|
114
|
+
describe "when I want a new branch" do
|
115
|
+
before :all do
|
116
|
+
@new_project = @project.branch
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should be at revision 0" do
|
120
|
+
@new_project.revision.should==0
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should change token" do
|
124
|
+
@new_project.token.should_not==@project.token
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should have 1 milestone" do
|
128
|
+
@new_project.milestones.count.should==1
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should have 1 revision" do
|
132
|
+
@new_project.revisions.count.should==1
|
133
|
+
end
|
134
|
+
end
|
110
135
|
end
|