tater 2.0.3 → 2.0.4
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/lib/tater.rb +27 -44
 - data/test/tater_test.rb +4 -2
 - metadata +17 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 51644f41d80e87d20ed43b9e8c6b4797fb7aeb4258c94d5d9f9d7a50eb5ee5c6
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 1fe43b99fbc2f24cdc342ec4278ff7140ee6b9579dd51d236fcc713907f1455d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d4c059fdc696d39c489e61d3e53954fe921feaba78055bd5e62c944d45daf10dfa178b76e4e836d326ba61be0dbf7bbec13b63f52b95e13f23da9ca5be4d3b8c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 6b12ffa8f2a1186f2de92c9c16bb5c2e1027f93ab5ee2c877dbad297777274b9f4f38882255490db3c555a0dafb129ed876bd784d3a872e07a4e7e9f6e0e24ec
         
     | 
    
        data/lib/tater.rb
    CHANGED
    
    | 
         @@ -109,7 +109,6 @@ class Tater 
     | 
|
| 
       109 
109 
     | 
    
         
             
              # @param path [String]
         
     | 
| 
       110 
110 
     | 
    
         
             
              #   A path to search for YAML or Ruby files to load messages from.
         
     | 
| 
       111 
111 
     | 
    
         
             
              def initialize(cascade: false, locale: nil, messages: nil, path: nil)
         
     | 
| 
       112 
     | 
    
         
            -
                @cache = {}
         
     | 
| 
       113 
112 
     | 
    
         
             
                @cascade = cascade
         
     | 
| 
       114 
113 
     | 
    
         
             
                @locale = locale
         
     | 
| 
       115 
114 
     | 
    
         
             
                @messages = {}
         
     | 
| 
         @@ -167,8 +166,10 @@ class Tater 
     | 
|
| 
       167 
166 
     | 
    
         | 
| 
       168 
167 
     | 
    
         
             
                # Not only does this clear our cache but it establishes the basic structure
         
     | 
| 
       169 
168 
     | 
    
         
             
                # that we rely on in other methods.
         
     | 
| 
      
 169 
     | 
    
         
            +
                @cache = {}
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
       170 
171 
     | 
    
         
             
                @messages.each_key do |key|
         
     | 
