lit 1.1.0 → 1.1.5

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.
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
@@ -45,13 +45,10 @@ module Lit::CloudTranslation::Providers
45
45
  # end
46
46
  class Google < Base
47
47
  def translate(text:, from: nil, to:, **opts)
48
- @client ||=
49
- ::Google::Cloud::Translate.new(project_id: config.keyfile_hash['project_id'],
50
- credentials: config.keyfile_hash)
51
- result = @client.translate(sanitize_text(text), from: from, to: to, **opts)
48
+ result = client.translate(sanitize_text(text), from: from, to: to, **opts)
52
49
  unsanitize_text(
53
50
  case result
54
- when ::Google::Cloud::Translate::Translation then result.text
51
+ when translation_class then result.text
55
52
  when Array then result.map(&:text)
56
53
  end
57
54
  )
@@ -67,6 +64,27 @@ module Lit::CloudTranslation::Providers
67
64
 
68
65
  private
69
66
 
67
+ def client
68
+ @client ||= begin
69
+ args = {
70
+ project_id: config.keyfile_hash['project_id'], credentials: config.keyfile_hash,
71
+ version: :v2
72
+ }
73
+ if Gem.loaded_specs['google-cloud-translate'].version < Gem::Version.create('2.0')
74
+ args = args.tap { |hs| hs.delete(:version) }
75
+ end
76
+ ::Google::Cloud::Translate.new(**args)
77
+ end
78
+ end
79
+
80
+ def translation_class
81
+ if Gem.loaded_specs['google-cloud-translate'].version < Gem::Version.create('2.0')
82
+ ::Google::Cloud::Translate::Translation
83
+ else
84
+ ::Google::Cloud::Translate::V2::Translation
85
+ end
86
+ end
87
+
70
88
  def default_config
71
89
  if ENV['GOOGLE_TRANSLATE_API_KEYFILE'].blank?
72
90
  env_keys = ENV.keys.grep(/\AGOOGLE_TRANSLATE_API_/)
@@ -93,7 +111,7 @@ module Lit::CloudTranslation::Providers
93
111
  def sanitize_text(text_or_array)
94
112
  case text_or_array
95
113
  when String
96
- text_or_array.gsub(/%{(.+?)}/, '<code>__LIT__\1__LIT__</code>')
114
+ text_or_array.gsub(/%{(.+?)}/, '<code>__LIT__\1__LIT__</code>').gsub(/\r\n/, '<code>0</code>')
97
115
  when Array
98
116
  text_or_array.map { |s| sanitize_text(s) }
99
117
  when nil
@@ -106,7 +124,7 @@ module Lit::CloudTranslation::Providers
106
124
  def unsanitize_text(text_or_array)
107
125
  case text_or_array
108
126
  when String
109
- text_or_array.gsub(/<code>__LIT__(.+?)__LIT__<\/code>/, '%{\1}')
127
+ text_or_array.gsub(%r{<code>0</code>}, "\r\n").gsub(%r{<code>__LIT__(.+?)__LIT__</code>}, '%{\1}')
110
128
  when Array
111
129
  text_or_array.map { |s| unsanitize_text(s) }
112
130
  else
data/lib/lit/engine.rb CHANGED
@@ -4,6 +4,8 @@ module Lit
4
4
 
