lit 0.4.0.pre.alpha.1 → 0.4.0.pre.alpha.2
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 +4 -4
- data/app/controllers/lit/localizations_controller.rb +7 -1
- data/app/models/lit/base.rb +38 -0
- data/app/models/lit/locale.rb +1 -1
- data/app/models/lit/localization.rb +7 -4
- data/app/models/lit/localization_key.rb +13 -4
- data/lib/lit/cache.rb +29 -11
- data/lib/lit/i18n_backend.rb +2 -4
- data/lib/lit/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2593f6821f5b28b0ac65d0bd7b746fb117ceca9a
|
4
|
+
data.tar.gz: f5c0079a74026f528f1cab00f50e4cd52bd6d2ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a916d4011baf37c64edc6f5f900b08eff704621f8ec32ea82b82fa005115341fdfcf8f5503d80714a36e0e1d417b52e51a239cc95259fbcc898754e3c323f1f
|
7
|
+
data.tar.gz: cbc1c7c864fc53dacf1909353cbfab6b087a1c7e9ef5a4dc417f491a911595f325796118c12cfe6dcede0bdeffe2c25b25853eb5fa7c48c3fbf836f21f56b0fe
|
@@ -15,7 +15,13 @@ module Lit
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def update
|
18
|
-
|
18
|
+
# Wrapping it in a transaction leverages the fact that @localization's
|
19
|
+
# :after_commit callback is then executed AFTER whatever's done in
|
20
|
+
# #after_update_operations. So it'll first set :is_changed to true
|
21
|
+
# and then it will be properly read in the cache setting routine.
|
22
|
+
@localization.transaction do
|
23
|
+
after_update_operations if @localization.update_attributes(clear_params)
|
24
|
+
end
|
19
25
|
respond_to do |f|
|
20
26
|
f.js
|
21
27
|
f.json do
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Lit::Base < ActiveRecord::Base
|
2
|
+
self.abstract_class = true
|
3
|
+
|
4
|
+
before_save :mark_for_retry_on_create, on: :create
|
5
|
+
before_save :mark_for_retry_on_update, on: :update
|
6
|
+
|
7
|
+
attr_accessor :retried_created, :retried_updated
|
8
|
+
|
9
|
+
def mark_for_retry_on_create
|
10
|
+
@will_retry_create = true
|
11
|
+
end
|
12
|
+
|
13
|
+
def mark_for_retry_on_update
|
14
|
+
@will_retry_update = true
|
15
|
+
end
|
16
|
+
|
17
|
+
after_rollback :retry_lit_model_save
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def retry_lit_model_save
|
22
|
+
retry_on_create if instance_variable_defined?(:@will_retry_create) && @will_retry_create
|
23
|
+
retry_on_update if instance_variable_defined?(:@will_retry_update) && @will_retry_update
|
24
|
+
end
|
25
|
+
|
26
|
+
def retry_on_create
|
27
|
+
return if self.retried_created
|
28
|
+
self.retried_created = true
|
29
|
+
self.class.create! attributes.merge(retried_created: true)
|
30
|
+
end
|
31
|
+
|
32
|
+
def retry_on_update
|
33
|
+
return if self.retried_updated
|
34
|
+
self.retried_updated = true
|
35
|
+
update! attributes.merge(retried_updated: true)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
data/app/models/lit/locale.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Lit
|
2
|
-
class Localization <
|
2
|
+
class Localization < Lit::Base
|
3
3
|
serialize :translated_value
|
4
4
|
serialize :default_value
|
5
5
|
|
@@ -26,9 +26,11 @@ module Lit
|
|
26
26
|
delegate :is_deleted, to: :localization_key
|
27
27
|
|
28
28
|
## VALIDATIONS
|
29
|
-
validates :locale, presence: true
|
29
|
+
validates :locale, :localization_key, presence: true
|
30
30
|
|
31
31
|
## ACCESSORS
|
32
|
+
attr_accessor :full_key_str
|
33
|
+
|
32
34
|
unless defined?(::ActionController::StrongParameters)
|
33
35
|
attr_accessible :translated_value, :locale_id
|
34
36
|
end
|
@@ -44,7 +46,7 @@ module Lit
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def full_key
|
47
|
-
[locale.locale, localization_key.localization_key].join('.')
|
49
|
+
full_key_str || [locale.locale, localization_key.localization_key].join('.')
|
48
50
|
end
|
49
51
|
|
50
52
|
def translation
|
@@ -74,7 +76,7 @@ module Lit
|
|
74
76
|
def update_default_value(value)
|
75
77
|
return true if persisted? && default_value == value
|
76
78
|
if persisted?
|
77
|
-
|
79
|
+
update(default_value: value)
|
78
80
|
else
|
79
81
|
self.default_value = value
|
80
82
|
save!
|
@@ -92,5 +94,6 @@ module Lit
|
|
92
94
|
translated_value = translated_value_was || default_value
|
93
95
|
localization_versions.new(translated_value: translated_value)
|
94
96
|
end
|
97
|
+
|
95
98
|
end
|
96
99
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Lit
|
2
|
-
class LocalizationKey <
|
2
|
+
class LocalizationKey < Lit::Base
|
3
3
|
attr_accessor :interpolated_key
|
4
4
|
|
5
5
|
## SCOPES
|
@@ -31,6 +31,7 @@ module Lit
|
|
31
31
|
|
32
32
|
## BEFORE AND AFTER
|
33
33
|
after_commit :check_completed, on: :update
|
34
|
+
after_commit :remove_from_cache, on: :destroy
|
34
35
|
|
35
36
|
def to_s
|
36
37
|
localization_key
|
@@ -75,9 +76,13 @@ module Lit
|
|
75
76
|
ActiveRecord::Base.transaction do
|
76
77
|
update is_deleted: true
|
77
78
|
change_all_completed
|
78
|
-
|
79
|
-
|
80
|
-
|
79
|
+
remove_from_cache
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def remove_from_cache
|
84
|
+
Lit::Locale.pluck(:locale).each do |l|
|
85
|
+
Lit.init.cache.delete_key "#{l}.#{localization_key}"
|
81
86
|
end
|
82
87
|
end
|
83
88
|
|
@@ -94,5 +99,9 @@ module Lit
|
|
94
99
|
self.is_completed = localizations.changed.count == localizations.count
|
95
100
|
save! if is_completed_changed?
|
96
101
|
end
|
102
|
+
|
103
|
+
def lit_attribute_will_change
|
104
|
+
localization_key_will_change!
|
105
|
+
end
|
97
106
|
end
|
98
107
|
end
|
data/lib/lit/cache.rb
CHANGED
@@ -23,6 +23,8 @@ module Lit
|
|
23
23
|
@request_info_store = Lit.get_key_value_engine
|
24
24
|
@hits_counter_working = true
|
25
25
|
@keys = nil
|
26
|
+
@localization_object_cache = {}
|
27
|
+
@localization_key_object_cache = {}
|
26
28
|
end
|
27
29
|
|
28
30
|
def [](key)
|
@@ -79,6 +81,8 @@ module Lit
|
|
79
81
|
locale_key, key_without_locale = split_key(key)
|
80
82
|
locale = find_locale(locale_key)
|
81
83
|
delete_localization(locale, key_without_locale)
|
84
|
+
@localization_key_object_cache = {}
|
85
|
+
@localization_object_cache = {}
|
82
86
|
end
|
83
87
|
|
84
88
|
def load_all_translations
|
@@ -96,6 +100,7 @@ module Lit
|
|
96
100
|
key = key.to_s
|
97
101
|
locale_key, key_without_locale = split_key(key)
|
98
102
|
locale = find_locale(locale_key)
|
103
|
+
@localization_object_cache.delete(key)
|
99
104
|
localization = find_localization(locale, key_without_locale, default_fallback: true)
|
100
105
|
localizations[key] = localization.translation if localization
|
101
106
|
end
|
@@ -105,11 +110,15 @@ module Lit
|
|
105
110
|
localizations.delete(key)
|
106
111
|
key_without_locale = split_key(key).last
|
107
112
|
localization_keys.delete(key_without_locale)
|
113
|
+
@localization_object_cache.delete(key)
|
114
|
+
@localization_key_object_cache.delete(key)
|
108
115
|
I18n.backend.reload!
|
109
116
|
end
|
110
117
|
|
111
118
|
def reset
|
112
119
|
@locale_cache = {}
|
120
|
+
@localization_key_object_cache = {}
|
121
|
+
@localization_object_cache = {}
|
113
122
|
localizations.clear
|
114
123
|
localization_keys.clear
|
115
124
|
load_all_translations
|
@@ -154,9 +163,11 @@ module Lit
|
|
154
163
|
|
155
164
|
def find_localization(locale, key_without_locale, value: nil, force_array: false, update_value: false, default_fallback: false)
|
156
165
|
return nil if value.is_a?(Hash)
|
166
|
+
full_key = "#{locale}.#{key_without_locale}"
|
157
167
|
ActiveRecord::Base.transaction do
|
158
168
|
localization_key = find_localization_key(key_without_locale)
|
159
|
-
localization =
|
169
|
+
localization = @localization_object_cache[full_key]
|
170
|
+
localization ||=
|
160
171
|
Lit::Localization.active
|
161
172
|
.where(locale_id: locale.id)
|
162
173
|
.where(localization_key_id: localization_key.id)
|
@@ -176,11 +187,14 @@ module Lit
|
|
176
187
|
# Prevent overwriting existing default value with nil.
|
177
188
|
# However, if the localization record is #new_record?, we still need
|
178
189
|
# to insert it with an empty default value.
|
190
|
+
localization.locale = locale
|
191
|
+
localization.localization_key = localization_key
|
192
|
+
localization.full_key_str = full_key
|
179
193
|
localization.update_default_value(value) if localization.new_record? || value
|
194
|
+
@localization_object_cache[full_key] = localization
|
180
195
|
end
|
181
|
-
|
196
|
+
localization
|
182
197
|
end
|
183
|
-
nil
|
184
198
|
end
|
185
199
|
|
186
200
|
# fallback to translation in different locale
|
@@ -229,7 +243,8 @@ module Lit
|
|
229
243
|
new_value = nil
|
230
244
|
case v
|
231
245
|
when Symbol then
|
232
|
-
lk =
|
246
|
+
lk = @localization_key_object_cache[v.to_s] || \
|
247
|
+
Lit::LocalizationKey.where(localization_key: v.to_s).first
|
233
248
|
if lk
|
234
249
|
loca = Lit::Localization.active.where(locale_id: locale.id).
|
235
250
|
where(localization_key_id: lk.id).first
|
@@ -258,16 +273,19 @@ module Lit
|
|
258
273
|
end
|
259
274
|
|
260
275
|
def find_localization_key(key_without_locale)
|
261
|
-
if
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
276
|
+
return @localization_key_object_cache[key_without_locale] if @localization_key_object_cache.key?(key_without_locale)
|
277
|
+
@localization_key_object_cache[key_without_locale] = if localization_keys.key?(key_without_locale)
|
278
|
+
Lit::LocalizationKey.find_by(
|
279
|
+
id: localization_keys[key_without_locale]
|
280
|
+
) || find_or_create_localization_key(key_without_locale)
|
281
|
+
else
|
282
|
+
find_or_create_localization_key(key_without_locale)
|
283
|
+
end
|
284
|
+
@localization_key_object_cache[key_without_locale]
|
268
285
|
end
|
269
286
|
|
270
287
|
def find_localization_key_for_delete(key_without_locale)
|
288
|
+
return @localization_key_object_cache[key_without_locale] if @localization_key_object_cache.key?(key_without_locale)
|
271
289
|
lk = Lit::LocalizationKey.find_by(id: localization_keys[key_without_locale]) if localization_keys.has_key?(key_without_locale)
|
272
290
|
lk || Lit::LocalizationKey.where(localization_key: key_without_locale).first
|
273
291
|
end
|
data/lib/lit/i18n_backend.rb
CHANGED
@@ -69,11 +69,9 @@ module Lit
|
|
69
69
|
|
70
70
|
parts = I18n.normalize_keys(locale, key, scope, options[:separator])
|
71
71
|
key_with_locale = parts.join('.')
|
72
|
-
|
73
72
|
# check in cache or in simple backend
|
74
73
|
content = @cache[key_with_locale] || super
|
75
74
|
return content if parts.size <= 1
|
76
|
-
|
77
75
|
if content.nil? && should_cache?(key_with_locale, options)
|
78
76
|
new_content = @cache.init_key_with_value(key_with_locale, content)
|
79
77
|
content = new_content if content.nil? # Content can change when Lit.humanize is true for example
|
@@ -125,8 +123,8 @@ module Lit
|
|
125
123
|
key = ([locale] + scope).join('.')
|
126
124
|
if data.respond_to?(:to_hash)
|
127
125
|
# ActiveRecord::Base.transaction do
|
128
|
-
data.to_hash.each do |
|
129
|
-
store_item(locale, value, scope + [
|
126
|
+
data.to_hash.each do |k, value|
|
127
|
+
store_item(locale, value, scope + [k], startup_process)
|
130
128
|
end
|
131
129
|
# end
|
132
130
|
elsif data.respond_to?(:to_str) || data.is_a?(Array)
|
data/lib/lit/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.0.pre.alpha.
|
4
|
+
version: 0.4.0.pre.alpha.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Litwiniuk
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-11-
|
13
|
+
date: 2018-11-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: i18n
|
@@ -390,6 +390,7 @@ files:
|
|
390
390
|
- app/helpers/lit/localizations_helper.rb
|
391
391
|
- app/helpers/lit/sources_helper.rb
|
392
392
|
- app/jobs/lit/synchronize_source_job.rb
|
393
|
+
- app/models/lit/base.rb
|
393
394
|
- app/models/lit/incomming_localization.rb
|
394
395
|
- app/models/lit/locale.rb
|
395
396
|
- app/models/lit/localization.rb
|