lit 0.4.0.pre.alpha.1 → 0.4.0.pre.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|