active_permalink 0.4.0 → 0.5.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df15e663dd9dd5bb8b4b873ccdd92a6d0b116547d143336ed9520bd4ac25ea81
|
4
|
+
data.tar.gz: 3bd4f5b7cdaef63d23ffd393647a4207d5d57c2ded5c98838e92ad91c1b62dcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d14ea28b8b4d5ef42ad0272f3a265c51dba1aa07f42349dcea0ed7c8c35e36c8b416f069e81573ce7e284509d31c7c8f6053d9bdcd925b1475208129f968a0d2
|
7
|
+
data.tar.gz: 1086cd95f88ba1a9d516026fa5376f549209a06b93334efe4a68ae7fc95dd35b53c19e1da2ddaa2f30bda46787c5f92e2633405eb44ae8391d7e6303f1df97c2
|
@@ -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
|
@@ -1,10 +1,12 @@
|
|
1
|
+
require 'any_ascii'
|
2
|
+
|
1
3
|
module ActivePermalink
|
2
4
|
class Generator
|
3
5
|
class << self
|
4
|
-
def generate(record, value, locale = nil)
|
6
|
+
def generate(record, value, locale = nil, raw: false)
|
5
7
|
return if value.nil? && !record.slug_should_generate?
|
6
8
|
|
7
|
-
options = record.permalink_options.merge(locale: locale)
|
9
|
+
options = record.permalink_options.merge(locale: locale, raw: raw)
|
8
10
|
generator = Generator.new(record, options)
|
9
11
|
generator.generate(value)
|
10
12
|
|
@@ -89,7 +91,12 @@ module ActivePermalink
|
|
89
91
|
def slug_from_column
|
90
92
|
@slug_from_column ||= begin
|
91
93
|
value = @new_value.presence || @record.send(@field)
|
92
|
-
value.
|
94
|
+
return if value.blank?
|
95
|
+
|
96
|
+
return value if @options[:raw] == true
|
97
|
+
|
98
|
+
value = AnyAscii.transliterate(value)
|
99
|
+
value.parameterize
|
93
100
|
end
|
94
101
|
end
|
95
102
|
|
@@ -9,25 +9,34 @@ 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
|
25
31
|
|
26
|
-
def _generate_permalink_slug(value)
|
27
|
-
slug_backend.write(value, I18n.locale)
|
32
|
+
def _generate_permalink_slug(value, **options)
|
33
|
+
slug_backend.write(value, I18n.locale, **options)
|
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
|
-
def write(value, locale)
|
53
|
-
|
63
|
+
def write(value, locale, **options)
|
64
|
+
enforce_available_locales!(locale)
|
65
|
+
update_slug(value, locale, **options)
|
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
|
@@ -78,8 +97,8 @@ module ActivePermalink
|
|
78
97
|
permalink.try(:slug)
|
79
98
|
end
|
80
99
|
|
81
|
-
def update_slug(value, locale)
|
82
|
-
Generator.generate(record, value, locale)
|
100
|
+
def update_slug(value, locale, **options)
|
101
|
+
Generator.generate(record, value, locale, **options)
|
83
102
|
@permalinks = record.permalinks.to_a
|
84
103
|
end
|
85
104
|
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,11 @@ module ActivePermalink
|
|
10
10
|
|
11
11
|
before_validation :slug_should_generate!,
|
12
12
|
on: [:create, :update],
|
13
|
-
|
13
|
+
if: :slug_needs_generate?
|
14
|
+
|
15
|
+
def raw_slug=(value)
|
16
|
+
_generate_permalink_slug(value, raw: true)
|
17
|
+
end
|
14
18
|
|
15
19
|
def slug=(value)
|
16
20
|
_generate_permalink_slug(value)
|
@@ -26,6 +30,10 @@ module ActivePermalink
|
|
26
30
|
|
27
31
|
private
|
28
32
|
|
33
|
+
def slug_needs_generate?
|
34
|
+
!slug? && send(:"#{permalink_options[:field]}_changed?")
|
35
|
+
end
|
36
|
+
|
29
37
|
def slug_should_generate!
|
30
38
|
@slug_should_generate = true
|
31
39
|
_generate_permalink_slug(self[:slug])
|
@@ -33,8 +41,8 @@ module ActivePermalink
|
|
33
41
|
@slug_should_generate = false
|
34
42
|
end
|
35
43
|
|
36
|
-
def _generate_permalink_slug(value)
|
37
|
-
Generator.generate(self, value)
|
44
|
+
def _generate_permalink_slug(value, **options)
|
45
|
+
Generator.generate(self, value, **options)
|
38
46
|
end
|
39
47
|
end
|
40
48
|
end
|
data/lib/active_permalink.rb
CHANGED
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonian Guveli
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -45,19 +45,19 @@ dependencies:
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '1.0'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
48
|
+
name: any_ascii
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '0.1'
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '0.1'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: bundler
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,7 +127,7 @@ homepage: https://github.com/hardpixel/active-permalink
|
|
127
127
|
licenses:
|
128
128
|
- MIT
|
129
129
|
metadata: {}
|
130
|
-
post_install_message:
|
130
|
+
post_install_message:
|
131
131
|
rdoc_options: []
|
132
132
|
require_paths:
|
133
133
|
- lib
|
@@ -142,8 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
142
|
- !ruby/object:Gem::Version
|
143
143
|
version: '0'
|
144
144
|
requirements: []
|
145
|
-
rubygems_version: 3.1.
|
146
|
-
signing_key:
|
145
|
+
rubygems_version: 3.1.6
|
146
|
+
signing_key:
|
147
147
|
specification_version: 4
|
148
148
|
summary: Add permalinks to ActiveRecord models
|
149
149
|
test_files: []
|