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.
         |