vidibus-versioning 0.1.3 → 0.2.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.
data/README.md
CHANGED
@@ -72,6 +72,14 @@ To apply a version on the current article itself (without persisting it), call `
|
|
72
72
|
article.version!(3) # applies version 3 to the article and returns nil
|
73
73
|
```
|
74
74
|
|
75
|
+
To find out if a version exists, call:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
article.version?(1) # returns true on a fresh object
|
79
|
+
article.version?(2) # returns true if version 2 exists
|
80
|
+
article.version?(3) # returns false if version 3 does not exist
|
81
|
+
```
|
82
|
+
|
75
83
|
It is even possible to apply versioned attributes directly by adding them to the `version` call:
|
76
84
|
|
77
85
|
```ruby
|
@@ -64,6 +64,18 @@ module Vidibus
|
|
64
64
|
self.apply_version!(*args)
|
65
65
|
end
|
66
66
|
|
67
|
+
# Returns true if version number exists.
|
68
|
+
# Argument must be an integer.
|
69
|
+
#
|
70
|
+
def version?(number)
|
71
|
+
raise ArgumentError unless number.is_a?(Integer)
|
72
|
+
if version_number == number
|
73
|
+
true
|
74
|
+
else
|
75
|
+
!!versions.where(:number => number).first
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
67
79
|
# Applies attributes of wanted version on self.
|
68
80
|
# Stores current attributes in a new version.
|
69
81
|
def migrate!(number = nil)
|
@@ -141,8 +153,14 @@ module Vidibus
|
|
141
153
|
def apply_version!(*args)
|
142
154
|
raise ArgumentError if args.empty?
|
143
155
|
set_version_args(*args)
|
144
|
-
|
145
|
-
|
156
|
+
if version_number == version_cache.wanted_version_number
|
157
|
+
version_cache.self_version = true
|
158
|
+
return
|
159
|
+
end
|
160
|
+
version_cache.self_version = false
|
161
|
+
unless version_obj
|
162
|
+
raise VersionNotFoundError.new("version #{version_cache.wanted_version_number} does not exist")
|
163
|
+
end
|
146
164
|
|
147
165
|
self.attributes = version_attributes
|
148
166
|
self.version_number = version_cache.wanted_version_number
|
@@ -199,14 +217,15 @@ module Vidibus
|
|
199
217
|
def set_version_args(*args)
|
200
218
|
version_cache.version_args = args
|
201
219
|
version_cache.wanted_attributes = args.extract_options!
|
202
|
-
|
220
|
+
num = args.first
|
203
221
|
|
204
|
-
version_cache.wanted_version_number = case
|
222
|
+
version_cache.wanted_version_number = case num
|
205
223
|
when :new, 'new' then new_version_number
|
206
224
|
when :next, 'next' then version_number + 1
|
207
225
|
when :previous, 'previous' then version_number - 1
|
208
226
|
else
|
209
|
-
|
227
|
+
version_cache.existing_version_wanted = true
|
228
|
+
num.to_i
|
210
229
|
end
|
211
230
|
|
212
231
|
if version_cache.wanted_version_number < 1
|
@@ -235,7 +254,7 @@ module Vidibus
|
|
235
254
|
if version_cache.wanted_version_number
|
236
255
|
obj = versions.
|
237
256
|
where(:number => version_cache.wanted_version_number).first
|
238
|
-
unless obj || version_cache.self_version
|
257
|
+
unless obj || version_cache.self_version || version_cache.existing_version_wanted
|
239
258
|
# versions.to_a # TODO: prefetch versions before building a new one?
|
240
259
|
obj = versions.build({
|
241
260
|
:number => version_cache.wanted_version_number,
|
@@ -268,6 +287,7 @@ module Vidibus
|
|
268
287
|
def version_cache
|
269
288
|
@version_cache ||= Struct.new(
|
270
289
|
:wanted_version_number,
|
290
|
+
:existing_version_wanted,
|
271
291
|
:wanted_attributes,
|
272
292
|
:new_version_number,
|
273
293
|
:version_obj,
|
@@ -22,11 +22,11 @@ module Vidibus
|
|
22
22
|
scope :timeline, desc(:created_at)
|
23
23
|
|
24
24
|
def past?
|
25
|
-
|
25
|
+
created_at && created_at < Time.now
|
26
26
|
end
|
27
27
|
|
28
28
|
def future?
|
29
|
-
|
29
|
+
created_at && created_at >= Time.now
|
30
30
|
end
|
31
31
|
|
32
32
|
protected
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vidibus-versioning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -185,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
185
185
|
version: '0'
|
186
186
|
segments:
|
187
187
|
- 0
|
188
|
-
hash:
|
188
|
+
hash: 819804143186839926
|
189
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
190
|
none: false
|
191
191
|
requirements:
|