cogger 0.23.0 → 0.24.0
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
 - checksums.yaml.gz.sig +0 -0
 - data/README.adoc +21 -12
 - data/cogger.gemspec +1 -1
 - data/lib/cogger/formatters/color.rb +1 -1
 - data/lib/cogger/formatters/emoji.rb +2 -1
 - data/lib/cogger/formatters/json.rb +2 -2
 - data/lib/cogger/formatters/parsers/abstract.rb +25 -0
 - data/lib/cogger/formatters/parsers/combined.rb +24 -0
 - data/lib/cogger/formatters/parsers/element.rb +39 -0
 - data/lib/cogger/formatters/parsers/emoji.rb +38 -0
 - data/lib/cogger/formatters/parsers/key_extractor.rb +30 -0
 - data/lib/cogger/formatters/parsers/specific.rb +49 -0
 - data/lib/cogger/formatters/processors/color.rb +5 -40
 - data.tar.gz.sig +0 -0
 - metadata +8 -5
 - metadata.gz.sig +0 -0
 - data/lib/cogger/formatters/parsers/dynamic.rb +0 -30
 - data/lib/cogger/formatters/parsers/individual.rb +0 -62
 - data/lib/cogger/formatters/parsers/universal.rb +0 -46
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 842b2f64a772746d63f841f53e74e644479a2df6ee539ad17b7f1695cd65930e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: f12f15f27394bc984e32466101da2fbba972fb4f581d23a9c69cb9885b5c73e3
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d4f48bc1845ac01851158ac17c027165335b617883e078e343a202d1e490d36fb4ab24fe4b238de6e4043213043d1be71b9b0b7d71eac958ae7b089d2de00d09
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3e6e608feec69ad5389176a02454e67521da40f8fb89112036c48aa78169a44edec3d3c0ef601524f195c0b22a9b14216a8e64631bd96ad72eba54f02995321c
         
     | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/README.adoc
    CHANGED
    
    | 
         @@ -10,7 +10,7 @@ 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            = Cogger
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            Cogger is a portmanteau for custom logger (i.e. `[c]ustom + l[ogger] = cogger`) which enhances Ruby's native {logger_link} functionality with additional features such as dynamic emojis, colorized text, structured JSON, multiple  
     | 
| 
      
 13 
     | 
    
         
            +
            Cogger is a portmanteau for custom logger (i.e. `[c]ustom + l[ogger] = cogger`) which enhances Ruby's native {logger_link} functionality with additional features such as dynamic emojis, colorized text, structured JSON, multiple streams, and much more. 🚀
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
            toc::[]
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
         @@ -19,7 +19,7 @@ toc::[] 
     | 
|
| 
       19 
19 
     | 
    
         
             
            * Enhances Ruby's default {logger_link} with additional functionality and firepower.
         
     | 
| 
       20 
20 
     | 
    
         
             
            * Provides dynamic/specific emoji output.
         
     | 
| 
       21 
21 
     | 
    
         
             
            * Provides dynamic/specific colorized output via the {tone_link} gem.
         
     | 
| 
       22 
     | 
    
         
            -
            * Provides customizable templates which leverage  
     | 
| 
      
 22 
     | 
    
         
            +
            * Provides customizable templates which leverage the {format_link}.
         
     | 
| 
       23 
23 
     | 
    
         
             
            * Provides customizable formatters for simple, color, emoji, JSON, and/or custom formats.
         
     | 
| 
       24 
24 
     | 
    
         
             
            * Provides multiple streams so you can log the same information to several outputs at once.
         
     | 
| 
       25 
25 
     | 
    
         
             
            * Provides global and individual log entry tagging.
         
     | 
| 
         @@ -28,7 +28,7 @@ toc::[] 
     | 
|
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
            == Screenshots
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
            image::https://alchemists.io/images/projects/cogger/screenshots/demo.png[Rack,width= 
     | 
| 
      
 31 
     | 
    
         
            +
            image::https://alchemists.io/images/projects/cogger/screenshots/demo.png[Rack,width=724,height=1118]
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
            == Requirements
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
         @@ -73,7 +73,7 @@ All behavior is provided by creating an instance of `Cogger`. Example: 
     | 
|
| 
       73 
73 
     | 
    
         
             
            [source,ruby]
         
     | 
| 
       74 
74 
     | 
    
         
             
            ----
         
     | 
| 
       75 
75 
     | 
    
         
             
            logger = Cogger.new
         
     | 
| 
       76 
     | 
    
         
            -
            logger.info "Demo" 
     | 
| 
      
 76 
     | 
    
         
            +
            logger.info "Demo" # 🟢 [console] Demo
         
     | 
