active_permalink 0.4.0 → 0.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
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b035a60dc56c8501fd344655442f7b6e09c8c03657e99058c6690e2849a4b97
|
4
|
+
data.tar.gz: 25d2e648c1f8147d7b05cd20ebabc4567c9dd1a303977dbeae51efa584377055
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 697f482ff529dfc72707ac3701d1cd2a33ec516477c7454e6b1599bd629fa81a6a9de37cbbb9ba706b49cb158fe2bdd1c31cfaa4882aa94e012e3bcbef1c05d5
|
7
|
+
data.tar.gz: 509f6ea30cb4cdda4fbd7f565024f17c79099b50ebad9ef49b4a2dabd07408c5bffaf40ef0bf39fe15ea0d81a758763907c3bfa4c143aacba8801bbac2af55b1
|
@@ -9,16 +9,18 @@ module ActivePermalink
|
|
9
9
|
config_accessor(:localized) { false }
|
10
10
|
config_accessor(:locale_column) { :locale }
|
11
11
|
config_accessor(:locale_accessors) { true }
|
12
|
+
config_accessor(:fallthrough_accessors) { false }
|
12
13
|
config_accessor(:fallbacks) { false }
|
13
14
|
|
14
15
|
def options_for(**options)
|
15
16
|
options.reverse_merge(
|
16
|
-
class_name:
|
17
|
-
querying:
|
18
|
-
localized:
|
19
|
-
locale_column:
|
20
|
-
locale_accessors:
|
21
|
-
|
17
|
+
class_name: class_name,
|
18
|
+
querying: querying,
|
19
|
+
localized: localized,
|
20
|
+
locale_column: locale_column,
|
21
|
+
locale_accessors: locale_accessors,
|
22
|
+
fallthrough_accessors: fallthrough_accessors,
|
23
|
+
fallbacks: fallbacks
|
22
24
|
)
|
23
25
|
end
|
24
26
|
end
|
@@ -9,16 +9,22 @@ module ActivePermalink
|
|
9
9
|
|
10
10
|
alias permalink_reader slug_backend
|
11
11
|
|
12
|
-
def slug?
|
13
|
-
slug_backend.exists?(I18n.locale)
|
12
|
+
def slug?(locale: nil)
|
13
|
+
slug_backend.exists?(locale || I18n.locale)
|
14
14
|
end
|
15
15
|
|
16
|
-
def slug
|
17
|
-
slug_backend.read(I18n.locale)
|
16
|
+
def slug(locale: nil)
|
17
|
+
slug_backend.read(locale || I18n.locale)
|
18
|
+
end
|
19
|
+
|
20
|
+
def slug=(value, locale: nil)
|
21
|
+
slug_backend.write(value, locale || I18n.locale)
|
18
22
|
end
|
19
23
|
|
20
24
|
if permalink_options[:locale_accessors]
|
21
25
|
include SlugLocaleAccessors
|
26
|
+
elsif permalink_options[:fallthrough_accessors]
|
27
|
+
include SlugFallthroughAccessors
|
22
28
|
end
|
23
29
|
|
24
30
|
private
|
@@ -28,6 +34,9 @@ module ActivePermalink
|
|
28
34
|
end
|
29
35
|
end
|
30
36
|
|
37
|
+
class InvalidLocale < I18n::InvalidLocale
|
38
|
+
end
|
39
|
+
|
31
40
|
class PermalinkBackend
|
32
41
|
attr_reader :record, :permalinks, :options
|
33
42
|
|
@@ -42,19 +51,29 @@ module ActivePermalink
|
|
42
51
|
end
|
43
52
|
|
44
53
|
def exists?(locale)
|
54
|
+
enforce_available_locales!(locale)
|
45
55
|
find_permalink(locale).present?
|
46
56
|
end
|
47
57
|
|
48
58
|
def read(locale)
|
59
|
+
enforce_available_locales!(locale)
|
49
60
|
find_slug(locale)
|
50
61
|
end
|
51
62
|
|
52
63
|
def write(value, locale)
|
64
|
+
enforce_available_locales!(locale)
|
53
65
|
update_slug(value, locale)
|
54
66
|
end
|
55
67
|
|
56
68
|
private
|
57
69
|
|
70
|
+
def enforce_available_locales!(locale)
|
71
|
+
return unless I18n.enforce_available_locales
|
72
|
+
return if I18n.available_locales.include?(locale.to_sym)
|
73
|
+
|
74
|
+
raise InvalidLocale.new(locale)
|
75
|
+
end
|
76
|
+
|
58
77
|
def locale_column
|
59
78
|
@options[:locale_column]
|
60
79
|
end
|
@@ -103,5 +122,27 @@ module ActivePermalink
|
|
103
122
|
end
|
104
123
|
end
|
105
124
|
end
|
125
|
+
|
126
|
+
module SlugFallthroughAccessors
|
127
|
+
extend ActiveSupport::Concern
|
128
|
+
|
129
|
+
included do
|
130
|
+
method_name_regex = /\Aslug_([a-z]{2}(_[a-z]{2})?)(=?|\??)\z/.freeze
|
131
|
+
|
132
|
+
define_method :method_missing do |method_name, *arguments, **options, &block|
|
133
|
+
if method_name =~ method_name_regex
|
134
|
+
locale, suffix = $1.split('_')
|
135
|
+
locale = "#{locale}-#{suffix.upcase}" if suffix
|
136
|
+
public_send("slug#{$3}", *arguments, **options, locale: locale.to_sym)
|
137
|
+
else
|
138
|
+
super(method_name, *arguments, &block)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
define_method :respond_to_missing? do |method_name, include_private = false|
|
143
|
+
(method_name =~ method_name_regex) || super(method_name, include_private)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
106
147
|
end
|
107
148
|
end
|
@@ -10,7 +10,7 @@ module ActivePermalink
|
|
10
10
|
|
11
11
|
before_validation :slug_should_generate!,
|
12
12
|
on: [:create, :update],
|
13
|
-
|
13
|
+
if: :slug_needs_generate?
|
14
14
|
|
15
15
|
def slug=(value)
|
16
16
|
_generate_permalink_slug(value)
|
@@ -26,6 +26,10 @@ module ActivePermalink
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
+
def slug_needs_generate?
|
30
|
+
!slug? && send(:"#{permalink_options[:field]}_changed?")
|
31
|
+
end
|
32
|
+
|
29
33
|
def slug_should_generate!
|
30
34
|
@slug_should_generate = true
|
31
35
|
_generate_permalink_slug(self[:slug])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_permalink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonian Guveli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|