i18n-env-var-lookup 0.0.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.
- checksums.yaml +7 -0
- data/lib/i18n/backend/env_var_lookup.rb +102 -0
- data/lib/i18n-env-var-lookup/version.rb +5 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e8700fc592302d1cf86b7cd42e06267563860ec2368e9067289f139441e68f41
|
4
|
+
data.tar.gz: fed7a80eb47cbd3fdb159bceb46aa71258ccb427e5479ef3e58a9a9f9f493596
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b12931bdc6001c623985c95687947ba9956bb28fa453bfbb177416f2c9d0dd03a6e845a44af0cd33ec27f088a665f37f39dc679afe0ec864a74c8ea1912f2590
|
7
|
+
data.tar.gz: 193bcbe973a354fcb93a5d062299f54ae0e6c84e64c6006688f8d2990c0d959b5f8e71add5e27b240f7e945818a8c965999159138d8fca6353c8641468a41be6
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/core_ext'
|
3
|
+
|
4
|
+
module I18n
|
5
|
+
module Backend
|
6
|
+
module EnvVarLookup
|
7
|
+
|
8
|
+
# ~{} for embedding, ~{} for escaping
|
9
|
+
TOKENIZER = /(\~\~\{[^\}]+\}|\~\{[^\}]+\})/
|
10
|
+
INTERPOLATION_SYNTAX_PATTERN = /(\~)?(\~\{([^\}]+)\})/
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def lookup(locale, key, scope = [], options = {})
|
15
|
+
result = super
|
16
|
+
|
17
|
+
unless result
|
18
|
+
normalized_key = I18n.normalize_keys(nil, key, scope)
|
19
|
+
return if normalized_key.size < 2
|
20
|
+
|
21
|
+
# simply strip the last key part, e.g.
|
22
|
+
# `foo.bar.baz` becomes `foo.bar`
|
23
|
+
normalized_key.slice!(-1, 1)
|
24
|
+
|
25
|
+
# look the stripped key up - if this is a reference, it will
|
26
|
+
# get compiled and cached
|
27
|
+
lookup(locale, normalized_key, [], options)
|
28
|
+
|
29
|
+
# then try again to get our result - it will be found now if the
|
30
|
+
# previous `lookup` call compiled a new reference with our key,
|
31
|
+
# otherwise still stay nil
|
32
|
+
result = super
|
33
|
+
end
|
34
|
+
|
35
|
+
return result unless (result.is_a?(String) or result.is_a?(Hash))
|
36
|
+
|
37
|
+
compiled_result, had_to_compile_result = deep_compile(locale, result, options)
|
38
|
+
|
39
|
+
if had_to_compile_result
|
40
|
+
cache_compiled_result(locale, key, compiled_result, scope, options)
|
41
|
+
end
|
42
|
+
|
43
|
+
compiled_result
|
44
|
+
end
|
45
|
+
|
46
|
+
#subject is hash or string
|
47
|
+
def deep_compile(locale, subject, options)
|
48
|
+
if subject.is_a?(Hash)
|
49
|
+
subject.each do |key, object|
|
50
|
+
subject[key], _had_to_compile_result = deep_compile(locale, object, options)
|
51
|
+
end
|
52
|
+
else
|
53
|
+
compile(locale, subject, options)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def compile(locale, string, options)
|
58
|
+
had_to_compile_result = false
|
59
|
+
|
60
|
+
if string.is_a?(String)
|
61
|
+
result = string.split(TOKENIZER).map do |token|
|
62
|
+
embedded_token = token.match(INTERPOLATION_SYNTAX_PATTERN)
|
63
|
+
|
64
|
+
if embedded_token
|
65
|
+
had_to_compile_result = true
|
66
|
+
handle_interpolation_match(locale, embedded_token, options)
|
67
|
+
else
|
68
|
+
token
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
result = (
|
73
|
+
result.second && (
|
74
|
+
result.second.is_a?(Array) || result.second.is_a?(Hash)
|
75
|
+
)
|
76
|
+
) ? result.second : result.join
|
77
|
+
else
|
78
|
+
result = string
|
79
|
+
end
|
80
|
+
|
81
|
+
[result, had_to_compile_result]
|
82
|
+
end
|
83
|
+
|
84
|
+
def cache_compiled_result(locale, dot_form_key, compiled_result, scope, options)
|
85
|
+
keys = I18n.normalize_keys(locale, dot_form_key, scope, options[:separator])
|
86
|
+
|
87
|
+
translation_hash = {}
|
88
|
+
# ignore prepended locale key
|
89
|
+
keys[1..-1].inject(translation_hash) do |hash, key|
|
90
|
+
key == keys[-1] ? hash[key] = compiled_result : hash[key] = {}
|
91
|
+
end
|
92
|
+
|
93
|
+
store_translations(locale, translation_hash, options)
|
94
|
+
end
|
95
|
+
|
96
|
+
def handle_interpolation_match(locale, embedded_token, options)
|
97
|
+
escaped, pattern, key = embedded_token.values_at(1, 2, 3)
|
98
|
+
escaped ? pattern : ENV.fetch(key.upcase, pattern)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: i18n-env-var-lookup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stayman Hou
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-02-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: i18n
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mocha
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: test_declarative
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: test-unit
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: 'Provides a backend to the i18n gem to allow a definition to contain
|
98
|
+
embedded references to environment variables by introducing the special embedded
|
99
|
+
notation ~{}. E.g. {title: ~{APP_NAME}} will evaluate t(:title) to the value of
|
100
|
+
the $APP_NAME environment variable.'
|
101
|
+
email:
|
102
|
+
- stayman.hou@gmail.com
|
103
|
+
executables: []
|
104
|
+
extensions: []
|
105
|
+
extra_rdoc_files: []
|
106
|
+
files:
|
107
|
+
- lib/i18n-env-var-lookup/version.rb
|
108
|
+
- lib/i18n/backend/env_var_lookup.rb
|
109
|
+
homepage: https://github.com/StaymanHou/i18n-env-var-lookup
|
110
|
+
licenses: []
|
111
|
+
metadata: {}
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
requirements: []
|
127
|
+
rubygems_version: 3.1.4
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: Provides a backend to the i18n gem to allow translation definitions to reference
|
131
|
+
environment variables
|
132
|
+
test_files: []
|