| 
       77 
77 
     | 
    
         
             
            ----
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
            If you set your logging level to `debug`, you can walk through each level:
         
     | 
| 
         @@ -213,10 +213,10 @@ Here's a detailed breakdown of the above: 
     | 
|
| 
       213 
213 
     | 
    
         | 
| 
       214 
214 
     | 
    
         
             
            * *Universal*: Applies color universally to the _entire_ template and requires you to:
         
     | 
| 
       215 
215 
     | 
    
         
             
            ** Wrap your entire template in a  and start (`<dynamic>`) and end tag (`</dynamic>`) which works much like an HTML tag in this context.
         
     | 
| 
       216 
     | 
    
         
            -
            ** Your tag names must either be `<dynamic></dynamic>`,  
     | 
| 
      
 216 
     | 
    
         
            +
            ** Your tag names must either be dynamic based on log level: `<dynamic></dynamic>`, a specific color: `<green></green>`, or an alias (example: `<your_alias></your_alias>`) as supported by the {tone_link} gem.
         
     | 
| 
       217 
217 
     | 
    
         
             
            * *Individual*: Individual templates allow you to apply color to _specific_ attributes and require you to:
         
     | 
| 
       218 
     | 
    
         
            -
            ** Format your attributes as  
     | 
| 
       219 
     | 
    
         
            -
            ** The color value (what follows after the colon) can be `dynamic`, any  
     | 
| 
      
 218 
     | 
    
         
            +
            ** Format your attributes as `%<attribute:directive>s`. The colon delimiter is required to separate your attribute for your color choice.
         
     | 
| 
      
 219 
     | 
    
         
            +
            ** The color value (what follows after the colon) can be `dynamic`, any color (example: `green`), or an alias (i.e. `your_alias`) as supported by the {tone_link} gem.
         
     | 
| 
       220 
220 
     | 
    
         | 
| 
       221 
221 
     | 
    
         
             
            In addition to the general categorization of universal and individual tags, each support the following directives:
         
     | 
| 
       222 
222 
     | 
    
         | 
| 
         @@ -380,10 +380,17 @@ Symbols or strings can be used interchangeably when adding/getting formatters. A 
     | 
|
| 
       380 
380 
     | 
    
         | 
| 
       381 
381 
     | 
    
         
             
            [source,ruby]
         
     | 
| 
       382 
382 
     | 
    
         
             
            ----
         
     | 
| 
       383 
     | 
    
         
            -
            Cogger::Formatters::Color::TEMPLATE 
     | 
| 
       384 
     | 
    
         
            -
             
     | 
| 
       385 
     | 
    
         
            -
             
     | 
| 
       386 
     | 
    
         
            -
            Cogger::Formatters:: 
     | 
| 
      
 383 
     | 
    
         
            +
            Cogger::Formatters::Color::TEMPLATE
         
     | 
| 
      
 384 
     | 
    
         
            +
            # "<dynamic>[</dynamic>%<id:dynamic>s<dynamic>]</dynamic> %<message:dynamic>s"
         
     | 
| 
      
 385 
     | 
    
         
            +
             
     | 
| 
      
 386 
     | 
    
         
            +
            Cogger::Formatters::Emoji::TEMPLATE
         
     | 
| 
      
 387 
     | 
    
         
            +
            # "%<emoji:dynamic>s <dynamic>[</dynamic>%<id:dynamic>s<dynamic>]</dynamic> %<message:dynamic>s"
         
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
            Cogger::Formatters::JSON::TEMPLATE
         
     | 
| 
      
 390 
     | 
    
         
            +
            # nil
         
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
            Cogger::Formatters::Simple::TEMPLATE
         
     | 
| 
      
 393 
     | 
    
         
            +
            # "[%<id>s] %<message>s"
         
     | 
| 
       387 
394 
     | 
    
         
             
            ----
         
     | 
| 
       388 
395 
     | 
    
         | 
| 
       389 
396 
     | 
    
         
             
            💡 When you find yourself customizing any of the default formatters, you can reduce typing by adding your custom configuration to the registry and then referring to it via it's associated key when initializing a new logger.
         
     | 
| 
         @@ -457,7 +464,7 @@ The emoji formatter is enabled by default and is the equivalent of initializing 
     | 
|
| 
       457 
464 
     | 
    
         
             
            ----
         
     | 
| 
       458 
465 
     | 
    
         
             
            logger = Cogger.new
         
     | 
| 
       459 
466 
     | 
    
         
             
            logger = Cogger.new formatter: :emoji
         
     | 
