decidim-term_customizer 0.17.0 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -8
  3. data/app/assets/config/translation_sets_admin_manifest.js +1 -0
  4. data/app/assets/javascripts/decidim/term_customizer/admin/translation_sets_admin.js.es6 +3 -1
  5. data/app/assets/javascripts/decidim/term_customizer/admin/translations_admin.js.es6 +6 -1
  6. data/app/commands/decidim/term_customizer/admin/create_translation.rb +3 -0
  7. data/app/commands/decidim/term_customizer/admin/destroy_translations.rb +3 -0
  8. data/app/commands/decidim/term_customizer/admin/duplicate_translation_set.rb +61 -0
  9. data/app/commands/decidim/term_customizer/admin/import_set_translations.rb +3 -0
  10. data/app/commands/decidim/term_customizer/admin/import_translation_keys.rb +3 -0
  11. data/app/commands/decidim/term_customizer/admin/update_translation.rb +8 -3
  12. data/app/controllers/decidim/term_customizer/admin/add_translations_controller.rb +2 -1
  13. data/app/controllers/decidim/term_customizer/admin/translation_sets_controller.rb +29 -7
  14. data/app/controllers/decidim/term_customizer/admin/translations_controller.rb +21 -4
  15. data/app/controllers/decidim/term_customizer/admin/translations_destroys_controller.rb +4 -1
  16. data/app/forms/decidim/term_customizer/admin/translations_destroy_form.rb +3 -3
  17. data/app/views/decidim/term_customizer/admin/add_translations/index.html.erb +1 -1
  18. data/app/views/decidim/term_customizer/admin/translation_sets/_form.html.erb +2 -2
  19. data/app/views/decidim/term_customizer/admin/translation_sets/index.html.erb +8 -0
  20. data/app/views/decidim/term_customizer/admin/translations/_export_dropdown.html.erb +1 -1
  21. data/app/views/decidim/term_customizer/admin/translations/_form.html.erb +1 -1
  22. data/app/views/decidim/term_customizer/admin/translations/index.html.erb +2 -2
  23. data/app/views/decidim/term_customizer/admin/translations/new_import.html.erb +1 -1
  24. data/app/views/decidim/term_customizer/admin/translations_destroys/new.html.erb +1 -1
  25. data/config/locales/ca.yml +8 -1
  26. data/config/locales/en.yml +8 -1
  27. data/config/locales/es.yml +8 -1
  28. data/config/locales/fi.yml +8 -1
  29. data/config/locales/fr.yml +9 -2
  30. data/config/locales/sv.yml +8 -1
  31. data/lib/decidim/term_customizer.rb +17 -0
  32. data/lib/decidim/term_customizer/admin_engine.rb +2 -1
  33. data/lib/decidim/term_customizer/context.rb +11 -0
  34. data/lib/decidim/term_customizer/context/base.rb +33 -0
  35. data/lib/decidim/term_customizer/context/controller_context.rb +31 -0
  36. data/lib/decidim/term_customizer/context/job_context.rb +53 -0
  37. data/lib/decidim/term_customizer/engine.rb +10 -29
  38. data/lib/decidim/term_customizer/loader.rb +4 -3
  39. data/lib/decidim/term_customizer/plural_forms_form.rb +23 -0
  40. data/lib/decidim/term_customizer/plural_forms_manager.rb +103 -0
  41. data/lib/decidim/term_customizer/version.rb +2 -2
  42. metadata +22 -16
@@ -57,9 +57,10 @@ module Decidim
57
57
  # the resolver.
58
58
  def clear_cache
59
59
  Rails.cache.delete_matched("#{cache_key_base}/*")
60
- rescue NotImplementedError
61
- # Some cache store, such as `ActiveSupport::Cache::MemCacheStore` do not
62
- # support `delete_matched`. Therefore, clear all the possibly existing
60
+ rescue NotImplementedError, NoMethodError
61
+ # Some cache store, such as `ActiveSupport::Cache::MemCacheStore` or
62
+ # `ActiveSupport::Cache::DalliStore` do not support `delete_matched`.
63
+ # Therefore, clear all the possibly existing
63
64
  # cache keys manually for each space and component.
64
65
 
