lit 1.1.0 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +47 -31
  3. data/app/assets/javascripts/lit/backend/localizations.js.coffee +13 -6
  4. data/app/assets/stylesheets/lit/application.css +16 -13
  5. data/app/assets/stylesheets/lit/lit_frontend.css +16 -15
  6. data/app/controllers/lit/api/v1/localizations_controller.rb +9 -17
  7. data/app/controllers/lit/cloud_translations_controller.rb +1 -1
  8. data/app/controllers/lit/concerns/request_info_store.rb +5 -14
  9. data/app/controllers/lit/concerns/request_keys_store.rb +5 -13
  10. data/app/controllers/lit/localization_keys_controller.rb +38 -38
  11. data/app/controllers/lit/request_info_store.rb +10 -0
  12. data/app/controllers/lit/request_keys_store.rb +10 -0
  13. data/app/helpers/lit/frontend_helper.rb +65 -65
  14. data/app/models/lit/base.rb +1 -1
  15. data/app/models/lit/incomming_localization.rb +13 -27
  16. data/app/models/lit/localization.rb +6 -14
  17. data/app/services/remote_interactor_service.rb +2 -1
  18. data/app/services/synchronize_source_service.rb +4 -8
  19. data/app/views/lit/localization_keys/_localizations_list.html.erb +18 -10
  20. data/app/views/lit/localization_keys/batch_touch.js.erb +1 -0
  21. data/app/views/lit/localizations/update.js.erb +1 -1
  22. data/config/routes.rb +1 -0
  23. data/lib/generators/lit/install/templates/{initializer.rb → initializer.erb} +6 -1
  24. data/lib/generators/lit/install_generator.rb +8 -10
  25. data/lib/lit/adapters/hash_storage.rb +2 -2
  26. data/lib/lit/adapters/redis_storage.rb +8 -11
  27. data/lib/lit/adapters.rb +2 -0
  28. data/lib/lit/cache.rb +23 -2
  29. data/lib/lit/cloud_translation/providers/google.rb +25 -7
  30. data/lib/lit/engine.rb +4 -6
  31. data/lib/lit/export.rb +5 -11
  32. data/lib/lit/i18n_backend.rb +24 -0
  33. data/lib/lit/import.rb +4 -4
  34. data/lib/lit/middleware.rb +29 -0
  35. data/lib/lit/rails.rb +1 -0
  36. data/lib/lit/railtie.rb +6 -7
  37. data/lib/lit/services/localization_keys_to_hash_service.rb +18 -15
  38. data/lib/lit/version.rb +15 -1
  39. data/lib/lit.rb +11 -11
  40. metadata +13 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ecbd506c6be8279728e5da85a4857dd542c75cdc752efac9745dd7e2ba022a5c
4
- data.tar.gz: 45bf91076203d8be22b2da854886657ddb85f07acbc42cd287b9246883e0955d
3
+ metadata.gz: 7dcf44da1e10a331cafdd9352461c1d9b985c6ea3d97e61744a1390e036be71a
4
+ data.tar.gz: 3c03d7e70b3c172092d807539543f0389e4e04c7f0420c66ffb5f96f742a4fa6
5
5
  SHA512:
6
- metadata.gz: b78bb6b6ef52a2010d0725165a0e898d72dbf5fcf843b4ae756291f5648032e12ac1c6ded47a90418b258627c5ea1521e956dbd3e1387f428d623ec144a0c9cc
7
- data.tar.gz: ce87f326e76dce205a987bbb1474a154406afd5fda42a9f3b92017cd8912f621a54ef36a16bd1f0861e6193341a0db24220341a8d1c5120cdfbbb3d2438473c5
6
+ metadata.gz: ecf7688c8aa6f32c6c01fab3b14024720f75155b66ed1be9494c40f0ed4755855e2b73b9d1d528a7a215513316a27ceb3427a84e72e0420f611a4c7e877b6ce0
7
+ data.tar.gz: 5f4fe480d203c6ade865f44385b4dfb951aa4a32c33f8e224b9371e3f36f5a16acd444ef73136bc28f7278d6518b7681d29540dca11833e6f7ecfc3b776b1386
data/README.md CHANGED
@@ -22,9 +22,14 @@ Highly inspired by Copycopter by thoughtbot.
22
22
  9. (On request) stores paths where translation keys were called
