memories 0.2.5 → 0.2.6
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.markdown +31 -0
- data/README.rdoc +32 -0
- data/lib/memories.rb +1 -0
- data/lib/memories/base.rb +13 -10
- data/lib/memories/versions_proxy.rb +40 -0
- metadata +8 -6
data/README.markdown
CHANGED
|
@@ -115,3 +115,34 @@ at at the first milestone. How do we do that? Simple!
|
|
|
115
115
|
a.revert_to_milestone! 1
|
|
116
116
|
|
|
117
117
|
And now our document properties are back to the where they were when we first published the document.
|
|
118
|
+
|
|
119
|
+
## Attachments
|
|
120
|
+
|
|
121
|
+
By default, memories doesn't version attachments. If you'd like to version attachments, simply call the `remember_attachments!` class method in your
|
|
122
|
+
class definition:
|
|
123
|
+
|
|
124
|
+
class MyDoc < CouchRest::Model::Base
|
|
125
|
+
use_database MY_DB
|
|
126
|
+
include Memories
|
|
127
|
+
|
|
128
|
+
remember_attachments!
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
If you only want specific attachments versioned, pass
|
|
132
|
+
strings and/or regular expressions to this macro. Any attachments
|
|
133
|
+
with matching names will be versioned.
|
|
134
|
+
|
|
135
|
+
class HtmlPage < CouchRest::Model::Base
|
|
136
|
+
use_database MY_DB
|
|
137
|
+
include Memories
|
|
138
|
+
|
|
139
|
+
remember_attachments! "image.png", %r{stylesheets/.*}
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
## Accessing Previous Versions
|
|
143
|
+
|
|
144
|
+
You can access old versions of your document via the "versions" method; it will return a proxy with array-like and hash-like access to previous versions.
|
|
145
|
+
|
|
146
|
+
@doc.versions[1] # ==> returns version 1 of your document
|
|
147
|
+
@doc.versions['rev-1-kjfdsla3289430289432'] # ==> returns version 1 of your document
|
|
148
|
+
@doc.versions[1..20] # ==> returns versions 1 through 20 of your document
|
data/README.rdoc
CHANGED
|
@@ -115,3 +115,35 @@ at at the first milestone. How do we do that? Simple!
|
|
|
115
115
|
a.revert_to_milestone! 1
|
|
116
116
|
|
|
117
117
|
And now our document properties are back to the where they were when we first published the document.
|
|
118
|
+
|
|
119
|
+
== Attachments
|
|
120
|
+
|
|
121
|
+
By default, memories doesn't version attachments. If you'd like to version attachments, simply call the `remember\_attachments!` class method in your
|
|
122
|
+
class definition:
|
|
123
|
+
|
|
124
|
+
class MyDoc < CouchRest::Model::Base
|
|
125
|
+
use_database MY_DB
|
|
126
|
+
include Memories
|
|
127
|
+
|
|
128
|
+
remember_attachments!
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
If you only want specific attachments versioned, pass
|
|
132
|
+
strings and/or regular expressions to this macro. Any attachments
|
|
133
|
+
with matching names will be versioned.
|
|
134
|
+
|
|
135
|
+
class HtmlPage < CouchRest::Model::Base
|
|
136
|
+
use_database MY_DB
|
|
137
|
+
include Memories
|
|
138
|
+
|
|
139
|
+
remember_attachments! "image.png", %r{stylesheets/.*}
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
== Accessing Previous Versions
|
|
144
|
+
|
|
145
|
+
You can access old versions of your document via the "versions" method; it will return a proxy with array-like and hash-like access to previous versions.
|
|
146
|
+
|
|
147
|
+
@doc.versions[1] # ==> returns version 1 of your document
|
|
148
|
+
@doc.versions['rev-1-kjfdsla3289430289432'] # ==> returns version 1 of your document
|
|
149
|
+
@doc.versions[1..20] # ==> returns versions 1 through 20 of your document
|
data/lib/memories.rb
CHANGED
data/lib/memories/base.rb
CHANGED
|
@@ -7,8 +7,7 @@ module Memories
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
base.before_update :add_version_attachment
|
|
10
|
-
base.
|
|
11
|
-
base.after_update :decode_attachments
|
|
10
|
+
base.after_save :decode_attachments
|
|
12
11
|
base.send :extend, ClassMethods
|
|
13
12
|
end
|
|
14
13
|
|
|
@@ -119,7 +118,7 @@ module Memories
|
|
|
119
118
|
# Returns a list of attachments it should remember.
|
|
120
119
|
def attachments_to_remember
|
|
121
120
|
return [] unless self.class.remember_attachments?
|
|
122
|
-
(self[
|
|
121
|
+
(self.database.get(self.id)["_attachments"] || {}).keys.reject do |a|
|
|
123
122
|
a.match(VERSION_REGEX) ||
|
|
124
123
|
!(self.class.remember_attachments.map { |attachment_name_pattern|
|
|
125
124
|
a.match attachment_name_pattern
|
|
@@ -204,6 +203,10 @@ module Memories
|
|
|
204
203
|
version_number rev
|
|
205
204
|
end
|
|
206
205
|
|
|
206
|
+
def versions
|
|
207
|
+
@versions ||= VersionsProxy.new self
|
|
208
|
+
end
|
|
209
|
+
|
|
207
210
|
# Flag the current version as a milestone. You can optionally annotate the milestone by passing a do block to the method.
|
|
208
211
|
# some_article.milestone! do
|
|
209
212
|
# notes "Passed first round of editing."
|
|
@@ -219,7 +222,7 @@ module Memories
|
|
|
219
222
|
end
|
|
220
223
|
|
|
221
224
|
# returns an array of all milestones. Each milestone contains a "version" property (pointing to a specific revision)
|
|
222
|
-
# and an "annotations" property, containing a (
|
|
225
|
+
# and an "annotations" property, containing a (possibly empty) hash of key/value pairs corresponding to any annotations
|
|
223
226
|
# the creator of the milestone decided to write.
|
|
224
227
|
def milestones
|
|
225
228
|
self.milestone_memories
|
|
@@ -238,7 +241,7 @@ module Memories
|
|
|
238
241
|
|
|
239
242
|
def revert(version, revert_type = :soft)
|
|
240
243
|
raise StandardError, "Unknown revert type passed to 'revert' method. Allowed types: :soft, :hard." if revert_type != :soft && revert_type != :hard
|
|
241
|
-
|
|
244
|
+
|
|
242
245
|
if (match = version.to_s.match(VERSION_REGEX)) && match[1]
|
|
243
246
|
version = match[1].to_i
|
|
244
247
|
end
|
|
@@ -264,7 +267,7 @@ module Memories
|
|
|
264
267
|
end
|
|
265
268
|
|
|
266
269
|
def add_version_attachment
|
|
267
|
-
current_document_version = Attachment.new prep_for_versioning(self.database.get(self.id
|
|
270
|
+
current_document_version = Attachment.new prep_for_versioning(self.database.get(self.id)).to_json
|
|
268
271
|
|
|
269
272
|
self.create_attachment(
|
|
270
273
|
:file => current_document_version,
|
|
@@ -275,25 +278,25 @@ module Memories
|
|
|
275
278
|
|
|
276
279
|
def prep_for_versioning(doc)
|
|
277
280
|
versioned_doc = doc.dup
|
|
278
|
-
strip_unversioned_properties versioned_doc
|
|
279
281
|
add_attachment_memories versioned_doc if self.class.remember_attachments?
|
|
282
|
+
strip_unversioned_properties versioned_doc
|
|
280
283
|
versioned_doc
|
|
281
284
|
end
|
|
282
285
|
|
|
283
286
|
def add_attachment_memories(doc)
|
|
284
287
|
doc['attachment_memories'] = {
|
|
285
|
-
'versioned_attachments' => base64_encoded_attachments_to_remember,
|
|
288
|
+
'versioned_attachments' => base64_encoded_attachments_to_remember(doc),
|
|
286
289
|
'known_attachments' => (self.database.get(self.id, :rev => self.rev)["_attachments"] || {}).keys.select {|a| !a.match(VERSION_REGEX)}
|
|
287
290
|
}
|
|
288
291
|
end
|
|
289
292
|
|
|
290
|
-
def base64_encoded_attachments_to_remember
|
|
293
|
+
def base64_encoded_attachments_to_remember(doc)
|
|
291
294
|
encoded_attachments = {}
|
|
292
295
|
attachments_to_remember.each do |a|
|
|
293
296
|
attachment_data = self.read_attachment(a) rescue nil
|
|
294
297
|
if attachment_data
|
|
295
298
|
encoded_attachments[a] = {
|
|
296
|
-
:content_type =>
|
|
299
|
+
:content_type => doc['_attachments'][a]['content_type'],
|
|
297
300
|
:data => Base64.encode64(attachment_data).gsub(/\s/, '')
|
|
298
301
|
}
|
|
299
302
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Memories
|
|
2
|
+
class VersionsProxy
|
|
3
|
+
def initialize(doc)
|
|
4
|
+
@doc = doc
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def count
|
|
8
|
+
@doc.current_version
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def [](arg)
|
|
12
|
+
case arg.class.to_s
|
|
13
|
+
when "Range" then version_range arg
|
|
14
|
+
when "Fixnum" then version_num arg
|
|
15
|
+
when "String" then version_id arg
|
|
16
|
+
else raise "Invalid argument."
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
def version_range(range)
|
|
22
|
+
return [] if range.first > @doc.current_version
|
|
23
|
+
current_version = range.last >= @doc.current_version ? @doc.dup : nil
|
|
24
|
+
last = range.last >= @doc.current_version ? @doc.current_version - 1 : range.last
|
|
25
|
+
versions = (range.first..last).to_a.map {|i| @doc.revert_to(i); @doc.dup}
|
|
26
|
+
versions << current_version if current_version
|
|
27
|
+
versions
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def version_num(num)
|
|
31
|
+
return nil if !num.kind_of?(Fixnum) or num > @doc.current_version or num < 1
|
|
32
|
+
@doc.revert_to(num)
|
|
33
|
+
@doc.dup
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def version_id(id)
|
|
37
|
+
version_num @doc.version_number(id)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
metadata
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: memories
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 27
|
|
5
5
|
prerelease: false
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 2
|
|
9
|
-
-
|
|
10
|
-
version: 0.2.
|
|
9
|
+
- 6
|
|
10
|
+
version: 0.2.6
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Matt Parker
|
|
14
|
+
- Gary Cheong
|
|
14
15
|
autorequire:
|
|
15
16
|
bindir: bin
|
|
16
17
|
cert_chain: []
|
|
17
18
|
|
|
18
|
-
date: 2010-
|
|
19
|
+
date: 2010-12-24 00:00:00 -05:00
|
|
19
20
|
default_executable:
|
|
20
21
|
dependencies:
|
|
21
22
|
- !ruby/object:Gem::Dependency
|
|
@@ -50,14 +51,15 @@ files:
|
|
|
50
51
|
- lib/memories/annotation.rb
|
|
51
52
|
- lib/memories/attachment.rb
|
|
52
53
|
- lib/memories/base.rb
|
|
54
|
+
- lib/memories/versions_proxy.rb
|
|
53
55
|
- README.markdown
|
|
54
56
|
has_rdoc: true
|
|
55
57
|
homepage: http://github.com/moonmaster9000/memories
|
|
56
58
|
licenses: []
|
|
57
59
|
|
|
58
60
|
post_install_message:
|
|
59
|
-
rdoc_options:
|
|
60
|
-
|
|
61
|
+
rdoc_options: []
|
|
62
|
+
|
|
61
63
|
require_paths:
|
|
62
64
|
- lib
|
|
63
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|