tater 3.0.4 → 3.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 +4 -4
- data/README.org +4 -3
- data/lib/tater/version.rb +4 -0
- data/lib/tater.rb +19 -12
- data/test/tater_test.rb +28 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08a174e27ecb08955ba15997b8b71995aff8a77cbf82bb08514ba5dcd6e404dd'
|
4
|
+
data.tar.gz: c9f78478bc5f1b7a48b038add4f3c05230dc6083ccada5d1de00974b1dbd08f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27b9c2ad757cb5a51bf0ce3a792a92912bc3d8a2f9e82c761621396417480b6c82088222cd9e2c552d2309381d8feb0399466cade27b75fd2fb29d6eab2552b0
|
7
|
+
data.tar.gz: baf324c10b838927b0aedc2ac5babafed538acbdaeb7a4f7a5e6aebf8731d53037ec2dad4870d459a90056c9b9c2442d59ed6efaf5d94dbb74341f6a6ae3c14d
|
data/README.org
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
* Tater
|
2
2
|
|
3
3
|
[[https://badge.fury.io/rb/tater][https://badge.fury.io/rb/tater.svg]]
|
4
|
+
[[https://github.com/evanleck/tater/actions/workflows/main.yml][https://github.com/evanleck/tater/actions/workflows/main.yml/badge.svg]]
|
4
5
|
|
5
6
|
Tater is an internationalization (i18n) and localization (l10n) library designed
|
6
7
|
for simplicity. It doesn't do everything that other libraries do, but that's by
|
@@ -238,7 +239,7 @@ Tater.new.translate('nope', default: 'Yep!') # => 'Yep!'
|
|
238
239
|
** Procs and messages in Ruby
|
239
240
|
|
240
241
|
Ruby files can be used to store messages in addition to YAML, so long as the
|
241
|
-
Ruby file returns a =Hash= when
|
242
|
+
Ruby file returns a =Hash= when evaluated.
|
242
243
|
|
243
244
|
#+begin_src ruby
|
244
245
|
{
|
@@ -281,7 +282,7 @@ Locales will be tried in order and whichever one matches first will be returned.
|
|
281
282
|
|
282
283
|
** Limitations
|
283
284
|
|
284
|
-
- It is not
|
285
|
+
- It is not plug-able, it does what it does and that's it.
|
285
286
|
- It doesn't handle pluralization yet, though it may in the future.
|
286
287
|
|
287
288
|
** Why?
|
@@ -292,6 +293,6 @@ file that handles the basics of lookup and interpolation.
|
|
292
293
|
|
293
294
|
** Trivia
|
294
295
|
|
295
|
-
I was
|
296
|
+
I was originally going to call this library "Translator" but with a [[https://en.wikipedia.org/wiki/Numeronym][numeronym]]
|
296
297
|
like I18n: "t8r". I looked at it for a while but I read it as "tater" instead
|
297
298
|
of "tee-eight-arr" so I figured I'd just name it Tater. Tater the translator.
|
data/lib/tater.rb
CHANGED
@@ -4,8 +4,9 @@ require 'date'
|
|
4
4
|
require 'time'
|
5
5
|
require 'yaml'
|
6
6
|
|
7
|
-
require 'tater/utils'
|
8
7
|
require 'tater/hash' unless Hash.method_defined?(:except)
|
8
|
+
require 'tater/utils'
|
9
|
+
require 'tater/version'
|
9
10
|
|
10
11
|
# Tater is a internationalization (i18n) and localization (l10n) library
|
11
12
|
# designed for speed and simplicity.
|
@@ -22,6 +23,11 @@ class Tater
|
|
22
23
|
# Needed for Ruby < 3.
|
23
24
|
using HashExcept unless Hash.method_defined?(:except)
|
24
25
|
|
26
|
+
# An array of the available locale codes found in loaded messages.
|
27
|
+
#
|
28
|
+
# @return [Array<String>]
|
29
|
+
attr_reader :available
|
30
|
+
|
25
31
|
# @return [String]
|
26
32
|
attr_reader :locale
|
27
33
|
|
@@ -37,6 +43,8 @@ class Tater
|
|
37
43
|
# @param path [String]
|
38
44
|
# A path to search for YAML or Ruby files to load messages from.
|
39
45
|
def initialize(cascade: false, locale: nil, messages: nil, path: nil)
|
46
|
+
@available = []
|
47
|
+
@cache = {}
|
40
48
|
@cascade = cascade
|
41
49
|
@locale = locale
|
42
50
|
@messages = {}
|
@@ -45,6 +53,11 @@ class Tater
|
|
45
53
|
load(messages: messages) if messages
|
46
54
|
end
|
47
55
|
|
56
|
+
# @return [String]
|
57
|
+
def inspect
|
58
|
+
%(#<Tater:#{ object_id } @cascade=#{ @cascade } @locale="#{ @locale }" @available=#{ @available }>)
|
59
|
+
end
|
60
|
+
|
48
61
|
# Do lookups cascade by default?
|
49
62
|
#
|
50
63
|
# @return [Boolean]
|
@@ -52,13 +65,6 @@ class Tater
|
|
52
65
|
@cascade
|
53
66
|
end
|
54
67
|
|
55
|
-
# An array of the available locale codes found in loaded messages.
|
56
|
-
#
|
57
|
-
# @return [Array]
|
58
|
-
def available
|
59
|
-
@available ||= messages.keys
|
60
|
-
end
|
61
|
-
|
62
68
|
# Is this locale available in our current set of messages?
|
63
69
|
#
|
64
70
|
# @return [Boolean]
|
@@ -89,12 +95,12 @@ class Tater
|
|
89
95
|
@messages = Utils.deep_merge(@messages, Utils.deep_stringify_keys(messages)) if messages
|
90
96
|
@messages = Utils.deep_freeze(@messages)
|
91
97
|
|
92
|
-
#
|
93
|
-
|
98
|
+
# Update our available locales.
|
99
|
+
@available.replace(@messages.keys.map(&:to_s).sort)
|
94
100
|
|
95
101
|
# Not only does this clear our cache but it establishes the basic structure
|
96
102
|
# that we rely on in other methods.
|
97
|
-
@cache
|
103
|
+
@cache.clear
|
98
104
|
|
99
105
|
@messages.each_key do |key|
|
100
106
|
@cache[key] = { false => {}, true => {} }
|
@@ -106,7 +112,8 @@ class Tater
|
|
106
112
|
# @param locale [String]
|
107
113
|
# The locale code to set as our default.
|
108
114
|
def locale=(locale)
|
109
|
-
|
115
|
+
str = locale.to_s
|
116
|
+
@locale = str if available?(str)
|
110
117
|
end
|
111
118
|
|
112
119
|
# Localize an Array, Date, Time, DateTime, or Numeric object.
|
data/test/tater_test.rb
CHANGED
@@ -455,4 +455,32 @@ describe Tater do
|
|
455
455
|
refute i18n.includes?('cascade.nope.tacos', cascade: false)
|
456
456
|
end
|
457
457
|
end
|
458
|
+
|
459
|
+
describe '#inspect' do
|
460
|
+
it 'returns a stringified version of the object' do
|
461
|
+
obj = Tater.new(path: File.expand_path('test/fixtures'), locale: 'en')
|
462
|
+
assert_equal %(#<Tater:#{ obj.object_id } @cascade=#{ obj.cascades? } @locale="#{ obj.locale }" @available=#{ obj.available }>), obj.inspect
|
463
|
+
end
|
464
|
+
end
|
465
|
+
|
466
|
+
describe '#freeze' do
|
467
|
+
it 'can be frozen' do
|
468
|
+
obj = Tater.new(path: File.expand_path('test/fixtures'), locale: 'en')
|
469
|
+
obj.freeze
|
470
|
+
|
471
|
+
assert obj.includes?('deep')
|
472
|
+
assert_equal 'This key is deeper', obj.translate('deep.key')
|
473
|
+
assert_equal %w[delimiter_only en fr separator_only], obj.available
|
474
|
+
|
475
|
+
assert obj.frozen?
|
476
|
+
end
|
477
|
+
|
478
|
+
it 'throws an error if modified after being frozen' do
|
479
|
+
obj = Tater.new(path: File.expand_path('test/fixtures'), locale: 'en')
|
480
|
+
obj.freeze
|
481
|
+
|
482
|
+
assert_raises(FrozenError) { obj.locale = 'en' }
|
483
|
+
assert_raises(FrozenError) { obj.load(messages: { more: 'Messages' }) }
|
484
|
+
end
|
485
|
+
end
|
458
486
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tater
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Lecklider
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- lib/tater/aliases.rb
|
136
136
|
- lib/tater/hash.rb
|
137
137
|
- lib/tater/utils.rb
|
138
|
+
- lib/tater/version.rb
|
138
139
|
- test/fixtures/another.yml
|
139
140
|
- test/fixtures/fixtures.yml
|
140
141
|
- test/fixtures/messages/more.yml
|
@@ -162,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
163
|
- !ruby/object:Gem::Version
|
163
164
|
version: '2.0'
|
164
165
|
requirements: []
|
165
|
-
rubygems_version: 3.
|
166
|
+
rubygems_version: 3.3.7
|
166
167
|
signing_key:
|
167
168
|
specification_version: 4
|
168
169
|
summary: Minimal internationalization and localization library.
|