| 
       460 
     | 
    
         
            -
            logger = Cogger.new formatter: Cogger::Formatters::Emoji.new 
     | 
| 
      
 467 
     | 
    
         
            +
            logger = Cogger.new formatter: Cogger::Formatters::Emoji.new
         
     | 
| 
       461 
468 
     | 
    
         
             
            ----
         
     | 
| 
       462 
469 
     | 
    
         | 
| 
       463 
470 
     | 
    
         
             
            All of the above examples are identical so you can see how different formatters can be used and customized further. The default emojis are registered as follows:
         
     | 
| 
         @@ -1042,6 +1049,8 @@ bin/rake 
     | 
|
| 
       1042 
1049 
     | 
    
         | 
| 
       1043 
1050 
     | 
    
         
             
            == link:https://alchemists.io/policies/contributions[Contributions]
         
     | 
| 
       1044 
1051 
     | 
    
         | 
| 
      
 1052 
     | 
    
         
            +
            == link:https://alchemists.io/policies/developer_certificate_of_origin[Developer Certificate of Origin]
         
     | 
| 
      
 1053 
     | 
    
         
            +
             
     | 
| 
       1045 
1054 
     | 
    
         
             
            == link:https://alchemists.io/projects/cogger/versions[Versions]
         
     | 
| 
       1046 
1055 
     | 
    
         | 
| 
       1047 
1056 
     | 
    
         
             
            == link:https://alchemists.io/community[Community]
         
     | 
    
        data/cogger.gemspec
    CHANGED
    
    
| 
         @@ -4,7 +4,7 @@ module Cogger 
     | 
|
| 
       4 
4 
     | 
    
         
             
              module Formatters
         
     | 
| 
       5 
5 
     | 
    
         
             
                # Formats by color.
         
     | 
| 
       6 
6 
     | 
    
         
             
                class Color
         
     | 
| 
       7 
     | 
    
         
            -
                  TEMPLATE = "[ 
     | 
| 
      
 7 
     | 
    
         
            +
                  TEMPLATE = "<dynamic>[</dynamic>%<id:dynamic>s<dynamic>]</dynamic> %<message:dynamic>s"
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                  def initialize template = TEMPLATE, processor: Processors::Color.new
         
     | 
| 
       10 
10 
     | 
    
         
             
                    @template = template
         
     | 
| 
         @@ -4,7 +4,8 @@ module Cogger 
     | 
|
| 
       4 
4 
     | 
    
         
             
              module Formatters
         
     | 
| 
       5 
5 
     | 
    
         
             
                # Formats by emoji and color.
         
     | 
| 
       6 
6 
     | 
    
         
             
                class Emoji < Color
         
     | 
| 
       7 
     | 
    
         
            -
                  TEMPLATE = "%<emoji:dynamic>s [ 
     | 
| 
      
 7 
     | 
    
         
            +
                  TEMPLATE = "%<emoji:dynamic>s <dynamic>[</dynamic>%<id:dynamic>s<dynamic>]</dynamic> " \
         
     | 
| 
      
 8 
     | 
    
         
            +
                             "%<message:dynamic>s"
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
                  def initialize(template = TEMPLATE, ...)
         
     | 
| 
       10 
11 
     | 
    
         
             
                    super
         
     | 
| 
         @@ -10,9 +10,9 @@ module Cogger 
     | 
|
| 
       10 
10 
     | 
    
         
             
                  TEMPLATE = nil
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                  def initialize template = TEMPLATE,
         
     | 
| 
       13 
     | 
    
         
            -
                                 parser: Parsers:: 
     | 
| 
      
 13 
     | 
    
         
            +
                                 parser: Parsers::KeyExtractor.new,
         
     | 
| 
       14 
14 
     | 
    
         
             
                                 sanitizer: Kit::Sanitizer
         
     | 
| 
       15 
     | 
    
         
            -
                    @positions = template ? parser.call(template) 
     | 
| 
      
 15 
     | 
    
         
            +
                    @positions = template ? parser.call(template) : Core::EMPTY_ARRAY
         
     | 
| 
       16 
16 
     | 
    
         
             
                    @sanitizer = sanitizer
         
     | 
| 
       17 
17 
     | 
    
         
             
                  end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Cogger
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Formatters
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Parsers
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # An abstrct class with default functionality.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  class Abstract
         
     | 
| 
      
 8 
     | 
    
         
            +
                    def initialize registry: Cogger, colorizer: Kit::Colorizer, expressor: Regexp
         
     | 
| 
      
 9 
     | 
    
         
            +
                      @registry = registry
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @colorizer = colorizer
         
     | 