5
5
  config.autoload_paths += %W[#{Lit::Engine.root}/app/controllers/lit/concerns]
6
6
 
7
+ paths.add 'lib'
8
+
7
9
  isolate_namespace Lit
8
10
 
9
11
  initializer 'lit.assets.precompile' do |app|
@@ -12,16 +14,12 @@ module Lit
12
14
  end
13
15
 
14
16
  initializer 'lit.reloader' do |app|
15
- config.to_prepare do
16
- Lit.loader.cache.reset_local_cache if Lit.loader
17
- end
17
+ config.to_prepare { Lit.loader.cache.reset_local_cache if Lit.loader }
18
18
  end
19
19
 
20
20
  initializer 'lit.migrations.append' do |app|
21
21
  unless app.root.to_s.include?(root.to_s)
22
- config.paths['db/migrate'].expanded.each do |expanded_path|
23
- app.config.paths['db/migrate'] << expanded_path
24
- end
22
+ config.paths['db/migrate'].expanded.each { |expanded_path| app.config.paths['db/migrate'] << expanded_path }
25
23
  end
26
24
  end
27
25
 
data/lib/lit/export.rb CHANGED
@@ -4,7 +4,7 @@ require 'lit/services/localization_keys_to_hash_service'
4
4
  module Lit
5
5
  class Export
6
6
  def self.call(locale_keys:, format:, include_hits_count: false)
7
- raise ArgumentError, "format must be yaml or csv" if %i[yaml csv].exclude?(format)
7
+ raise ArgumentError, 'format must be yaml or csv' if %i[yaml csv].exclude?(format)
8
8
  Lit.loader.cache.load_all_translations
9
9
  localizations_scope = Lit::Localization.active
10
10
  if locale_keys.present?
@@ -12,13 +12,11 @@ module Lit
12
12
  localizations_scope = localizations_scope.where(locale_id: locale_ids) unless locale_ids.empty?
13
13
  end
14
14
  db_localizations = {}
15
- localizations_scope.find_each do |l|
16
- db_localizations[l.full_key] = l.translation
17
- end
15
+ localizations_scope.find_each { |l| db_localizations[l.full_key] = l.translation }
18
16
 
19
17
  case format
20
18
  when :yaml
21
- exported_keys = Lit::LocalizationKeysToHashService.call(db_localizations)
19
+ exported_keys = Lit::Services::LocalizationKeysToHashService.call(db_localizations)
22
20
  exported_keys.to_yaml
23
21
  when :csv
24
22
  relevant_locales = locale_keys.presence || I18n.available_locales.map(&:to_s)
@@ -46,9 +44,7 @@ module Lit
46
44
  relevant_locales.map { |l| Array.wrap(db_localizations["#{l}.#{key_without_locale}"]) }
47
45
  transpose(key_localizations_per_locale).each do |translation_series|
48
46
  csv_row = [key_without_locale, *translation_series]
49
- if include_hits_count
50
- csv_row << (Lit.init.cache.get_global_hits_counter(key_without_locale) || 0)
51
- end
47
+ csv_row << (Lit.init.cache.get_global_hits_counter(key_without_locale) || 0) if include_hits_count
52
48
  csv << csv_row
53
49
  end
54
50
  end
@@ -59,9 +55,7 @@ module Lit
59
55
  # This is like Array#transpose but ignores size differences between inner arrays.
60
56
  private_class_method def self.transpose(matrix)
61
57
  maxlen = matrix.max { |x| x.length }.length
62
- matrix.each do |array|
63
- array[maxlen - 1] = nil if array.length < maxlen
64
- end
58
+ matrix.each { |array| array[maxlen - 1] = nil if array.length < maxlen }
65
59
  matrix.transpose
66
60
  end
67
61
  end
@@ -16,9 +16,22 @@ module Lit
16
16
  I18n.const_set(:RESERVED_KEYS, reserved_keys.freeze)
17
17
  end
18
18
 
19
+ ## DOC
20
+ ## Translation flow starts with Rails-provided ActionView::Helpers::TranslationHelper `translate` method
21
+ ## In that method any calls to `I18n.translate` are catched by this method below (because Lit acts as I18 backend)
22
+ ## Any calls in Lit to `super` go straight to I18n
19
23
  def translate(locale, key, options = {})
20
24
  options[:lit_default_copy] = options[:default].dup if can_dup_default(options)
21
25
  content = super(locale, key, options)
26
+
27
+ if on_rails_6_1_or_higher?
28
+ @untranslated_key = key if key.present? && options[:default].instance_of?(Object)
29
+
30
+ if key.nil? && options[:lit_default_copy].present?
31
+ update_default_localization(locale, content, options)
32
+ end
33
+ end
34
+
22
35
  if Lit.all_translations_are_html_safe && content.respond_to?(:html_safe)
23
36
  content.html_safe
24
37
  else
@@ -54,6 +67,17 @@ module Lit
54
67
 
55
68
  private
56
69
 
70
+ def on_rails_6_1_or_higher?
71
+ "#{::Rails::VERSION::MAJOR}#{::Rails::VERSION::MINOR}".to_i == 61 ||
72
+ ::Rails::VERSION::MAJOR >= 7
73
+ end
74
+
75
+ def update_default_localization(locale, content, options)
76
+ parts = I18n.normalize_keys(locale, @untranslated_key, options[:scope], options[:separator])
77
+ key_with_locale = parts.join('.')
78
+ @cache.update_locale(key_with_locale, content, content.is_a?(Array))
79
+ end
80
+
57
81
  def can_dup_default(options = {})
58
82
  return false unless options.key?(:default)
59
83
  return true if options[:default].is_a?(String)
data/lib/lit/import.rb CHANGED
@@ -3,14 +3,14 @@ require 'csv'
3
3
  module Lit
4
4
  class Import
5
5
  class << self
6
- def call(*args)
7
- new(*args).perform
6
+ def call(**kwargs)
7
+ new(**kwargs).perform
8
8
  end
9
9
  end
10
10
 
11
11
  attr_reader :input, :locale_keys, :format, :skip_nil
12
12
 
13
- def initialize(input:, locale_keys: [], format:, skip_nil: true, dry_run: false, raw: false)
13
+ def initialize(input:, format:, locale_keys: [], skip_nil: true, dry_run: false, raw: false)
14
14
  raise ArgumentError, 'format must be yaml or csv' if %i[yaml csv].exclude?(format.to_sym)
15
15
  @input = input
16
16
  @locale_keys = locale_keys.presence || I18n.available_locales
@@ -143,7 +143,7 @@ module Lit
143
143
  .find_by('localization_key = ? and locale = ?', key, locale)
144
144
 
145
145
  return unless existing_translation
146
-
146
+
147
147
  if @raw
148
148
  existing_translation.update(default_value: value)
149
149
  else
@@ -0,0 +1,29 @@
1
+ require 'rack/body_proxy'
2
+
3
+ # A middleware that ensures the lit thread value is cleared after
4
+ # the last part of the body is rendered. This is useful when
5
+ # using streaming.j
6
+ #
7
+ # Uses Rack::BodyProxy, adapted from Rack::Lock's usage of the
8
+ # same pattern.
9
+ #
10
+
11
+ module Lit
12
+ class Middleware
13
+ def initialize(app)
14
+ @app = app
15
+ end
16
+
17
+ def call(env)
18
+ Thread.current[:localization_cache_valid] = false
19
+ response = @app.call(env)
20
+
21
+ # for streaming support wrap request in Rack::BodyProxy
22
+ response << Rack::BodyProxy.new(response.pop) do
23
+ Thread.current[:localization_cache_valid] = false
24
+ end
25
+ ensure
26
+ Thread.current[:localization_cache_valid] = false
27
+ end
28
+ end
29
+ end
data/lib/lit/rails.rb CHANGED
@@ -11,6 +11,7 @@ module Lit
11
11
  end
12
12
 
13
13
  if defined?(Rails::Railtie)
14
+ require 'lit/middleware'
14
15
  require 'lit/railtie'
15
16
  else
16
17
  Lit::Rails.initialize
data/lib/lit/railtie.rb CHANGED
@@ -1,12 +1,11 @@
1
1
  module Lit
2
2
  class Railtie < ::Rails::Railtie
3
- ## INITIALIZE IN config/initialize if you want to use redis!!!
4
- initializer :initialize_lit_rails, after: :before_initialize do
5
- # Lit::Rails.initialize
6
- end
3
+ initializer :lit_middleware do |app|
4
+ app.config.middleware.insert_after ActionDispatch::RequestId, Lit::Middleware
7
5
 
8
- # rake_tasks do
9
- # load "tasks/lit_tasks.rake"
10
- # end
6
+ ActiveSupport::Reloader.to_complete do
7
+ Thread.current[:localization_cache_valid] = false
8
+ end
9
+ end
11
10
  end
12
11
  end
@@ -1,23 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lit
4
- # Converts flat hash with localization_keys as keys and translations as values to nested hash
5
- # by nesting on '.' localization key dots
6
- class LocalizationKeysToHashService
7
- # http://subtech.g.hatena.ne.jp/cho45/20061122
8
- def self.call(db_localizations)
9
- deep_proc = proc do |_k, s, o|
10
- next s.merge(o, &deep_proc) if s.is_a?(Hash) && o.is_a?(Hash)
4
+ module Services
5
+ # Converts flat hash with localization_keys as keys and translations as values to nested hash
6
+ # by nesting on '.' localization key dots
7
+ class LocalizationKeysToHashService
8
+ # http://subtech.g.hatena.ne.jp/cho45/20061122
9
+ def self.call(db_localizations)
10
+ deep_proc =
11
+ proc do |_k, s, o|
12
+ next s.merge(o, &deep_proc) if s.is_a?(Hash) && o.is_a?(Hash)
11
13
 
12
- next o
14
+ next o
15
+ end
16
+ nested_keys = {}
17
+ db_localizations.sort.each do |k, v|
18
+ key_parts = k.to_s.split('.')
19
+ converted = key_parts.reverse.reduce(v) { |a, n| { n => a } }
20
+ nested_keys.merge!(converted, &deep_proc)
21
+ end
22
+ nested_keys
13
23
  end
14
- nested_keys = {}
15
- db_localizations.sort.each do |k, v|
16
- key_parts = k.to_s.split('.')
17
- converted = key_parts.reverse.reduce(v) { |a, n| { n => a } }
18
- nested_keys.merge!(converted, &deep_proc)
19
- end
20
- nested_keys
21
24
  end
22
25
  end
23
26
  end
data/lib/lit/version.rb CHANGED
@@ -1,3 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Lit
2
- VERSION = '1.1.0'.freeze
4
+ module_function
5
+
6
+ def version
7
+ Gem::Version.new Version::STRING
8
+ end
9
+
10
+ module Version
11
+ MAJOR = 1
12
+ MINOR = 1
13
+ TINY = 5
14
+
15
+ STRING = [MAJOR, MINOR, TINY].compact.join('.')
16
+ end
3
17
  end
data/lib/lit.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'lit/engine'
2
2
  require 'lit/loader'
3
+ require 'lit/adapters'
3
4
 
4
5
  module Lit
5
6
  mattr_accessor :authentication_function
@@ -30,7 +31,7 @@ module Lit
30
31
  self.loader ||= Loader.new
31
32
  Lit.humanize_key = false if Lit.humanize_key.nil?
32
33
  Lit.humanize_key_ignored_keys = [] if Lit.humanize_key_ignored_keys.nil?
33
- Lit.humanize_key_ignored = %w[i18n date datetime number time support ]
34
+ Lit.humanize_key_ignored = %w[i18n date datetime number time support]
34
35
  Lit.humanize_key_ignored |= Lit.humanize_key_ignored_keys
35
36
  Lit.humanize_key_ignored = Regexp.new("(#{Lit.humanize_key_ignored.join('|')}).*")
36
37
  Lit.ignore_yaml_on_startup = true if Lit.ignore_yaml_on_startup.nil?
@@ -42,6 +43,7 @@ module Lit
42
43
  Lit.hits_counter_enabled = false if Lit.hits_counter_enabled.nil?
43
44
  Lit.store_request_info = false if Lit.store_request_info.nil?
44
45
  Lit.store_request_keys = false if Lit.store_request_keys.nil?
46
+
45
47
  # if loading all translations on start, migrations have to be already
46
48
  # performed, fails on first deploy
47
49
  # self.loader.cache.load_all_translations
@@ -55,10 +57,10 @@ module Lit
55
57
  rescue ActiveRecord::ActiveRecordError => e
56
58
  log_txt =
57
59
  "An #{e.class} error has been raised during Lit initialization. " \
58
- "Lit assumes that database tables do not exist.\n\n" \
59
- "Error: #{e.message}\n\n" \
60
- "Backtrace:\n" \
61
- "#{e.backtrace.join("\n")}"
60
+ "Lit assumes that database tables do not exist.\n\n" \
61
+ "Error: #{e.message}\n\n" \
62
+ "Backtrace:\n" \
63
+ "#{e.backtrace.join("\n")}"
62
64
  Logger.new(STDOUT).error(log_txt) if ::Rails.env.test? # ensure this is logged to stdout in test
63
65
  ::Rails.logger.error(log_txt)
64
66
  false
@@ -68,18 +70,16 @@ module Lit
68
70
  case Lit.key_value_engine
69
71
  when 'redis'
70
72
  require 'lit/adapters/redis_storage'
71
- return RedisStorage.new
73
+ return ::Lit::Adapters::RedisStorage.new
72
74
  else
73
75
  require 'lit/adapters/hash_storage'
74
- return HashStorage.new
76
+ return ::Lit::Adapters::HashStorage.new
75
77
  end
76
78
  end
77
79
 
78
80
  def self.fallback=(_value)
79
- ::Rails.logger.error "[DEPRECATION] Lit.fallback= has been deprecated, please use `config.i18n.fallbacks` instead"
81
+ ::Rails.logger.error '[DEPRECATION] Lit.fallback= has been deprecated, please use `config.i18n.fallbacks` instead'
80
82
  end
81
83
  end
82
84
 
83
- if defined? Rails
84
- require 'lit/rails'
85
- end
85
+ require 'lit/rails' if defined?(Rails)
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: 1.1.0
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Litwiniuk
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2020-11-03 00:00:00.000000000 Z
14
+ date: 2021-12-23 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 4.2.0
22
+ version: 5.2.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 4.2.0
29
+ version: 5.2.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: jquery-rails
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -89,14 +89,14 @@ dependencies:
89
89
  requirements:
90
90
  - - "~>"
91
91
  - !ruby/object:Gem::Version
92
- version: 2.2.0
92
+ version: 2.4.0
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 2.2.0
99
+ version: 2.4.0
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: devise
102
102
  requirement: !ruby/object:Gem::Requirement
@@ -111,20 +111,6 @@ dependencies:
111
111
  - - "~>"
112
112
  - !ruby/object:Gem::Version
113
113
  version: 4.7.1
114
- - !ruby/object:Gem::Dependency
115
- name: google-cloud-translate
116
- requirement: !ruby/object:Gem::Requirement
117
- requirements:
118
- - - "~>"
119
- - !ruby/object:Gem::Version
120
- version: 1.2.4
121
- type: :development
122
- prerelease: false
123
- version_requirements: !ruby/object:Gem::Requirement
124
- requirements:
125
- - - "~>"
126
- - !ruby/object:Gem::Version
127
- version: 1.2.4
128
114
  - !ruby/object:Gem::Dependency
129
115
  name: minitest
130
116
  requirement: !ruby/object:Gem::Requirement
@@ -233,6 +219,8 @@ files:
233
219
  - app/controllers/lit/locales_controller.rb
234
220
  - app/controllers/lit/localization_keys_controller.rb
235
221
  - app/controllers/lit/localizations_controller.rb
222
+ - app/controllers/lit/request_info_store.rb
223
+ - app/controllers/lit/request_keys_store.rb
236
224
  - app/controllers/lit/sources_controller.rb
237
225
  - app/helpers/lit/application_helper.rb
238
226
  - app/helpers/lit/dashboard_helper.rb
@@ -272,6 +260,7 @@ files:
272
260
  - app/views/lit/localization_keys/_localization_row.html.erb
273
261
  - app/views/lit/localization_keys/_localizations_list.html.erb
274
262
  - app/views/lit/localization_keys/_sidebar.html.erb
263
+ - app/views/lit/localization_keys/batch_touch.js.erb
275
264
  - app/views/lit/localization_keys/change_completed.js.erb
276
265
  - app/views/lit/localization_keys/destroy.js.erb
277
266
  - app/views/lit/localization_keys/index.html.erb
@@ -304,9 +293,10 @@ files:
304
293
  - db/migrate/20181018075955_lit_add_localization_key_is_deleted_to_localization_keys.rb
305
294
  - db/migrate/20181030111522_lit_add_is_visited_again_to_localization_keys.rb
306
295
  - db/migrate/20181129103819_lit_add_localization_key_locale_unique_index_to_localizations.rb
307
- - lib/generators/lit/install/templates/initializer.rb
296
+ - lib/generators/lit/install/templates/initializer.erb
308
297
  - lib/generators/lit/install_generator.rb
309
298
  - lib/lit.rb
299
+ - lib/lit/adapters.rb
310
300
  - lib/lit/adapters/hash_storage.rb
311
301
  - lib/lit/adapters/redis_storage.rb
312
302
  - lib/lit/cache.rb
@@ -319,6 +309,7 @@ files:
319
309
  - lib/lit/i18n_backend.rb
320
310
  - lib/lit/import.rb
321
311
  - lib/lit/loader.rb
312
+ - lib/lit/middleware.rb
322
313
  - lib/lit/rails.rb
323
314
  - lib/lit/railtie.rb
324
315
  - lib/lit/services/localization_keys_to_hash_service.rb
@@ -343,7 +334,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
343
334
  - !ruby/object:Gem::Version
344
335
  version: '0'
345
336
  requirements: []
346
- rubygems_version: 3.1.2
337
+ rubygems_version: 3.1.6
347
338
  signing_key:
348
339
  specification_version: 4
349
340
  summary: Database powered i18n backend with web gui