| 
       171 
     | 
    
         
            -
                  @cache[key] = {  
     | 
| 
      
 172 
     | 
    
         
            +
                  @cache[key] = { false => {}, true => {} }
         
     | 
| 
       172 
173 
     | 
    
         
             
                end
         
     | 
| 
       173 
174 
     | 
    
         
             
              end
         
     | 
| 
       174 
175 
     | 
    
         | 
| 
         @@ -223,37 +224,45 @@ class Tater 
     | 
|
| 
       223 
224 
     | 
    
         | 
| 
       224 
225 
     | 
    
         
             
              # Lookup a key in the messages hash, using the current locale or an override.
         
     | 
| 
       225 
226 
     | 
    
         
             
              #
         
     | 
| 
      
 227 
     | 
    
         
            +
              # @example Using the default locale, look up a key's value.
         
     | 
| 
      
 228 
     | 
    
         
            +
              #   i18n = Tater.new(locale: 'en', messages: { 'en' => { 'greeting' => { 'world' => 'Hello, world!' } } })
         
     | 
| 
      
 229 
     | 
    
         
            +
              #   i18n.lookup('greeting.world') # => "Hello, world!"
         
     | 
| 
      
 230 
     | 
    
         
            +
              #
         
     | 
| 
       226 
231 
     | 
    
         
             
              # @param key [String]
         
     | 
| 
      
 232 
     | 
    
         
            +
              #   The period-separated key path to look for within our messages.
         
     | 
| 
       227 
233 
     | 
    
         
             
              # @param locale [String]
         
     | 
| 
       228 
     | 
    
         
            -
              #   A locale to use instead of our current one.
         
     | 
| 
      
 234 
     | 
    
         
            +
              #   A locale to use instead of our current one, if any.
         
     | 
| 
       229 
235 
     | 
    
         
             
              # @param cascade [Boolean]
         
     | 
| 
       230 
236 
     | 
    
         
             
              #   A boolean to forcibly set the cascade option for this lookup.
         
     | 
| 
       231 
237 
     | 
    
         
             
              #
         
     | 
| 
       232 
238 
     | 
    
         
             
              # @return
         
     | 
| 
       233 
239 
     | 
    
         
             
              #   Basically anything that can be stored in your messages Hash.
         
     | 
| 
       234 
240 
     | 
    
         
             
              def lookup(key, locale: nil, cascade: nil)
         
     | 
| 
       235 
     | 
    
         
            -
                locale = 
     | 
| 
       236 
     | 
    
         
            -
             
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
             
     | 
| 
       239 
     | 
    
         
            -
             
     | 
| 
      
 241 
     | 
    
         
            +
                locale =
         
     | 
| 
      
 242 
     | 
    
         
            +
                  if locale.nil?
         
     | 
| 
      
 243 
     | 
    
         
            +
                    @locale
         
     | 
| 
      
 244 
     | 
    
         
            +
                  else
         
     | 
| 
      
 245 
     | 
    
         
            +
                    locale.to_s
         
     | 
| 
      
 246 
     | 
    
         
            +
                  end
         
     | 
| 
       240 
247 
     | 
    
         | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
      
 248 
     | 
    
         
            +
                cascade = @cascade if cascade.nil?
         
     | 
| 
       242 
249 
     | 
    
         | 
| 
       243 
     | 
    
         
            -
             
     | 
| 
       244 
     | 
    
         
            -
             
     | 
| 
       245 
     | 
    
         
            -
                      while path.length >= 2
         
     | 
| 
       246 
     | 
    
         
            -
                        attempt = @messages.dig(*path)
         
     | 
| 
      
 250 
     | 
    
         
            +
                @cache[locale][cascade][key] ||= begin
         
     | 
| 
      
 251 
     | 
    
         
            +
                  path = key.split(SEPARATOR)
         
     | 
| 
       247 
252 
     | 
    
         | 
| 
       248 
     | 
    
         
            -
             
     | 
| 
      
 253 
     | 
    
         
            +
                  message = @messages[locale].dig(*path)
         
     | 
| 
       249 
254 
     | 
    
         | 
| 
      
 255 
     | 
    
         
            +
                  if message.nil? && cascade
         
     | 
| 
      
 256 
     | 
    
         
            +
                    message =
         
     | 
| 
      
 257 
     | 
    
         
            +
                      while path.length > 1
         
     | 
| 
       250 
258 
     | 
    
         
             
                        path.delete_at(path.length - 2)
         
     | 
| 
      
 259 
     | 
    
         
            +
                        attempt = @messages[locale].dig(*path)
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
                        break attempt unless attempt.nil?
         
     | 
| 
       251 
262 
     | 
    
         
             
                      end
         
     | 
| 
       252 
     | 
    
         
            -
             
     | 
| 
       253 
     | 
    
         
            -
                      @messages.dig(*path)
         
     | 
| 
       254 
     | 
    
         
            -
                    end
         
     | 
| 
      
 263 
     | 
    
         
            +
                  end
         
     | 
| 
       255 
264 
     | 
    
         | 
| 
       256 
     | 
    
         
            -
                   
     | 
| 
      
 265 
     | 
    
         
            +
                  message
         
     | 
| 
       257 
266 
     | 
    
         
             
                end
         
     | 
| 
       258 
267 
     | 
    
         
             
              end
         
     | 
| 
       259 
268 
     | 
    
         | 
| 
         @@ -338,32 +347,6 @@ class Tater 
     | 
|
| 
       338 
347 
     | 
    
         | 
| 
       339 
348 
     | 
    
         
             
              private
         
     | 
| 
       340 
349 
     | 
    
         | 
| 
       341 
     | 
    
         
            -
              # @param key [String]
         
     | 
| 
       342 
     | 
    
         
            -
              #   The cache key, often in the form "something.nested.like.this"
         
     | 
| 
       343 
     | 
    
         
            -
              # @param locale [String]
         
     | 
| 
       344 
     | 
    
         
            -
              #   The locale to store the value for.
         
     | 
| 
       345 
     | 
    
         
            -
              # @param cascade [Boolean]
         
     | 
| 
       346 
     | 
    
         
            -
              #   Was this a cascading lookup?
         
     | 
| 
       347 
     | 
    
         
            -
              # @param message [String]
         
     | 
| 
       348 
     | 
    
         
            -
              #   The message being cached, often a String.
         
     | 
| 
       349 
     | 
    
         
            -
              # @return [String]
         
     | 
| 
       350 
     | 
    
         
            -
              #   Whatever value is being cached, often a String.
         
     | 
| 
       351 
     | 
    
         
            -
              def cache(key, locale, cascade, message)
         
     | 
| 
       352 
     | 
    
         
            -
                @cache[locale][cascade][key] = message
         
     | 
| 
       353 
     | 
    
         
            -
              end
         
     | 
| 
       354 
     | 
    
         
            -
             
     | 
| 
       355 
     | 
    
         
            -
              # @param key [String]
         
     | 
| 
       356 
     | 
    
         
            -
              #   The cache key, often in the form "something.nested.like.this"
         
     | 
| 
       357 
     | 
    
         
            -
              # @param locale [String]
         
     | 
| 
       358 
     | 
    
         
            -
              #   The locale to store the value for.
         
     | 
| 
       359 
     | 
    
         
            -
              # @param cascade [Boolean]
         
     | 
| 
       360 
     | 
    
         
            -
              #   Was this a cascading lookup?
         
     | 
| 
       361 
     | 
    
         
            -
              # @return [String, nil]
         
     | 
| 
       362 
     | 
    
         
            -
              #   The cached message or nil.
         
     | 
| 
       363 
     | 
    
         
            -
              def cached(key, locale, cascade)
         
     | 
| 
       364 
     | 
    
         
            -
                @cache.dig(locale, cascade, key)
         
     | 
| 
       365 
     | 
    
         
            -
              end
         
     | 
| 
       366 
     | 
    
         
            -
             
     | 
| 
       367 
350 
     | 
    
         
             
              # Localize an Array object.
         
     | 
| 
       368 
351 
     | 
    
         
             
              #
         
     | 
| 
       369 
352 
     | 
    
         
             
              # @param object [Array<String>]
         
     | 
    
        data/test/tater_test.rb
    CHANGED
    
    | 
         @@ -1,7 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
            $LOAD_PATH.unshift File.expand_path('lib', __dir__)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
       4 
4 
     | 
    
         
             
            require 'date'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'minitest/autorun'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'tater'
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
       6 
8 
     | 
    
         
             
            describe Tater do
         
     | 
| 
       7 
9 
     | 
    
         
             
              describe Tater::Utils do
         
     | 
    
        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: 2.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.0.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Evan Lecklider
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-07-12 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -80,6 +80,20 @@ dependencies: 
     | 
|
| 
       80 
80 
     | 
    
         
             
                - - ">="
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
82 
     | 
    
         
             
                    version: '0'
         
     | 
| 
      
 83 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 84 
     | 
    
         
            +
              name: rubocop-packaging
         
     | 
| 
      
 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'
         
     | 
| 
       83 
97 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
98 
     | 
    
         
             
              name: rubocop-performance
         
     | 
| 
       85 
99 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -144,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       144 
158 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       145 
159 
     | 
    
         
             
                  version: '2.0'
         
     | 
| 
       146 
160 
     | 
    
         
             
            requirements: []
         
     | 
| 
       147 
     | 
    
         
            -
            rubygems_version: 3.2. 
     | 
| 
      
 161 
     | 
    
         
            +
            rubygems_version: 3.2.22
         
     | 
| 
       148 
162 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       149 
163 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       150 
164 
     | 
    
         
             
            summary: Minimal internationalization and localization library.
         
     |