| 
      
 11 
     | 
    
         
            +
                      @expressor = expressor
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    def call(_template, **)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      fail NoMethodError,
         
     | 
| 
      
 16 
     | 
    
         
            +
                           "`#{self.class}##{__method__} #{method(__method__).parameters}` must be implemented."
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    protected
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    attr_reader :registry, :colorizer, :expressor
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Cogger
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Formatters
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Parsers
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Parses template literals, emojis, and keys for specific and dynamic colors.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  class Combined
         
     | 
| 
      
 8 
     | 
    
         
            +
                    STEPS = [Element.new, Emoji.new, Specific.new].freeze
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    def initialize steps: STEPS
         
     | 
| 
      
 11 
     | 
    
         
            +
                      @steps = steps
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    def call(template, **attributes)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      steps.reduce(template.dup) { |modification, step| step.call modification, **attributes }
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    private
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    attr_reader :steps
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Cogger
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Formatters
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Parsers
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Parses template elements for specific and dynamic colors.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  class Element < Abstract
         
     | 
| 
      
 8 
     | 
    
         
            +
                    PATTERN = %r(
         
     | 
| 
      
 9 
     | 
    
         
            +
                                <                # Tag open start.
         
     | 
| 
      
 10 
     | 
    
         
            +
                                (?<name>\w+)     # Tag open name.
         
     | 
| 
      
 11 
     | 
    
         
            +
                                >                # Tag open end.
         
     | 
| 
      
 12 
     | 
    
         
            +
                                (?<content>.+?)  # Content.
         
     | 
| 
      
 13 
     | 
    
         
            +
                                </               # Tag close start.
         
     | 
| 
      
 14 
     | 
    
         
            +
                                \w+              # Tag close.
         
     | 
| 
      
 15 
     | 
    
         
            +
                                >                # Tag close end.
         
     | 
| 
      
 16 
     | 
    
         
            +
                              )mx
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    def initialize pattern: PATTERN
         
     | 
| 
      
 19 
     | 
    
         
            +
                      super()
         
     | 
| 
      
 20 
     | 
    
         
            +
                      @pattern = pattern
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                    def call(template, **)
         
     | 
| 
      
 24 
     | 
    
         
            +
                      template.gsub! pattern do
         
     | 
| 
      
 25 
     | 
    
         
            +
                        captures = expressor.last_match.named_captures
         
     | 
| 
      
 26 
     | 
    
         
            +
                        color = colorizer.call(captures["name"], **)
         
     | 
| 
      
 27 
     | 
    
         
            +
                        registry.color[captures["content"], color]
         
     | 
| 
      
 28 
     | 
    
         
            +
                      end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                      template
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    private
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    attr_reader :pattern
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Cogger
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Formatters
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Parsers
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Parses template emojis for specific and dynamic colors.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  class Emoji < Abstract
         
     | 
| 
      
 8 
     | 
    
         
            +
                    PATTERN = /
         
     | 
| 
      
 9 
     | 
    
         
            +
                                %<             # Start.
         
     | 
| 
      
 10 
     | 
    
         
            +
                                emoji          # Name.
         
     | 
| 
      
 11 
     | 
    
         
            +
                                :              # Delimiter.
         
     | 
| 
      
 12 
     | 
    
         
            +
                                (?<color>\w+)  # Color.
         
     | 
| 
      
 13 
     | 
    
         
            +
                                >s             # End.
         
     | 
| 
      
 14 
     | 
    
         
            +
                              /x
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    def initialize pattern: PATTERN
         
     | 
| 
      
 17 
     | 
    
         
            +
                      super()
         
     | 
| 
      
 18 
     | 
    
         
            +
                      @pattern = pattern
         
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    def call(template, **)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      template.gsub! pattern do
         
     | 
| 
      
 23 
     | 
    
         
            +
                        captures = expressor.last_match.named_captures
         
     | 
| 
      
 24 
     | 
    
         
            +
                        color = colorizer.call(captures["color"], **)
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                        registry.get_emoji color
         
     | 
| 
      
 27 
     | 
    
         
            +
                      end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                      template
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    private
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    attr_reader :pattern
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Cogger
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Formatters
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Parsers
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Parses template and extracts keys.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  class KeyExtractor
         
     | 
| 
      
 8 
     | 
    
         
            +
                    PATTERN = /
         
     | 
| 
      
 9 
     | 
    
         
            +
                                %             # Start.
         
     | 
| 
      
 10 
     | 
    
         
            +
                                ?             # Flag, width, or precision.
         
     | 
| 
      
 11 
     | 
    
         
            +
                                <             # Reference start.
         
     | 
| 
      
 12 
     | 
    
         
            +
                                (?<name>\w+)  # Name.
         
     | 