65
66
  # Clear all the "organization" translation keys.
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TermCustomizer
5
+ module PluralFormsForm
6
+ private
7
+
8
+ def create_plural_forms(translations)
9
+ plural_forms_manager.fill!(translations)
10
+ end
11
+
12
+ def destroy_plural_forms(translations)
13
+ plural_forms_manager.destroy!(translations)
14
+ end
15
+
16
+ def plural_forms_manager
17
+ @plural_forms_manager ||= TermCustomizer::PluralFormsManager.new(
18
+ form.current_organization
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module TermCustomizer
5
+ # Checks that all the plural forms are in the database for the given keys.
6
+ class PluralFormsManager
7
+ attr_reader :organization
8
+
9
+ @plural_keys = [:zero, :one, :few, :other]
10
+
11
+ class << self
12
+ attr_accessor :plural_keys
13
+ end
14
+
15
+ def initialize(organization)
16
+ @organization = organization
17
+ @default_locale = organization.default_locale
18
+ end
19
+
20
+ def fill!(translations)
21
+ each_plural_form(translations) do |translation, key|
22
+ add_locales_for!(translation, key)
23
+ end
24
+ end
25
+
26
+ def destroy!(translations)
27
+ each_plural_form(translations) do |translation, key|
28
+ destroy_locales_for!(translation, key)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ attr_reader :default_locale
35
+
36
+ def each_plural_form(translations)
37
+ keys = self.class.plural_keys.map(&:to_s)
38
+ translations.each do |tr|
39
+ # Check that the last part of the translation key matches with some
40
+ # of the plural translation keys.
41
+ next unless tr.key =~ /\.(#{keys.join("|")})$/
42
+
43
+ parts = tr.key.split(".")
44
+ plural_part = parts.pop
45
+ base_part = parts.join(".")
46
+
47
+ # If it's not a hash, it's not a plural translation
48
+ next unless I18n.exists?(base_part, default_locale)
49
+ next unless I18n.t(base_part, locale: default_locale).is_a?(Hash)
50
+
51
+ keys.each do |plural_key|
52
+ # Do not check for the translation itself
53
+ next if plural_part == plural_key
54
+
55
+ full_plural_key = "#{base_part}.#{plural_key}"
56
+
57
+ # Check that the translation actually exists, no need to process if
58
+ # it does not exist.
59
+ next unless I18n.exists?(full_plural_key, default_locale)
60
+
61
+ yield tr, full_plural_key
62
+ end
63
+ end
64
+ end
65
+
66
+ def add_locales_for!(translation, target_key)
67
+ organization.available_locales.each do |locale|
68
+ # Skip adding the plural form for the translation itself
69
+ next if target_key == translation.key
70
+
71
+ # Check that the translation is not already added in the set
72
+ next if translation.translation_set.translations.where(
73
+ key: target_key,
74
+ locale: locale
75
+ ).any?
76
+
77
+ # Add the plural form
78
+ translation.translation_set.translations.create!(
79
+ key: target_key,
80
+ locale: locale,
81
+ value: I18n.t(target_key, locale: locale, default: "")
82
+ )
83
+ end
84
+ end
85
+
86
+ def destroy_locales_for!(translation, target_key)
87
+ organization.available_locales.each do |locale|
88
+ # Skip deleting the plural form for the translation itself
89
+ next if target_key == translation.key
90
+
91
+ # Find the plural form the plural form
92
+ target = translation.translation_set.translations.find_by(
93
+ key: target_key,
94
+ locale: locale
95
+ )
96
+ next unless target
97
+
98
+ target.destroy!
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Decidim
4
4
  module TermCustomizer
5
- VERSION = "0.17.0"
6
- DECIDIM_VERSION = "~> 0.17.0"
5
+ VERSION = "0.20.0"
6
+ DECIDIM_VERSION = "~> 0.20.0"
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-term_customizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antti Hukkanen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-28 00:00:00.000000000 Z
11
+ date: 2021-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.17.0
19
+ version: 0.20.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.17.0
26
+ version: 0.20.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: decidim-core
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.17.0
33
+ version: 0.20.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.17.0
40
+ version: 0.20.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dalli
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -64,56 +64,56 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.17.0
67
+ version: 0.20.0
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 0.17.0
74
+ version: 0.20.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: decidim-dev
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: 0.17.0
81
+ version: 0.20.0
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 0.17.0
88
+ version: 0.20.0
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: decidim-participatory_processes
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: 0.17.0
95
+ version: 0.20.0
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: 0.17.0
102
+ version: 0.20.0
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: decidim-proposals
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: 0.17.0
109
+ version: 0.20.0
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: 0.17.0
116
+ version: 0.20.0
117
117
  description: Adds a UI to customize the terms and limit the customizations to specific
118
118
  places.
119
119
  email:
@@ -135,6 +135,7 @@ files:
135
135
  - app/commands/decidim/term_customizer/admin/create_translation.rb
136
136
  - app/commands/decidim/term_customizer/admin/create_translation_set.rb
137
137
  - app/commands/decidim/term_customizer/admin/destroy_translations.rb
138
+ - app/commands/decidim/term_customizer/admin/duplicate_translation_set.rb
138
139
  - app/commands/decidim/term_customizer/admin/import_set_translations.rb
139
140
  - app/commands/decidim/term_customizer/admin/import_translation_keys.rb
140
141
  - app/commands/decidim/term_customizer/admin/update_translation.rb
@@ -190,6 +191,10 @@ files:
190
191
  - lib/decidim/term_customizer.rb
191
192
  - lib/decidim/term_customizer/admin.rb
192
193
  - lib/decidim/term_customizer/admin_engine.rb
194
+ - lib/decidim/term_customizer/context.rb
195
+ - lib/decidim/term_customizer/context/base.rb
196
+ - lib/decidim/term_customizer/context/controller_context.rb
197
+ - lib/decidim/term_customizer/context/job_context.rb
193
198
  - lib/decidim/term_customizer/engine.rb
194
199
  - lib/decidim/term_customizer/i18n_backend.rb
195
200
  - lib/decidim/term_customizer/import.rb
@@ -202,6 +207,8 @@ files:
202
207
  - lib/decidim/term_customizer/import/readers/json.rb
203
208
  - lib/decidim/term_customizer/import/readers/xls.rb
204
209
  - lib/decidim/term_customizer/loader.rb
210
+ - lib/decidim/term_customizer/plural_forms_form.rb
211
+ - lib/decidim/term_customizer/plural_forms_manager.rb
205
212
  - lib/decidim/term_customizer/resolver.rb
206
213
  - lib/decidim/term_customizer/test/factories.rb
207
214
  - lib/decidim/term_customizer/translation_directory.rb
@@ -229,8 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
236
  - !ruby/object:Gem::Version
230
237
  version: '0'
231
238
  requirements: []
232
- rubyforge_project:
233
- rubygems_version: 2.7.6
239
+ rubygems_version: 3.0.3
234
240
  signing_key:
235
241
  specification_version: 4
236
242
  summary: Provides possibility to customize Decidim's localized terms.