23
23
  10. (On request) is able to show all translation keys used to render current page
24
24
 
25
+
25
26
  ### Screenshots
26
27
 
27
- Check wiki: [Screenshots](https://github.com/prograils/lit/wiki/Screenshots)
28
+ [Feature overview on YouTube](https://www.youtube.com/watch?v=_T9Kg05VvLI)
29
+
30
+ ![lit live translation](https://prograils-com-stuff.s3.amazonaws.com/lit/lit-front.gif)
31
+
32
+ Check wiki for more: [Screenshots](https://github.com/prograils/lit/wiki/Screenshots)
28
33
 
29
34
  ### Installation
30
35
 
@@ -37,10 +42,10 @@ gem 'lit'
37
42
 
38
43
  2. run `bundle install`
39
44
 
40
- 3. run installation generator `bundle exec rails g lit:install`
41
- (for production/staging environment `redis` is suggested as key value engine. `hash` will not work in multi process environment)
45
+ 3. Add `config.i18n.available_locales = [...]` to `application.rb` - it's required to precompile appropriate language flags in lit backend.
42
46
 
43
- 4. Add `config.i18n.available_locales = [...]` to `application.rb` - it's required to precompile appropriate language flags in lit backend.
47
+ 4. run installation generator `bundle exec rails g lit:install`
48
+ (for production/staging environment `redis` is suggested as key value engine. `hash` will not work in multi process environment)
44
49
 
45
50
  5. After doing above and restarting app, point your browser to `http://app/lit`
46
51
 
@@ -130,6 +135,10 @@ Lit::CloudTranslation.provider = Lit::CloudTranslation::Providers::Google
130
135
  ```
131
136
  gem 'google-cloud-translate', '~> 1.2.4'
132
137
  ```
138
+ ...we also support V2 of Google Cloud Translate gem, should you need it:
139
+ ```
140
+ gem 'google-cloud-translate', '~> 2.1.2'
141
+ ```
133
142
 
134
143
  To use translation via Google, you need to obtain a [service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) containing all the credentials required by the API.
135
144
 
@@ -145,10 +154,10 @@ These credentials can be given in three ways:
145
154
  ... # see Google docs link above for reference
146
155
  }
147
156
  end
148
-
157
+
149
158
  # For example, for Rails 6, from encrypted credentials file (HashWithIndifferentAccess is used, because the keys in
150
159
  the credentials.config could be strings or, as well, symbols):
151
-
160
+
152
161
  Lit::CloudTranslation.configure do |config|
153
162
  config.keyfile_hash = HashWithIndifferentAccess.new(Rails.application.credentials.config[:google_translate_api])
154
163
  end
@@ -199,17 +208,17 @@ Also applies to upgrading from `0.4.pre.alpha` versions.
199
208
 
200
209
  1. Add `Lit::FrontendHelper` to your `ApplicationController`
201
210
 
202
- ```ruby
203
- helper Lit::FrontendHelper
204
- ```
211
+ ```ruby
212
+ helper Lit::FrontendHelper
213
+ ```
205
214
 
206
215
  2. In you layout file include lit assets
207
216
 
208
- ```erb
209
- <% if admin_user_signed_in? %>
210
- <%= lit_frontend_assets %>
211
- <% end %>
212
- ```
217
+ ```erb
218
+ <% if admin_user_signed_in? %>
219
+ <%= lit_frontend_assets %>
220
+ <% end %>
221
+ ```
213
222
 
214
223
  3. You're good to go - now log in to lit (if required) and open your frontend in separate tab (to have session persisted). On the bottom-right of your page you should see "Enable / disable lit highlight" - after enabling it you'll be able to click and translate phrases directly in your frontend
215
224
 
@@ -217,13 +226,14 @@ Also applies to upgrading from `0.4.pre.alpha` versions.
217
226
 
218
227
  5. This feature requires jQuery! (at least for now)
219
228
 
229
+
220
230
  ### Storing request info
221
231
 
222
- 1. Include `Lit::Concerns::RequestInfoStore` concern in your `ApplicationController`
232
+ 1. Include `Lit::RequestInfoStore` concern in your `ApplicationController`
223
233
 
224
- ```ruby
225
- include Lit::Concerns::RequestInfoStore
226
- ```
234
+ ```ruby
235
+ include Lit::RequestInfoStore
236
+ ```
227
237
 
228
238
  2. In lit initializer (`lit.rb`) set `store_request_info` config to true
229
239
 
@@ -238,25 +248,31 @@ Lit.store_request_info = true
238
248
 
239
249
  1. Add `Lit::FrontendHelper` in your `ApplicationController`
240
250
 
241
- ```ruby
242
- include Lit::FrontendHelper
243
- ```
251
+ ```ruby
252
+ helper Lit::FrontendHelper
253
+ ```
254
+
255
+ 2. Include `Lit::RequestKeysStore` concern in your `ApplicationController`
244
256
 
245
- 2. Include `Lit::Concerns::RequestKeysStore` concern in your `ApplicationController`
257
+ ```ruby
258
+ include Lit::RequestKeysStore
259
+ ```
260
+
261
+ 3. Enable storing of request keys in lit initializer `config/initializers/lit.rb`
246
262
 
247
- ```ruby
248
- include Lit::Concerns::RequestKeysStore
249
- ```
263
+ ```ruby
264
+ Lit.store_request_keys = true
265
+ ```
250
266
 
251
- 3. On the bottom of you layout file call `lit_translations_info` helper function
267
+ 4. On the bottom of you layout file call `lit_translations_info` helper function
252
268
 
253
- ```erb
254
- <%= lit_translations_info %>
255
- ```
269
+ ```erb
270
+ <%= lit_translations_info %>
271
+ ```
256
272
 
257
- 4. From now on you'll be able to see all translation keys that were used to render current page. This feature works great with on-site live translations!
273
+ 5. From now on you'll be able to see all translation keys that were used to render current page. This feature works great with on-site live translations!
258
274
 
259
- 5. Lit authorized user must be signed in for this feature to work! This feature requires jQuery!
275
+ 6. Lit authorized user must be signed in for this feature to work! This feature requires jQuery!
260
276
 
261
277
 
262
278
 
@@ -2,25 +2,32 @@
2
2
  $(document).ready ->
3
3
  $('td.localization_row[data-editing=0]').on 'click', ->
4
4
  $this = $(this)
5
- if parseInt($this.data('editing'))==0
5
+ if parseInt($this.data('editing')) == 0
6
6
  edited_rows[$this.data('id')] = $this.html()
7
7
  unless parseInt($this.data('editing'))
8
8
  $this.data('editing', '1')
9
9
  $.get $this.data('edit')
10
- $('td.localization_row').on 'click', 'form button.cancel', (e)->
10
+ $('td.localization_row').on 'click', 'form button.cancel', (e) ->
11
11
  $this = $(this)
12
- if $this[0].localName=='button'
12
+ if $this[0].localName == 'button'
13
13
  $this = $this.parents('td.localization_row')
14
14
  $this.data('editing', 0)
15
15
  $this.html edited_rows[$this.data('id')]
16
16
  e.preventDefault()
17
17
  false
18
- $('tr.localization_versions_row').on 'click', '.close_versions', (e)->
18
+ $('tr.localization_versions_row').on 'click', '.close_versions', (e) ->
19
19
  $this = $(this)
20
20
  $parent = $this.parents('tr.localization_versions_row')
21
21
  $parent.addClass('hidden')
22
22
  $parent.children('td').html('')
23
- $('tr.localization_key_row').on 'click', 'input.wysiwyg_switch', (e)->
23
+ $('tr.localization_key_row').on 'click', 'input.wysiwyg_switch', (e) ->
24
24
  $(this).parents('form').find("textarea").jqte()
25
- $('tr.localization_key_row').on 'click', '.request_info_link', (e)->
25
+ $('tr.localization_key_row').on 'click', '.request_info_link', (e) ->
26
26
  $(this).parents('tr.localization_key_row').find(".request_info_row").toggleClass('hidden')
27
+ $('tr.localization_key_row').on 'click', '.js-copy_to_clipboard', (e) ->
28
+ if(!navigator.clipboard)
29
+ alert('No browser support for clipboard')
30
+ else
31
+ navigator.clipboard.writeText($(this).data('key'))
32
+ e.preventDefault()
33
+ false
@@ -11,17 +11,17 @@
11
11
  *= require './backend/jquery-te-1.4.0.css'
12
12
  *= require_self
13
13
  */
14
- .detail_wrapper{
15
- padding: 10px 0 0 50px;
14
+ .detail_wrapper {
15
+ padding: 10px 0 0 10px;
16
16
  }
17
- .detail_wrapper table tr td.locale_row{
17
+ .detail_wrapper table tr td.locale_row {
18
18
  width: 75px;
19
19
  }
20
- .localization_key_row .localization_keys_options{
20
+ .localization_key_row .localization_keys_options {
21
21
  display: none;
22
22
  float: right;
23
23
  }
24
- .localization_key_row:hover .localization_keys_options{
24
+ .localization_key_row:hover .localization_keys_options {
25
25
  display: block;
26
26
  }
27
27
 
@@ -29,29 +29,29 @@ li.key_prefix .fa-chevron-right {
29
29
  float: right;
30
30
  margin-top: 2px;
31
31
  margin-right: -6px;
32
- opacity: .25;
32
+ opacity: 0.25;
33
33
  }
34
34
 
35
- .hidden{
35
+ .hidden {
36
36
  display: none;
37
37
  }
38
- i.fa{
38
+ i.fa {
39
39
  color: black;
40
40
  }
41
- .nav.nav-stacked>li>a {
42
- padding: 5px 7px;
41
+ .nav.nav-stacked > li > a {
42
+ padding: 5px 7px;
43
43
  }
44
- .well{
44
+ .well {
45
45
  background-color: white;
46
46
  border-radius: 0px;
47
47
  }
48
- .well label{
48
+ .well label {
49
49
  font-weight: normal;
50
50
  }
51
51
  .well .form-search {
52
52
  margin-bottom: 15px;
53
53
  }
54
- .localization_row em{
54
+ .localization_row em {
55
55
  color: #bbb;
56
56
  }
57
57
  .loading {
@@ -60,3 +60,6 @@ padding: 5px 7px;
60
60
  .loaded {
61
61
  display: none;
62
62
  }
63
+ .copy_to_clipboard_btn {
64
+ cursor: pointer;
65
+ }
@@ -1,9 +1,11 @@
1
1
  .lit-key-generic {
2
2
  }
3
- .lit-key-highlight{
4
- text-decoration: underline wavy red !important;
3
+ .lit-key-highlight {
4
+ text-decoration: underline !important;
5
+ text-decoration-color: red !important;
6
+ text-decoration-style: wavy !important;
5
7
  }
6
- #lit_button_wrapper{
8
+ #lit_button_wrapper {
7
9
  position: fixed;
8
10
  bottom: 20px;
9
11
  right: 20px;
@@ -15,16 +17,15 @@
15
17
  cursor: pointer;
16
18
  color: white;
17
19
  }
18
- #lit_button_wrapper.lit-highlight-enabled{
20
+ #lit_button_wrapper.lit-highlight-enabled {
19
21
  background-color: lightgreen;
20
22
  }
21
- #lit_textarea{
23
+ #lit_textarea {
22
24
  position: absolute;
23
25
  padding: 0 0 1px 0;
24
26
  margin: 0 0 0 0;
25
27
  border: 0;
26
28
  border-bottom: 1px solid red;
27
-
28
29
  }
29
30
  .lit-translations-info.collapsed {
30
31
  position: fixed;
@@ -38,7 +39,7 @@
38
39
  cursor: pointer;
39
40
  color: white;
40
41
  }
41
- .lit-translations-info.expanded{
42
+ .lit-translations-info.expanded {
42
43
  position: absolute;
43
44
  display: block;
44
45
  width: 80%;
@@ -52,16 +53,16 @@
52
53
  z-index: 90;
53
54
  }
54
55
 
55
- .lit-translations-info.collapsed span.lit-open-button{
56
+ .lit-translations-info.collapsed span.lit-open-button {
56
57
  display: block;
57
58
  }
58
- .lit-translations-info.expanded span.lit-open-button{
59
+ .lit-translations-info.expanded span.lit-open-button {
59
60
  display: none;
60
61
  }
61
- .lit-translations-info.collapsed span.lit-close-button{
62
+ .lit-translations-info.collapsed span.lit-close-button {
62
63
  display: none;
63
64
  }
64
- .lit-translations-info.expanded span.lit-close-button{
65
+ .lit-translations-info.expanded span.lit-close-button {
65
66
  display: block;
66
67
  position: fixed;
67
68
  right: 10%;
@@ -71,16 +72,16 @@
71
72
  background-color: white;
72
73
  padding: 10px 10px 5px;
73
74
  }
74
- .lit-translations-info.collapsed ul.lit-translations-list{
75
+ .lit-translations-info.collapsed ul.lit-translations-list {
75
76
  display: none;
76
77
  }
77
- .lit-translations-info.expanded ul.lit-translations-list{
78
+ .lit-translations-info.expanded ul.lit-translations-list {
78
79
  }
79
80
 
80
- .lit-translations-info.expanded ul.lit-translations-list li{
81
+ .lit-translations-info.expanded ul.lit-translations-list li {
81
82
  margin: 5px;
82
83
  }
83
84
 
84
- .lit-translations-info.expanded #lit_textarea{
85
+ .lit-translations-info.expanded #lit_textarea {
85
86
  padding: 2px;
86
87
  }
@@ -2,34 +2,26 @@ module Lit
2
2
  class Api::V1::LocalizationsController < Api::V1::BaseController
3
3
  def index
4
4
  @localizations = fetch_localizations
5
- render json: @localizations.as_json(
6
- root: false,
7
- only: %i[id localization_key_id locale_id],
8
- methods: %i[
9
- value localization_key_str locale_str
10
- localization_key_is_deleted
11
- ]
12
- )
5
+ render json:
6
+ @localizations.as_json(
7
+ root: false,
8
+ only: %i[id localization_key_id locale_id],
9
+ methods: %i[value localization_key_str locale_str localization_key_is_deleted],
10
+ )
13
11
  end
14
12
 
15
13
  def last_change
16
14
  @localization = Localization.order(updated_at: :desc).first
17
- render json: @localization.as_json(
18
- root: false, only: [], methods: [:last_change]
19
- )
15
+ render json: @localization.as_json(root: false, only: [], methods: [:last_change])
20
16
  end
21
17
 
22
18
  private
23
19
 
24
20
  def fetch_localizations
25
- scope = Localization.includes(
26
- :locale,
27
- :localization_key
28
- )
21
+ scope = Localization.includes(:locale, :localization_key)
29
22
 
30
23
  if params[:after].present?
31
- after_date = Time.parse("#{params[:after]} #{Time.zone.name}")
32
- .in_time_zone
24
+ after_date = Time.parse("#{params[:after]} #{Time.zone.name}").in_time_zone
33
25
  scope.after(after_date).to_a
34
26
  else
35
27
  scope.all
@@ -18,7 +18,7 @@ module Lit
18
18
  from: params[:from],
19
19
  to: @target_localization.locale.locale
20
20
  }.compact
21
- @translated_text = Lit::CloudTranslation.translate(opts)
21
+ @translated_text = Lit::CloudTranslation.translate(**opts)
22
22
  rescue Lit::CloudTranslation::TranslationError => e
23
23
  @error_message = "Translation failed. #{e.message}"
24
24
  end
@@ -1,17 +1,8 @@
1
- module Lit
2
- module Concerns
3
- module RequestInfoStore
4
- extend ::ActiveSupport::Concern
5
- included do
6
- before_action :store_request_path
7
- end
1
+ module Lit::Concerns::RequestInfoStore
2
+ extend ActiveSupport::Concern
8
3
 
9
- private
10
-
11
- def store_request_path
12
- Thread.current[:lit_current_request_path] = request&.path
13
- end
14
- end
4
+ included do
5
+ Rails.logger.info 'DEPRECATED: Use include Lit::RequestInfoStore'
6
+ include Lit::RequestInfoStore
15
7
  end
16
8
  end
17
-
@@ -1,16 +1,8 @@
1
- module Lit
2
- module Concerns
3
- module RequestKeysStore
4
- extend ::ActiveSupport::Concern
5
- included do
6
- before_action :init_request_keys
7
- end
1
+ module Lit::Concerns::RequestKeysStore
2
+ extend ActiveSupport::Concern
8
3
 
9
- private
10
-
11
- def init_request_keys
12
- Thread.current[:lit_request_keys] = {}
13
- end
14
- end
4
+ included do
5
+ Rails.logger.info 'DEPRECATED: Use include Lit::RequestKeysStore'
6
+ include Lit::RequestKeysStore
15
7
  end
16
8
  end
@@ -1,9 +1,7 @@
1
1
  module Lit
2
2
  class LocalizationKeysController < ::Lit::ApplicationController
3
- before_action :find_localization_scope,
4
- except: %i[destroy find_localization]
5
- before_action :find_localization_key,
6
- only: %i[star destroy change_completed restore_deleted]
3
+ before_action :find_localization_scope, except: %i[destroy find_localization]
4
+ before_action :find_localization_key, only: %i[star destroy change_completed restore_deleted]
7
5
 
8
6
  def index
9
7
  get_localization_keys
@@ -20,27 +18,19 @@ module Lit
20
18
  end
21
19
 
22
20
  def find_localization
23
- localization_key = Lit::LocalizationKey.find_by!(
24
- localization_key: params[:key]
25
- )
21
+ localization_key = Lit::LocalizationKey.find_by!(localization_key: params[:key])
26
22
  locale = Lit::Locale.find_by!(locale: params[:locale])
27
23
  localization = localization_key.localizations.find_by(locale_id: locale)
28
- render json: {
29
- path: localization_key_localization_path(localization_key, localization)
30
- }
24
+ render json: { path: localization_key_localization_path(localization_key, localization) }
31
25
  end
32
26
 
33
27
  def starred
34
28
  @scope = @scope.where(is_starred: true)
35
29
 
36
- if defined?(Kaminari) &&
37
- @scope.respond_to?(Kaminari.config.page_method_name)
30
+ if defined?(Kaminari) && @scope.respond_to?(Kaminari.config.page_method_name)
38
31
  @scope = @scope.send(Kaminari.config.page_method_name, params[:page])
39
32
  end
40
- if defined?(WillPaginate) &&
41
- @scope.respond_to?(:paginate)
42
- @scope = @scope.paginate(page: params[:page])
43
- end
33
+ @scope = @scope.paginate(page: params[:page]) if defined?(WillPaginate) && @scope.respond_to?(:paginate)
44
34
  get_localization_keys
45
35
  render action: :index
46
36
  end
@@ -66,6 +56,16 @@ module Lit
66
56
  respond_to :js
67
57
  end
68
58
 
59
+ def batch_touch
60
+ get_localization_keys
61
+ localization_key_ids = @scope.distinct(false).pluck(:id)
62
+ if localization_key_ids.any?
63
+ @scope.distinct(false).update_all updated_at: Time.current
64
+ Localization.where(localization_key_id: localization_key_ids).update_all updated_at: Time.current
65
+ end
66
+ respond_to :js
67
+ end
68
+
69
69
  private
70
70
 
71
71
  def find_localization_key
@@ -73,19 +73,16 @@ module Lit
73
73
  end
74
74
 
75
75
  def find_localization_scope
76
- @search_options = if params.respond_to?(:permit)
77
- params.permit(*valid_keys)
78
- else
79
- params.slice(*valid_keys)
80
- end
81
- @scope = LocalizationKey.distinct.active
82
- .preload(localizations: :locale)
83
- .search(@search_options)
76
+ @search_options = params.respond_to?(:permit) ? params.permit(*valid_keys) : params.slice(*valid_keys)
77
+ @scope = LocalizationKey.distinct.active.preload(localizations: :locale).search(@search_options)
84
78
  end
85
79
 
86
80
  def get_localization_keys
87
81
  key_parts = @search_options[:key_prefix].to_s.split('.').length
88
- @prefixes = @scope.reorder(nil).distinct.pluck(:localization_key).map { |lk| lk.split('.').shift(key_parts + 1).join('.') }.uniq.sort
82
+ @prefixes =
83
+ @scope.reorder(nil).distinct.pluck(:localization_key).map do |lk|
84
+ lk.split('.').shift(key_parts + 1).join('.')
85
+ end.uniq.sort
89
86
  if @search_options[:key_prefix].present?
90
87
  parts = @search_options[:key_prefix].split('.')
91
88
  @parent_prefix = parts[0, parts.length - 1].join('.')
@@ -104,16 +101,15 @@ module Lit
104
101
  end
105
102
 
106
103
  def grouped_localizations
107
- @_grouped_localizations ||= begin
108
- {}.tap do |hash|
109
- @localization_keys.each do |lk|
110
- hash[lk] = {}
111
- lk.localizations.each do |l|
112
- hash[lk][l.locale.locale.to_sym] = l
104
+ @_grouped_localizations ||=
105
+ begin
106
+ {}.tap do |hash|
107
+ @localization_keys.each do |lk|
108
+ hash[lk] = {}
109
+ lk.localizations.each { |l| hash[lk][l.locale.locale.to_sym] = l }
113
110
  end
114
111
  end
115
112
  end
116
- end
117
113
  end
118
114
 
119
115
  def localization_for(locale, localization_key)
@@ -136,12 +132,16 @@ module Lit
136
132
  helper_method :localization_for
137
133
 
138
134
  def versions?(localization)
139
- @_versions ||= begin
140
- ids = grouped_localizations.values.map(&:values).flatten.map(&:id)
141
- Lit::Localization.active.where(id: ids).joins(:versions).group(
142
- "#{Lit::Localization.quoted_table_name}.id"
143
- ).count
144
- end
135
+ @_versions ||=
136
+ begin
137
+ ids = grouped_localizations.values.map(&:values).flatten.map(&:id)
138
+ Lit::Localization
139
+ .active
140
+ .where(id: ids)
141
+ .joins(:versions)
142
+ .group("#{Lit::Localization.quoted_table_name}.id")
143
+ .count
144
+ end
145
145
  @_versions[localization.id].to_i > 0
146
146
  end
147
147
  helper_method :versions?
@@ -0,0 +1,10 @@
1
+ module Lit::RequestInfoStore
2
+ extend ::ActiveSupport::Concern
3
+ included { before_action :store_request_path }
4
+
5
+ private
6
+
7
+ def store_request_path
8
+ Thread.current[:lit_current_request_path] = request&.path
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Lit::RequestKeysStore
2
+ extend ::ActiveSupport::Concern
3
+ included { before_action :init_request_keys }
4
+
5
+ private
6
+
7
+ def init_request_keys
8
+ Thread.current[:lit_request_keys] = {}
9
+ end
10
+ end