| 
      
 13 
     | 
    
         
            +
                                (?::[\w]+)?   # Optional delimiter and or color.
         
     | 
| 
      
 14 
     | 
    
         
            +
                                >             # Reference end.
         
     | 
| 
      
 15 
     | 
    
         
            +
                                ?             # Specifier.
         
     | 
| 
      
 16 
     | 
    
         
            +
                              /x
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    def initialize pattern: PATTERN
         
     | 
| 
      
 19 
     | 
    
         
            +
                      @pattern = pattern
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    def call(template) = template.scan(pattern).map { |match| match.first.to_sym }
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    private
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    attr_reader :pattern
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "core"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Cogger
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Formatters
         
     | 
| 
      
 7 
     | 
    
         
            +
                module Parsers
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # Parses template for specific and dynamic string format specifiers.
         
     | 
| 
      
 9 
     | 
    
         
            +
                  class Specific < Abstract
         
     | 
| 
      
 10 
     | 
    
         
            +
                    PATTERN = /
         
     | 
| 
      
 11 
     | 
    
         
            +
                                %                                   # Start.
         
     | 
| 
      
 12 
     | 
    
         
            +
                                (?<flag>[\s#+-0*])?                 # Optional flag.
         
     | 
| 
      
 13 
     | 
    
         
            +
                                (?<width>\d+)?                      # Optional width.
         
     | 
| 
      
 14 
     | 
    
         
            +
                                \.?                                 # Optional precision delimiter.
         
     | 
| 
      
 15 
     | 
    
         
            +
                                (?<precision>\d+)?                  # Optional precision value.
         
     | 
| 
      
 16 
     | 
    
         
            +
                                <                                   # Reference start.
         
     | 
| 
      
 17 
     | 
    
         
            +
                                (?<name>\w+)                        # Name.
         
     | 
| 
      
 18 
     | 
    
         
            +
                                :                                   # Delimiter.
         
     | 
| 
      
 19 
     | 
    
         
            +
                                (?<color>\w+)                       # Color.
         
     | 
| 
      
 20 
     | 
    
         
            +
                                >                                   # Reference end.
         
     | 
| 
      
 21 
     | 
    
         
            +
                                (?<specifier>[ABEGXabcdefgiopsux])  # Specifier.
         
     | 
| 
      
 22 
     | 
    
         
            +
                              /x
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    def initialize pattern: PATTERN
         
     | 
| 
      
 25 
     | 
    
         
            +
                      super()
         
     | 
| 
      
 26 
     | 
    
         
            +
                      @pattern = pattern
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                    # :reek:TooManyStatements
         
     | 
| 
      
 30 
     | 
    
         
            +
                    def call(template, **)
         
     | 
| 
      
 31 
     | 
    
         
            +
                      template.gsub! pattern do |match|
         
     | 
| 
      
 32 
     | 
    
         
            +
                        captures = expressor.last_match.named_captures
         
     | 
| 
      
 33 
     | 
    
         
            +
                        original_color = captures["color"]
         
     | 
| 
      
 34 
     | 
    
         
            +
                        color = colorizer.call(original_color, **)
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                        match.sub! ":#{original_color}", Core::EMPTY_STRING
         
     | 
| 
      
 37 
     | 
    
         
            +
                        registry.color[match, color]
         
     | 
| 
      
 38 
     | 
    
         
            +
                      end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                      template
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    private
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                    attr_reader :pattern
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,58 +1,23 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require "tone"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
3 
     | 
    
         
             
            module Cogger
         
     | 
| 
       6 
4 
     | 
    
         
             
              module Formatters
         
     | 
| 
       7 
5 
     | 
    
         
             
                module Processors
         
     | 
| 
       8 
     | 
    
         
            -
                  # Processes  
     | 
| 
      
 6 
     | 
    
         
            +
                  # Processes template with entry input using all template parsers.
         
     | 
| 
       9 
7 
     | 
    
         
             
                  class Color
         
     | 
| 
       10 
     | 
    
         
            -
                    def initialize parser: Parsers:: 
     | 
| 
       11 
     | 
    
         
            -
                                   kit: {sanitizer: Kit::Sanitizer, colorizer: Kit::Colorizer},
         
     | 
| 
       12 
     | 
    
         
            -
                                   registry: Cogger
         
     | 
| 
      
 8 
     | 
    
         
            +
                    def initialize parser: Parsers::Combined.new, sanitizer: Kit::Sanitizer
         
     | 
| 
       13 
9 
     | 
    
         
             
                      @parser = parser
         
     | 
| 
       14 
     | 
    
         
            -
                      @ 
     | 
| 
       15 
     | 
    
         
            -
                      @registry = registry
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @sanitizer = sanitizer
         
     | 
| 
       16 
11 
     | 
    
         
             
                    end
         
     | 
| 
       17 
12 
     | 
    
         | 
| 
       18 
13 
     | 
    
         
             
                    def call(template, *input)
         
     | 
| 
       19 
14 
     | 
    
         
             
                      attributes = sanitizer.call(*input).tagged
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                      case parser.call template
         
     | 
| 
       22 
     | 
    
         
            -
                        in [String => body, String => style] then universal body, style, **attributes
         
     | 
| 
       23 
     | 
    
         
            -
                        in [String => body, Hash => styles] then individual body, attributes, styles
         
     | 
| 
       24 
     | 
    
         
            -
                        # :nocov:
         
     | 
| 
       25 
     | 
    
         
            -
                      end
         
     | 
| 
      
 15 
     | 
    
         
            +
                      [parser.call(template, **attributes), attributes]
         
     | 
| 
       26 
16 
     | 
    
         
             
                    end
         
     | 
| 
       27 
17 
     | 
    
         | 
| 
       28 
18 
     | 
    
         
             
                    private
         
     | 
| 
       29 
19 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
                    attr_reader :parser, : 
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                    def universal body, style, **attributes
         
     | 
| 
       33 
     | 
    
         
            -
                      [registry.color[body, colorizer.call(style, attributes)], attributes]
         
     | 
| 
       34 
     | 
    
         
            -
                    end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                    def individual body, attributes, styles
         
     | 
| 
       37 
     | 
    
         
            -
                      attributes = attributes.each.with_object({}) do |(key, value), collection|
         
     | 
| 
       38 
     | 
    
         
            -
                        collection[key] = registry.color[value, colorizer.call(styles[key], attributes)]
         
     | 
| 
       39 
     | 
    
         
            -
                      end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                      emojify attributes, styles
         
     | 
| 
       42 
     | 
    
         
            -
                      [body, attributes]
         
     | 
| 
       43 
     | 
    
         
            -
                    end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                    def emojify attributes, styles
         
     | 
| 
       46 
     | 
    
         
            -
                      style = styles[:emoji]
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                      return unless style
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                      attributes[:emoji] = registry.get_emoji colorizer.call(style, attributes)
         
     | 
| 
       51 
     | 
    
         
            -
                    end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                    def sanitizer = kit.fetch :sanitizer
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                    def colorizer = kit.fetch :colorizer
         
     | 
| 
      
 20 
     | 
    
         
            +
                    attr_reader :parser, :sanitizer
         
     | 
| 
       56 
21 
     | 
    
         
             
                  end
         
     | 
| 
       57 
22 
     | 
    
         
             
                end
         
     | 
| 
       58 
23 
     | 
    
         
             
              end
         
     | 
    
        data.tar.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: cogger
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.24.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Brooke Kuhlmann
         
     | 
| 
         @@ -35,7 +35,7 @@ cert_chain: 
     | 
|
| 
       35 
35 
     | 
    
         
             
              3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
         
     | 
| 
       36 
36 
     | 
    
         
             
              gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
         
     | 
| 
       37 
37 
     | 
    
         
             
              -----END CERTIFICATE-----
         
     | 
| 
       38 
     | 
    
         
            -
            date: 2024-08- 
     | 
| 
      
 38 
     | 
    
         
            +
            date: 2024-08-23 00:00:00.000000000 Z
         
     | 
| 
       39 
39 
     | 
    
         
             
            dependencies:
         
     | 
| 
       40 
40 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       41 
41 
     | 
    
         
             
              name: core
         
     | 
| 
         @@ -114,9 +114,12 @@ files: 
     | 
|
| 
       114 
114 
     | 
    
         
             
            - lib/cogger/formatters/json.rb
         
     | 
| 
       115 
115 
     | 
    
         
             
            - lib/cogger/formatters/kit/colorizer.rb
         
     | 
| 
       116 
116 
     | 
    
         
             
            - lib/cogger/formatters/kit/sanitizer.rb
         
     | 
| 
       117 
     | 
    
         
            -
            - lib/cogger/formatters/parsers/ 
     | 
| 
       118 
     | 
    
         
            -
            - lib/cogger/formatters/parsers/ 
     | 
| 
       119 
     | 
    
         
            -
            - lib/cogger/formatters/parsers/ 
     | 
| 
      
 117 
     | 
    
         
            +
            - lib/cogger/formatters/parsers/abstract.rb
         
     | 
| 
      
 118 
     | 
    
         
            +
            - lib/cogger/formatters/parsers/combined.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
            - lib/cogger/formatters/parsers/element.rb
         
     | 
| 
      
 120 
     | 
    
         
            +
            - lib/cogger/formatters/parsers/emoji.rb
         
     | 
| 
      
 121 
     | 
    
         
            +
            - lib/cogger/formatters/parsers/key_extractor.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - lib/cogger/formatters/parsers/specific.rb
         
     | 
| 
       120 
123 
     | 
    
         
             
            - lib/cogger/formatters/processors/color.rb
         
     | 
| 
       121 
124 
     | 
    
         
             
            - lib/cogger/formatters/simple.rb
         
     | 
| 
       122 
125 
     | 
    
         
             
            - lib/cogger/hub.rb
         
     | 
    
        metadata.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
| 
         @@ -1,30 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Cogger
         
     | 
| 
       4 
     | 
    
         
            -
              module Formatters
         
     | 
| 
       5 
     | 
    
         
            -
                module Parsers
         
     | 
| 
       6 
     | 
    
         
            -
                  # Dynamically extracts the universal or individual template attributes for log entry parsing.
         
     | 
| 
       7 
     | 
    
         
            -
                  class Dynamic
         
     | 
| 
       8 
     | 
    
         
            -
                    # Order matters.
         
     | 
| 
       9 
     | 
    
         
            -
                    DELEGATES = [Universal.new, Individual.new].freeze
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                    def initialize delegates: DELEGATES
         
     | 
| 
       12 
     | 
    
         
            -
                      @delegates = delegates
         
     | 
| 
       13 
     | 
    
         
            -
                    end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                    def call(template) = parse(template) || template
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                    private
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                    attr_reader :delegates
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                    def parse template
         
     | 
| 
       22 
     | 
    
         
            -
                      delegates.find do |delegate|
         
     | 
| 
       23 
     | 
    
         
            -
                        result = delegate.call template
         
     | 
| 
       24 
     | 
    
         
            -
                        break result unless result == template
         
     | 
| 
       25 
     | 
    
         
            -
                      end
         
     | 
| 
       26 
     | 
    
         
            -
                    end
         
     | 
| 
       27 
     | 
    
         
            -
                  end
         
     | 
| 
       28 
     | 
    
         
            -
                end
         
     | 
| 
       29 
     | 
    
         
            -
              end
         
     | 
| 
       30 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,62 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Cogger
         
     | 
| 
       4 
     | 
    
         
            -
              module Formatters
         
     | 
| 
       5 
     | 
    
         
            -
                module Parsers
         
     | 
| 
       6 
     | 
    
         
            -
                  # Sanitizes and extracts individual directives from a template.
         
     | 
| 
       7 
     | 
    
         
            -
                  class Individual
         
     | 
| 
       8 
     | 
    
         
            -
                    # rubocop:todo Lint/MixedRegexpCaptureTypes
         
     | 
| 
       9 
     | 
    
         
            -
                    PATTERN = /
         
     | 
| 
       10 
     | 
    
         
            -
                                %                                   # Strict reference syntax.
         
     | 
| 
       11 
     | 
    
         
            -
                                (?<flag>[\s#+-0*])?                 # Optional flag.
         
     | 
| 
       12 
     | 
    
         
            -
                                (?<width>\d+)?                      # Optional width.
         
     | 
| 
       13 
     | 
    
         
            -
                                \.?                                 # Optional precision delimiter.
         
     | 
| 
       14 
     | 
    
         
            -
                                (?<precision>\d+)?                  # Optional precision value.
         
     | 
| 
       15 
     | 
    
         
            -
                                <                                   # Reference start.
         
     | 
| 
       16 
     | 
    
         
            -
                                (                                   # Conditional start.
         
     | 
| 
       17 
     | 
    
         
            -
                                (?<key>\w+)                         # Key.
         
     | 
| 
       18 
     | 
    
         
            -
                                :                                   # Directive delimiter.
         
     | 
| 
       19 
     | 
    
         
            -
                                (?<directive>\w+)                   # Value.
         
     | 
| 
       20 
     | 
    
         
            -
                                |                                   # Conditional.
         
     | 
| 
       21 
     | 
    
         
            -
                                (?<key>\w+)                         # Key.
         
     | 
| 
       22 
     | 
    
         
            -
                                )                                   # Conditional end.
         
     | 
| 
       23 
     | 
    
         
            -
                                >                                   # Reference end.
         
     | 
| 
       24 
     | 
    
         
            -
                                (?<specifier>[ABEGXabcdefgiopsux])  # Specifier.
         
     | 
| 
       25 
     | 
    
         
            -
                              /mx
         
     | 
| 
       26 
     | 
    
         
            -
                    # rubocop:enable Lint/MixedRegexpCaptureTypes
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                    def initialize pattern: PATTERN
         
     | 
| 
       29 
     | 
    
         
            -
                      @pattern = pattern
         
     | 
| 
       30 
     | 
    
         
            -
                    end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                    def call template
         
     | 
| 
       33 
     | 
    
         
            -
                      attributes = {}
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                      return [template, attributes] unless template.match? pattern
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                      template = sanitize_and_extract template, attributes
         
     | 
| 
       38 
     | 
    
         
            -
                      [template, attributes]
         
     | 
| 
       39 
     | 
    
         
            -
                    end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                    private
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                    attr_reader :pattern
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                    # :reek:FeatureEnvy
         
     | 
| 
       46 
     | 
    
         
            -
                    # :reek:TooManyStatements
         
     | 
| 
       47 
     | 
    
         
            -
                    def sanitize_and_extract template, attributes
         
     | 
| 
       48 
     | 
    
         
            -
                      template.gsub pattern do
         
     | 
| 
       49 
     | 
    
         
            -
                        captures = Regexp.last_match.named_captures symbolize_names: true
         
     | 
| 
       50 
     | 
    
         
            -
                        attributes[captures[:key].to_sym] = captures[:directive]
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                        captures.reduce(+"%") do |body, (key, value)|
         
     | 
| 
       53 
     | 
    
         
            -
                          next body if key == :directive
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                          body.concat key == :key ? "<#{value}>" : value.to_s
         
     | 
| 
       56 
     | 
    
         
            -
                        end
         
     | 
| 
       57 
     | 
    
         
            -
                      end
         
     | 
| 
       58 
     | 
    
         
            -
                    end
         
     | 
| 
       59 
     | 
    
         
            -
                  end
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
              end
         
     | 
| 
       62 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,46 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "core"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module Cogger
         
     | 
| 
       6 
     | 
    
         
            -
              module Formatters
         
     | 
| 
       7 
     | 
    
         
            -
                module Parsers
         
     | 
| 
       8 
     | 
    
         
            -
                  # Sanitizes and extracts the universal directive a template.
         
     | 
| 
       9 
     | 
    
         
            -
                  class Universal
         
     | 
| 
       10 
     | 
    
         
            -
                    # rubocop:todo Lint/MixedRegexpCaptureTypes
         
     | 
| 
       11 
     | 
    
         
            -
                    PATTERN = %r(
         
     | 
| 
       12 
     | 
    
         
            -
                                (                  # Conditional start.
         
     | 
| 
       13 
     | 
    
         
            -
                                \A                 # Search start.
         
     | 
| 
       14 
     | 
    
         
            -
                                <                  # Tag start.
         
     | 
| 
       15 
     | 
    
         
            -
                                (?<directive>\w+)  # Directive.
         
     | 
| 
       16 
     | 
    
         
            -
                                >                  # Tag end.
         
     | 
| 
       17 
     | 
    
         
            -
                                |                  # Conditional pipe.
         
     | 
| 
       18 
     | 
    
         
            -
                                <                  # Tag start.
         
     | 
| 
       19 
     | 
    
         
            -
                                /                  # Tag close.
         
     | 
| 
       20 
     | 
    
         
            -
                                (?<directive>\w+)  # Directive.
         
     | 
| 
       21 
     | 
    
         
            -
                                >                  # Tag end.
         
     | 
| 
       22 
     | 
    
         
            -
                                \Z                 # Search end.
         
     | 
| 
       23 
     | 
    
         
            -
                                )                  # Conditional end.
         
     | 
| 
       24 
     | 
    
         
            -
                              )mx
         
     | 
| 
       25 
     | 
    
         
            -
                    # rubocop:enable Lint/MixedRegexpCaptureTypes
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                    KEY = "directive"
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                    def initialize pattern: PATTERN, key: KEY
         
     | 
| 
       30 
     | 
    
         
            -
                      @pattern = pattern
         
     | 
| 
       31 
     | 
    
         
            -
                      @key = key
         
     | 
| 
       32 
     | 
    
         
            -
                    end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                    def call template
         
     | 
| 
       35 
     | 
    
         
            -
                      return template unless template.match? pattern
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                      [template.gsub(pattern, Core::EMPTY_STRING), template.match(pattern)[key]]
         
     | 
| 
       38 
     | 
    
         
            -
                    end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                    private
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                    attr_reader :pattern, :key
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
              end
         
     | 
| 
       46 
     | 
    
         
            -
            end
         
     |