vidibus-versioning 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/vidibus/versioning/_version.rb +1 -1
- data/lib/vidibus/versioning/mongoid.rb +22 -15
- metadata +3 -3
@@ -13,6 +13,7 @@ module Vidibus
|
|
13
13
|
field :version_updated_at, :type => Time
|
14
14
|
|
15
15
|
after_initialize :original_attributes
|
16
|
+
after_initialize :set_version_updated_at, :unless => :version_updated_at
|
16
17
|
before_update :reset_version_cache
|
17
18
|
|
18
19
|
mattr_accessor :versioned_attributes, :unversioned_attributes, :versioning_options
|
@@ -24,11 +25,7 @@ module Vidibus
|
|
24
25
|
# If no versioned attributes have been defined on class level,
|
25
26
|
# all attributes will be returned except the unversioned ones.
|
26
27
|
def versioned_attributes
|
27
|
-
|
28
|
-
attributes.only(self.class.versioned_attributes)
|
29
|
-
else
|
30
|
-
attributes.except(self.class.unversioned_attributes)
|
31
|
-
end
|
28
|
+
filter_versioned_attributes(attributes)
|
32
29
|
end
|
33
30
|
end
|
34
31
|
|
@@ -130,11 +127,6 @@ module Vidibus
|
|
130
127
|
version_obj and version_obj.new_record?
|
131
128
|
end
|
132
129
|
|
133
|
-
# Returns the time when versioned attributes have been updated.
|
134
|
-
def version_updated_at
|
135
|
-
read_attribute(:version_updated_at) || updated_at
|
136
|
-
end
|
137
|
-
|
138
130
|
protected
|
139
131
|
|
140
132
|
# Applies version on self. Returns nil
|
@@ -170,10 +162,21 @@ module Vidibus
|
|
170
162
|
# TODO: Setting the following line will cause DelayedJob to loop endlessly. The same should happen if an embedded document is defined as versioned_attribute!
|
171
163
|
# original_attributes.merge(version_obj.versioned_attributes).merge(version_cache.wanted_attributes.stringify_keys!)
|
172
164
|
|
173
|
-
Hash[*self.class.fields.keys.zip([]).flatten].
|
174
|
-
|
175
|
-
|
176
|
-
|
165
|
+
a = Hash[*self.class.fields.keys.zip([]).flatten]. # ensure nil fields are included as well
|
166
|
+
merge(version_obj.versioned_attributes) # add version's attributes
|
167
|
+
filter_versioned_attributes(a). # take versioned attributes only
|
168
|
+
merge(version_cache.wanted_attributes.stringify_keys!) # add options provided with #version call
|
169
|
+
end
|
170
|
+
|
171
|
+
# Returns versioned attributes from input by
|
172
|
+
# including defined attributes only or
|
173
|
+
# removing unversioned ones.
|
174
|
+
def filter_versioned_attributes(input)
|
175
|
+
if self.class.versioned_attributes.any?
|
176
|
+
input.only(self.class.versioned_attributes)
|
177
|
+
else
|
178
|
+
input.except(self.class.unversioned_attributes)
|
179
|
+
end
|
177
180
|
end
|
178
181
|
|
179
182
|
# Sets instance variables used for versioning.
|
@@ -224,7 +227,7 @@ module Vidibus
|
|
224
227
|
obj
|
225
228
|
else
|
226
229
|
editing_time = self.class.versioning_options[:editing_time]
|
227
|
-
if !editing_time or version_updated_at <= (Time.now-editing_time.to_i) or
|
230
|
+
if !editing_time or version_updated_at <= (Time.now-editing_time.to_i) or updated_at > Time.now # allow future versions
|
228
231
|
versions.build(:created_at => updated_at_was)
|
229
232
|
end
|
230
233
|
end
|
@@ -290,6 +293,10 @@ module Vidibus
|
|
290
293
|
@original_attributes = versioned_attributes
|
291
294
|
@version_cache = nil
|
292
295
|
end
|
296
|
+
|
297
|
+
def set_version_updated_at
|
298
|
+
self.version_updated_at ||= updated_at || Time.now
|
299
|
+
end
|
293
300
|
end
|
294
301
|
end
|
295
302
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vidibus-versioning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andre Pankratz
|