vidibus-permalink 0.1.2 → 0.1.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/app/models/permalink.rb +12 -10
- data/lib/vidibus/permalink/mongoid.rb +9 -6
- data/lib/vidibus/permalink/version.rb +1 -1
- metadata +4 -4
data/app/models/permalink.rb
CHANGED
@@ -10,7 +10,7 @@ class Permalink
|
|
10
10
|
field :scope, :type => Array
|
11
11
|
field :_current, :type => Boolean, :default => true
|
12
12
|
|
13
|
-
|
13
|
+
after_save :unset_other_current, :if => :current?
|
14
14
|
after_destroy :set_last_current, :if => :current?
|
15
15
|
|
16
16
|
validates :linkable_uuid, :uuid => true
|
@@ -61,7 +61,7 @@ class Permalink
|
|
61
61
|
# Returns true if this permalink is the current one
|
62
62
|
# of the assigned linkable.
|
63
63
|
def current?
|
64
|
-
|
64
|
+
!!_current
|
65
65
|
end
|
66
66
|
|
67
67
|
# Returns the current permalink of the assigned linkable.
|
@@ -75,6 +75,12 @@ class Permalink
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
# Sets this permalink as the current one.
|
79
|
+
# All other permalinks of this linkable will be updated after saving.
|
80
|
+
def current!
|
81
|
+
self._current = true
|
82
|
+
end
|
83
|
+
|
78
84
|
class << self
|
79
85
|
# Scope method for finding Permalinks for given object.
|
80
86
|
def for_linkable(object)
|
@@ -106,7 +112,7 @@ class Permalink
|
|
106
112
|
|
107
113
|
def scope_list(scope)
|
108
114
|
return [] unless scope
|
109
|
-
scope.
|
115
|
+
scope.map {|key, value| "#{key}:#{value}"}
|
110
116
|
end
|
111
117
|
end
|
112
118
|
|
@@ -154,17 +160,13 @@ class Permalink
|
|
154
160
|
@existing[string] ||= Permalink.where(:value => /^#{string}(-\d+)?$/).excludes(:_id => id).to_a
|
155
161
|
end
|
156
162
|
|
157
|
-
# Sets this permalink as the current one and unsets all others.
|
158
|
-
def set_current
|
159
|
-
unset_other_current
|
160
|
-
self._current = true
|
161
|
-
end
|
162
|
-
|
163
163
|
# Sets _current to false on all permalinks of the assigned linkable.
|
164
164
|
def unset_other_current
|
165
165
|
return unless linkable
|
166
|
+
conditions = {:linkable_uuid => linkable_uuid, :_id => {"$ne" => _id}}
|
167
|
+
conditions[:scope] = Permalink.scope_list(scope) if scope.present?
|
166
168
|
collection.update(
|
167
|
-
|
169
|
+
conditions,
|
168
170
|
{"$set" => {:_current => false}},
|
169
171
|
{:multi => true}
|
170
172
|
)
|
@@ -55,13 +55,15 @@ module Vidibus
|
|
55
55
|
@permalink_scope ||= get_scope
|
56
56
|
end
|
57
57
|
|
58
|
-
def find_or_initialize(value, scope)
|
59
|
-
permalink_repository.for_linkable(self).for_value(value).for_scope(scope).first ||
|
60
|
-
permalink_repository.new(:value => value, :scope => scope, :linkable => self)
|
61
|
-
end
|
62
|
-
|
63
58
|
private
|
64
59
|
|
60
|
+
# Returns a existing or new permalink object with wanted value.
|
61
|
+
# The permalink scope is also applied
|
62
|
+
def permalink_object_by_value(value)
|
63
|
+
permalink_repository.for_linkable(self).for_value(value).for_scope(permalink_scope).first ||
|
64
|
+
permalink_repository.new(:value => value, :scope => permalink_scope, :linkable => self)
|
65
|
+
end
|
66
|
+
|
65
67
|
def get_scope
|
66
68
|
scope = self.class.permalink_options[:scope]
|
67
69
|
return unless scope
|
@@ -98,7 +100,8 @@ module Vidibus
|
|
98
100
|
return unless permalink.blank? or changed
|
99
101
|
value = values.join(" ")
|
100
102
|
if permalink_repository
|
101
|
-
@permalink_object =
|
103
|
+
@permalink_object = permalink_object_by_value(value)
|
104
|
+
@permalink_object.current!
|
102
105
|
self.permalink = @permalink_object.value
|
103
106
|
else
|
104
107
|
self.permalink = ::Permalink.sanitize(value)
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vidibus-permalink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andre Pankratz
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-09-
|
18
|
+
date: 2011-09-06 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|