vidibus-permalink 1.1.3 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 515aa963b43b3d2cdf4576dfe00e9e8ddee3b819
4
- data.tar.gz: 5d7edb952308577f1d5b0a2893df325bf26d08c8
2
+ SHA256:
3
+ metadata.gz: 51f420dad962971000b45f721fc1179b27e5736dce2b2b8bfa2ca5d058789cea
4
+ data.tar.gz: bdd0f56bb07da5d649b2b9b68e5545f18b9bcfcef7fcdf0ad442e564d0e0436c
5
5
  SHA512:
6
- metadata.gz: eaf165cd78288a6cb4ab0933b4d1c82b6a13954637b0ebb5bbbcf1549187a9b80b370c15e3b56afea9057ea290066bb0018378c489ce584b43a97537d51a420b
7
- data.tar.gz: 426bb22b0fa89969a887b0efc58ba2b2d4b59b3ab3aeed27d8eab310cc203a3137f9555bbc7fd1bf2cd8be91e0c45f4332bfc1c7619b9a08bb6e116e16d65d64
6
+ metadata.gz: 2a0ef6ac2e4225da6aa42abfbc8883999b5194b7e87bfd6e1b1576e4a3a0af70c655fcaa0028e78a342a28a041e7e991fb2bb68fc33eff84a9cb788b3a50826f
7
+ data.tar.gz: 76f55494e22bf48e18ed6f6107b414c3049b638c0e939fd5c6c11b77407d7aadd2d7d1a91f7273d8a4773447eaefb7d2aff745c76433ef88c3ae1b59b512effb
@@ -2,7 +2,7 @@ class Permalink
2
2
  include Mongoid::Document
3
3
  include Mongoid::Timestamps
4
4
 
5
- belongs_to :linkable, polymorphic: true
5
+ belongs_to :linkable, polymorphic: true, autosave: false
6
6
 
7
7
  field :value
8
8
  field :scope, type: Array
@@ -47,7 +47,11 @@ class Permalink
47
47
  if current?
48
48
  self
49
49
  else
50
- Permalink.where(linkable_id: linkable.id, _current: true).first
50
+ Permalink.where({
51
+ linkable_id: linkable.id,
52
+ linkable_type: linkable.class.to_s,
53
+ _current: true
54
+ }).first
51
55
  end
52
56
  end
53
57
  end
@@ -61,14 +65,20 @@ class Permalink
61
65
  class << self
62
66
  # Scope method for finding Permalinks for given object.
63
67
  def for_linkable(object)
64
- where(linkable_id: object.id)
68
+ where(linkable_id: object.id, linkable_type: object.class.to_s)
65
69
  end
66
70
 
67
71
  # Scope method for finding Permalinks for given value.
68
72
  # The value will be sanitized.
69
- def for_value(value, sanitize = true)
70
- value = sanitize(value) if sanitize
71
- where(value: /^#{value}(-\d+)?$/)
73
+ def for_value(value, do_sanitize = true)
74
+ if do_sanitize
75
+ self.or([
76
+ {value: /^#{sanitize(value)}(-\d+)?$/},
77
+ {value: /^#{sanitize(value, true)}(-\d+)?$/}
78
+ ])
79
+ else
80
+ where(value: /^#{value}(-\d+)?$/)
81
+ end
72
82
  end
73
83
 
74
84
  def for_scope(scope)
@@ -83,9 +93,10 @@ class Permalink
83
93
 
84
94
  # Sanitizes string: Remove stopwords and format as permalink.
85
95
  # See Vidibus::CoreExtensions::String for details.
86
- def sanitize(string)
96
+ def sanitize(string, keep_stopwords = false)
87
97
  return if string.blank?
88
- remove_stopwords(string).permalink
98
+ string = remove_stopwords(string) unless keep_stopwords
99
+ string.permalink
89
100
  end
90
101
 
91
102
  def scope_list(scope)
@@ -147,7 +158,11 @@ class Permalink
147
158
  # Sets _current to false on all permalinks of the assigned linkable.
148
159
  def unset_other_current
149
160
  return unless linkable
150
- conditions = {linkable_id: linkable.id, _id: {'$ne' => id}}
161
+ conditions = {
162
+ linkable_id: linkable.id,
163
+ linkable_type: linkable.class.to_s,
164
+ _id: {'$ne' => id}
165
+ }
151
166
  conditions[:scope] = Permalink.scope_list(scope) if scope.present?
152
167
  Permalink.where(conditions).each do |obj|
153
168
  obj.set(_current: false)
@@ -157,7 +172,7 @@ class Permalink
157
172
  # Sets the lastly updated permalink of the assigned linkable as current one.
158
173
  def set_last_current
159
174
  last = Permalink
160
- .where(linkable_id: linkable.id)
175
+ .where(linkable_id: linkable.id, linkable_type: linkable.class.to_s)
161
176
  .order_by(:updated_at.desc)
162
177
  .limit(1)
163
178
  .first
@@ -40,6 +40,18 @@ module Vidibus
40
40
  end
41
41
  end
42
42
 
43
+ # Ensure that a current permalink object exists for this record.
44
+ def ensure_permalink_object
45
+ if permalink_repository
46
+ permalink_object || begin
47
+ obj = permalink_object_by_value(permalink)
48
+ obj.sanitize_value!
49
+ obj.current!
50
+ obj.save
51
+ end
52
+ end
53
+ end
54
+
43
55
  # Returns the defined permalink repository object.
44
56
  def permalink_repository
45
57
  @permalink_repository ||= begin
@@ -102,7 +114,7 @@ module Vidibus
102
114
  end
103
115
 
104
116
  # Initializes a new permalink object and sets permalink attribute.
105
- def set_permalink
117
+ def set_permalink(force = false)
106
118
  begin
107
119
  attribute_names = self.class.permalink_attributes
108
120
  rescue NoMethodError
@@ -115,7 +127,7 @@ module Vidibus
115
127
  changed ||= send("#{name}_changed?")
116
128
  values << send(name)
117
129
  end
118
- return unless permalink.blank? || changed
130
+ return unless permalink.blank? || changed || force
119
131
  value = values.join(' ')
120
132
  if permalink_repository
121
133
  @permalink_object = permalink_object_by_value(value)
@@ -1,5 +1,5 @@
1
1
  module Vidibus
2
2
  module Permalink
3
- VERSION = '1.1.3'
3
+ VERSION = '1.5.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vidibus-permalink
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andre Pankratz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-03 00:00:00.000000000 Z
11
+ date: 2020-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -184,8 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  - !ruby/object:Gem::Version
185
185
  version: 1.3.6
186
186
  requirements: []
187
- rubyforge_project:
188
- rubygems_version: 2.6.11
187
+ rubygems_version: 3.0.6
189
188
  signing_key:
190
189
  specification_version: 4
191
190
  summary: Permalink handling