temple 0.9.1 → 0.10.2
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/.github/workflows/test.yml +2 -1
 - data/CHANGES +16 -0
 - data/Gemfile +0 -1
 - data/lib/temple/engine.rb +1 -0
 - data/lib/temple/erb/engine.rb +3 -0
 - data/lib/temple/erb/parser.rb +1 -0
 - data/lib/temple/erb/template.rb +1 -0
 - data/lib/temple/erb/trimming.rb +1 -0
 - data/lib/temple/exceptions.rb +1 -0
 - data/lib/temple/filter.rb +1 -0
 - data/lib/temple/filters/ambles.rb +1 -0
 - data/lib/temple/filters/code_merger.rb +1 -0
 - data/lib/temple/filters/control_flow.rb +1 -0
 - data/lib/temple/filters/dynamic_inliner.rb +2 -1
 - data/lib/temple/filters/encoding.rb +1 -0
 - data/lib/temple/filters/eraser.rb +1 -0
 - data/lib/temple/filters/escapable.rb +1 -0
 - data/lib/temple/filters/multi_flattener.rb +1 -0
 - data/lib/temple/filters/remove_bom.rb +1 -0
 - data/lib/temple/filters/static_analyzer.rb +1 -0
 - data/lib/temple/filters/static_merger.rb +1 -0
 - data/lib/temple/filters/string_splitter.rb +2 -1
 - data/lib/temple/filters/validator.rb +1 -0
 - data/lib/temple/generator.rb +9 -12
 - data/lib/temple/generators/array.rb +1 -0
 - data/lib/temple/generators/array_buffer.rb +1 -0
 - data/lib/temple/generators/erb.rb +1 -0
 - data/lib/temple/generators/rails_output_buffer.rb +7 -3
 - data/lib/temple/generators/string_buffer.rb +2 -1
 - data/lib/temple/grammar.rb +1 -0
 - data/lib/temple/html/attribute_merger.rb +1 -0
 - data/lib/temple/html/attribute_remover.rb +1 -0
 - data/lib/temple/html/attribute_sorter.rb +1 -0
 - data/lib/temple/html/dispatcher.rb +1 -0
 - data/lib/temple/html/fast.rb +1 -0
 - data/lib/temple/html/filter.rb +1 -0
 - data/lib/temple/html/pretty.rb +1 -0
 - data/lib/temple/html/safe.rb +1 -0
 - data/lib/temple/map.rb +1 -0
 - data/lib/temple/mixins/dispatcher.rb +1 -0
 - data/lib/temple/mixins/engine_dsl.rb +1 -0
 - data/lib/temple/mixins/grammar_dsl.rb +2 -1
 - data/lib/temple/mixins/options.rb +1 -0
 - data/lib/temple/mixins/template.rb +1 -0
 - data/lib/temple/parser.rb +1 -0
 - data/lib/temple/static_analyzer.rb +1 -0
 - data/lib/temple/templates/rails.rb +3 -2
 - data/lib/temple/templates/tilt.rb +1 -0
 - data/lib/temple/templates.rb +1 -0
 - data/lib/temple/utils.rb +3 -1
 - data/lib/temple/version.rb +2 -1
 - data/lib/temple.rb +1 -0
 - data/spec/filters/string_splitter_spec.rb +1 -1
 - data/spec/generator_spec.rb +22 -10
 - data/temple.gemspec +0 -1
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 3fdf456fd2d277a110681cc1d0dd228bba3b75306b3caa78fb12ad668a7665c6
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 7dfdd5001be5c652254aab301e391d7652c0bc1e44a00ee9fe5002c1899e99c1
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 4d5847567944020f1be6ddf6b96b056ff0154cb26b00e71d4c736337cddc3e1ceb402ef4eabc3fa8a150ec56fd560cb0ac22358c8f1673bc2dfabb8407a482b9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f8f766aeb193a7bf781297dff7628d2e9d09840a241130f4a04f60b72e16d237c965f327696788e29f58ddadc1ce843392a52619363fc19dc5da66966d42ed09
         
     | 
    
        data/.github/workflows/test.yml
    CHANGED
    
    
    
        data/CHANGES
    CHANGED
    
    | 
         @@ -1,6 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            0.10.2
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              * Fix Sinatra capture_generator problem (#145)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            0.10.1
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              * Use specified :capture_generator for nested captures (#112, #144)
         
     | 
| 
      
 8 
     | 
    
         
            +
              * Compatibility with frozen string literals
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            0.10.0
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              * Regression: Revert changes to :capture_generator since 0.8.2 (#112, #113, #137)
         
     | 
| 
      
 13 
     | 
    
         
            +
              * Regression: Ensure that output buffer is not reused for capturing in Rails (#135)
         
     | 
| 
      
 14 
     | 
    
         
            +
              * Drop support for Rails 4.x
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       1 
16 
     | 
    
         
             
            0.9.1
         
     | 
| 
       2 
17 
     | 
    
         | 
| 
       3 
18 
     | 
    
         
             
              * Fix Slim's error in AttributeMerger due to 0.9.0's :capture_generator (#137)
         
     | 
| 
      
 19 
     | 
    
         
            +
              * Use specified :capture_generator for nested captures (#112)
         
     | 
| 
       4 
20 
     | 
    
         
             
              * Fix Temple::ERB::Engine's <%= to not escape and <%== to escape expressions
         
     | 
| 
       5 
21 
     | 
    
         | 
| 
       6 
22 
     | 
    
         
             
            0.9.0
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/lib/temple/engine.rb
    CHANGED
    
    
    
        data/lib/temple/erb/engine.rb
    CHANGED
    
    | 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            module Temple
         
     | 
| 
       2 
3 
     | 
    
         
             
              module ERB
         
     | 
| 
       3 
4 
     | 
    
         
             
                # Example ERB engine implementation
         
     | 
| 
         @@ -7,6 +8,8 @@ module Temple 
     | 
|
| 
       7 
8 
     | 
    
         
             
                  use Temple::ERB::Parser
         
     | 
| 
       8 
9 
     | 
    
         
             
                  use Temple::ERB::Trimming
         
     | 
| 
       9 
10 
     | 
    
         
             
                  filter :Escapable
         
     | 
| 
      
 11 
     | 
    
         
            +
                  filter :StringSplitter
         
     | 
| 
      
 12 
     | 
    
         
            +
                  filter :StaticAnalyzer
         
     | 
| 
       10 
13 
     | 
    
         
             
                  filter :MultiFlattener
         
     | 
| 
       11 
14 
     | 
    
         
             
                  filter :StaticMerger
         
     | 
| 
       12 
15 
     | 
    
         
             
                  generator :ArrayBuffer
         
     | 
    
        data/lib/temple/erb/parser.rb
    CHANGED
    
    
    
        data/lib/temple/erb/template.rb
    CHANGED
    
    
    
        data/lib/temple/erb/trimming.rb
    CHANGED
    
    
    
        data/lib/temple/exceptions.rb
    CHANGED
    
    
    
        data/lib/temple/filter.rb
    CHANGED
    
    
| 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            module Temple
         
     | 
| 
       2 
3 
     | 
    
         
             
              module Filters
         
     | 
| 
       3 
4 
     | 
    
         
             
                # Inlines several static/dynamic into a single dynamic.
         
     | 
| 
         @@ -36,7 +37,7 @@ module Temple 
     | 
|
| 
       36 
37 
     | 
    
         
             
                          # another one, we add both then.
         
     | 
| 
       37 
38 
     | 
    
         
             
                          state = :single
         
     | 
| 
       38 
39 
     | 
    
         
             
                          prev = [exp]
         
     | 
| 
       39 
     | 
    
         
            -
                          curr = [:dynamic, '"']
         
     | 
| 
      
 40 
     | 
    
         
            +
                          curr = [:dynamic, '"'.dup]
         
     | 
| 
       40 
41 
     | 
    
         
             
                        when :single
         
     | 
| 
       41 
42 
     | 
    
         
             
                          # Yes! We found another one. Add the current dynamic to the result.
         
     | 
| 
       42 
43 
     | 
    
         
             
                          state = :several
         
     | 
| 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            begin
         
     | 
| 
       2 
3 
     | 
    
         
             
              require 'ripper'
         
     | 
| 
       3 
4 
     | 
    
         
             
            rescue LoadError
         
     | 
| 
         @@ -7,7 +8,7 @@ module Temple 
     | 
|
| 
       7 
8 
     | 
    
         
             
              module Filters
         
     | 
| 
       8 
9 
     | 
    
         
             
                # Compile [:dynamic, "foo#{bar}"] to [:multi, [:static, 'foo'], [:dynamic, 'bar']]
         
     | 
| 
       9 
10 
     | 
    
         
             
                class StringSplitter < Filter
         
     | 
| 
       10 
     | 
    
         
            -
                  if defined?(Ripper) &&  
     | 
| 
      
 11 
     | 
    
         
            +
                  if defined?(Ripper) && Ripper.respond_to?(:lex)
         
     | 
| 
       11 
12 
     | 
    
         
             
                    class << self
         
     | 
| 
       12 
13 
     | 
    
         
             
                      # `code` param must be valid string literal
         
     | 
| 
       13 
14 
     | 
    
         
             
                      def compile(code)
         
     | 
    
        data/lib/temple/generator.rb
    CHANGED
    
    | 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            module Temple
         
     | 
| 
       2 
3 
     | 
    
         
             
              # Abstract generator base class
         
     | 
| 
       3 
4 
     | 
    
         
             
              # Generators should inherit this class and
         
     | 
| 
         @@ -10,9 +11,9 @@ module Temple 
     | 
|
| 
       10 
11 
     | 
    
         
             
                include Mixins::Options
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
                define_options :save_buffer,
         
     | 
| 
       13 
     | 
    
         
            -
                               capture_generator:  
     | 
| 
      
 14 
     | 
    
         
            +
                               capture_generator: 'StringBuffer',
         
     | 
| 
       14 
15 
     | 
    
         
             
                               buffer: '_buf',
         
     | 
| 
       15 
     | 
    
         
            -
                               freeze_static:  
     | 
| 
      
 16 
     | 
    
         
            +
                               freeze_static: true
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
18 
     | 
    
         
             
                def call(exp)
         
     | 
| 
       18 
19 
     | 
    
         
             
                  [preamble, compile(exp), postamble].flatten.compact.join('; ')
         
     | 
| 
         @@ -54,7 +55,9 @@ module Temple 
     | 
|
| 
       54 
55 
     | 
    
         
             
                end
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
       56 
57 
     | 
    
         
             
                def on_capture(name, exp)
         
     | 
| 
       57 
     | 
    
         
            -
                  capture_generator.new( 
     | 
| 
      
 58 
     | 
    
         
            +
                  capture_generator.new(capture_generator: options[:capture_generator],
         
     | 
| 
      
 59 
     | 
    
         
            +
                                        freeze_static: options[:freeze_static],
         
     | 
| 
      
 60 
     | 
    
         
            +
                                        buffer: name).call(exp)
         
     | 
| 
       58 
61 
     | 
    
         
             
                end
         
     | 
| 
       59 
62 
     | 
    
         | 
| 
       60 
63 
     | 
    
         
             
                def on_static(text)
         
     | 
| 
         @@ -76,15 +79,9 @@ module Temple 
     | 
|
| 
       76 
79 
     | 
    
         
             
                end
         
     | 
| 
       77 
80 
     | 
    
         | 
| 
       78 
81 
     | 
    
         
             
                def capture_generator
         
     | 
| 
       79 
     | 
    
         
            -
                  @capture_generator ||=
         
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
                     
     | 
| 
       82 
     | 
    
         
            -
                      self.class
         
     | 
| 
       83 
     | 
    
         
            -
                    when Class
         
     | 
| 
       84 
     | 
    
         
            -
                      options[:capture_generator]
         
     | 
| 
       85 
     | 
    
         
            -
                    else
         
     | 
| 
       86 
     | 
    
         
            -
                      Generators.const_get(options[:capture_generator])
         
     | 
| 
       87 
     | 
    
         
            -
                    end
         
     | 
| 
      
 82 
     | 
    
         
            +
                  @capture_generator ||= Class === options[:capture_generator] ?
         
     | 
| 
      
 83 
     | 
    
         
            +
                  options[:capture_generator] :
         
     | 
| 
      
 84 
     | 
    
         
            +
                    Generators.const_get(options[:capture_generator])
         
     | 
| 
       88 
85 
     | 
    
         
             
                end
         
     | 
| 
       89 
86 
     | 
    
         | 
| 
       90 
87 
     | 
    
         
             
                def concat(str)
         
     | 
| 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            module Temple
         
     | 
| 
       2 
3 
     | 
    
         
             
              module Generators
         
     | 
| 
       3 
4 
     | 
    
         
             
                # Implements a rails output buffer.
         
     | 
| 
         @@ -9,10 +10,9 @@ module Temple 
     | 
|
| 
       9 
10 
     | 
    
         
             
                #
         
     | 
| 
       10 
11 
     | 
    
         
             
                # @api public
         
     | 
| 
       11 
12 
     | 
    
         
             
                class RailsOutputBuffer < StringBuffer
         
     | 
| 
       12 
     | 
    
         
            -
                  define_options :streaming,
         
     | 
| 
      
 13 
     | 
    
         
            +
                  define_options :streaming, # ignored
         
     | 
| 
       13 
14 
     | 
    
         
             
                                 buffer_class: 'ActionView::OutputBuffer',
         
     | 
| 
       14 
15 
     | 
    
         
             
                                 buffer: '@output_buffer',
         
     | 
| 
       15 
     | 
    
         
            -
                                 # output_buffer is needed for Rails 3.1 Streaming support
         
     | 
| 
       16 
16 
     | 
    
         
             
                                 capture_generator: RailsOutputBuffer
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                  def call(exp)
         
     | 
| 
         @@ -20,7 +20,11 @@ module Temple 
     | 
|
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                  def create_buffer
         
     | 
| 
       23 
     | 
    
         
            -
                     
     | 
| 
      
 23 
     | 
    
         
            +
                    if buffer == '@output_buffer'
         
     | 
| 
      
 24 
     | 
    
         
            +
                      "#{buffer} = output_buffer || #{options[:buffer_class]}.new"
         
     | 
| 
      
 25 
     | 
    
         
            +
                    else
         
     | 
| 
      
 26 
     | 
    
         
            +
                      "#{buffer} = #{options[:buffer_class]}.new"
         
     | 
| 
      
 27 
     | 
    
         
            +
                    end
         
     | 
| 
       24 
28 
     | 
    
         
             
                  end
         
     | 
| 
       25 
29 
     | 
    
         | 
| 
       26 
30 
     | 
    
         
             
                  def concat(str)
         
     | 
| 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            module Temple
         
     | 
| 
       2 
3 
     | 
    
         
             
              module Generators
         
     | 
| 
       3 
4 
     | 
    
         
             
                # Implements a string buffer.
         
     | 
| 
         @@ -10,7 +11,7 @@ module Temple 
     | 
|
| 
       10 
11 
     | 
    
         
             
                # @api public
         
     | 
| 
       11 
12 
     | 
    
         
             
                class StringBuffer < ArrayBuffer
         
     | 
| 
       12 
13 
     | 
    
         
             
                  def create_buffer
         
     | 
| 
       13 
     | 
    
         
            -
                    "#{buffer} = ''"
         
     | 
| 
      
 14 
     | 
    
         
            +
                    "#{buffer} = ''.dup"
         
     | 
| 
       14 
15 
     | 
    
         
             
                  end
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
                  def return_buffer
         
     | 
    
        data/lib/temple/grammar.rb
    CHANGED
    
    
    
        data/lib/temple/html/fast.rb
    CHANGED
    
    
    
        data/lib/temple/html/filter.rb
    CHANGED
    
    
    
        data/lib/temple/html/pretty.rb
    CHANGED
    
    
    
        data/lib/temple/html/safe.rb
    CHANGED
    
    
    
        data/lib/temple/map.rb
    CHANGED
    
    
| 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            module Temple
         
     | 
| 
       2 
3 
     | 
    
         
             
              module Mixins
         
     | 
| 
       3 
4 
     | 
    
         
             
                # @api private
         
     | 
| 
         @@ -67,7 +68,7 @@ module Temple 
     | 
|
| 
       67 
68 
     | 
    
         
             
                        unmatched.reverse_each do |u|
         
     | 
| 
       68 
69 
     | 
    
         
             
                          entry = u if u.flatten.size < entry.flatten.size
         
     | 
| 
       69 
70 
     | 
    
         
             
                        end
         
     | 
| 
       70 
     | 
    
         
            -
                        raise(InvalidExpression, PP.pp(entry.last, "#{@grammar}::#{entry.first} did not match\n"))
         
     | 
| 
      
 71 
     | 
    
         
            +
                        raise(InvalidExpression, PP.pp(entry.last, "#{@grammar}::#{entry.first} did not match\n".dup))
         
     | 
| 
       71 
72 
     | 
    
         
             
                      end
         
     | 
| 
       72 
73 
     | 
    
         
             
                    end
         
     | 
| 
       73 
74 
     | 
    
         | 
    
        data/lib/temple/parser.rb
    CHANGED
    
    
| 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            module Temple
         
     | 
| 
       2 
3 
     | 
    
         
             
              module Templates
         
     | 
| 
       3 
4 
     | 
    
         
             
                class Rails
         
     | 
| 
         @@ -18,8 +19,8 @@ module Temple 
     | 
|
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
                  def self.register_as(*names)
         
     | 
| 
       20 
21 
     | 
    
         
             
                    raise 'Rails is not loaded - Temple::Templates::Rails cannot be used' unless defined?(::ActionView)
         
     | 
| 
       21 
     | 
    
         
            -
                    if ::ActiveSupport::VERSION::MAJOR <  
     | 
| 
       22 
     | 
    
         
            -
                      raise "Temple supports only Rails  
     | 
| 
      
 22 
     | 
    
         
            +
                    if ::ActiveSupport::VERSION::MAJOR < 5
         
     | 
| 
      
 23 
     | 
    
         
            +
                      raise "Temple supports only Rails 5 and greater, your Rails version is #{::ActiveSupport::VERSION::STRING}"
         
     | 
| 
       23 
24 
     | 
    
         
             
                    end
         
     | 
| 
       24 
25 
     | 
    
         
             
                    names.each do |name|
         
     | 
| 
       25 
26 
     | 
    
         
             
                      ::ActionView::Template.register_template_handler name.to_sym, new
         
     | 
    
        data/lib/temple/templates.rb
    CHANGED
    
    
    
        data/lib/temple/utils.rb
    CHANGED
    
    | 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
       1 
2 
     | 
    
         
             
            begin
         
     | 
| 
       2 
3 
     | 
    
         
             
              require 'cgi/escape'
         
     | 
| 
       3 
4 
     | 
    
         
             
            rescue LoadError
         
     | 
| 
         @@ -14,7 +15,8 @@ module Temple 
     | 
|
| 
       14 
15 
     | 
    
         
             
                # @param html [String] The string to escape
         
     | 
| 
       15 
16 
     | 
    
         
             
                # @return [String] The escaped string
         
     | 
| 
       16 
17 
     | 
    
         
             
                def escape_html_safe(html)
         
     | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
      
 18 
     | 
    
         
            +
                  s = html.to_s
         
     | 
| 
      
 19 
     | 
    
         
            +
                  s.html_safe? || html.html_safe? ? s : escape_html(s)
         
     | 
| 
       18 
20 
     | 
    
         
             
                end
         
     | 
| 
       19 
21 
     | 
    
         | 
| 
       20 
22 
     | 
    
         
             
                if defined?(CGI.escapeHTML)
         
     | 
    
        data/lib/temple/version.rb
    CHANGED
    
    
    
        data/lib/temple.rb
    CHANGED
    
    
    
        data/spec/generator_spec.rb
    CHANGED
    
    | 
         @@ -22,6 +22,12 @@ class SimpleGenerator < Temple::Generator 
     | 
|
| 
       22 
22 
     | 
    
         
             
              end
         
     | 
| 
       23 
23 
     | 
    
         
             
            end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
            class SimpleCaptureGenerator < SimpleGenerator
         
     | 
| 
      
 26 
     | 
    
         
            +
              def preamble
         
     | 
| 
      
 27 
     | 
    
         
            +
                "#{buffer} = CAPTURE_BUFFER"
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       25 
31 
     | 
    
         
             
            describe Temple::Generator do
         
     | 
| 
       26 
32 
     | 
    
         
             
              it 'should compile simple expressions' do
         
     | 
| 
       27 
33 
     | 
    
         
             
                gen = SimpleGenerator.new
         
     | 
| 
         @@ -62,13 +68,19 @@ describe Temple::Generator do 
     | 
|
| 
       62 
68 
     | 
    
         
             
                  'foo << (D:dynamic); C:code; foo; VAR << (S:after); VAR')
         
     | 
| 
       63 
69 
     | 
    
         
             
              end
         
     | 
| 
       64 
70 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
              it 'should compile nested  
     | 
| 
       66 
     | 
    
         
            -
                gen = SimpleGenerator.new(buffer: "VAR", capture_generator:  
     | 
| 
       67 
     | 
    
         
            -
                expect(gen.call( 
     | 
| 
       68 
     | 
    
         
            -
                  [:capture, " 
     | 
| 
      
 71 
     | 
    
         
            +
              it 'should compile nested captures with the same capture_generator' do
         
     | 
| 
      
 72 
     | 
    
         
            +
                gen = SimpleGenerator.new(buffer: "VAR", capture_generator: SimpleCaptureGenerator)
         
     | 
| 
      
 73 
     | 
    
         
            +
                expect(gen.call(
         
     | 
| 
      
 74 
     | 
    
         
            +
                  [:capture, "foo", [:multi,
         
     | 
| 
       69 
75 
     | 
    
         
             
                    [:static, "a"],
         
     | 
| 
       70 
     | 
    
         
            -
                    [: 
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
      
 76 
     | 
    
         
            +
                    [:capture, "bar", [:multi,
         
     | 
| 
      
 77 
     | 
    
         
            +
                      [:static, "b"],
         
     | 
| 
      
 78 
     | 
    
         
            +
                      [:capture, "baz", [:multi,
         
     | 
| 
      
 79 
     | 
    
         
            +
                        [:static, "c"],
         
     | 
| 
      
 80 
     | 
    
         
            +
                      ]]
         
     | 
| 
      
 81 
     | 
    
         
            +
                    ]]
         
     | 
| 
      
 82 
     | 
    
         
            +
                  ]]
         
     | 
| 
      
 83 
     | 
    
         
            +
                )).to eq "VAR = BUFFER; foo = CAPTURE_BUFFER; foo << (S:a); bar = CAPTURE_BUFFER; bar << (S:b); baz = CAPTURE_BUFFER; baz << (S:c); baz; bar; foo; VAR"
         
     | 
| 
       72 
84 
     | 
    
         
             
              end
         
     | 
| 
       73 
85 
     | 
    
         | 
| 
       74 
86 
     | 
    
         
             
              it 'should compile newlines' do
         
     | 
| 
         @@ -124,16 +136,16 @@ describe Temple::Generators::StringBuffer do 
     | 
|
| 
       124 
136 
     | 
    
         
             
                gen = Temple::Generators::StringBuffer.new(freeze_static: false)
         
     | 
| 
       125 
137 
     | 
    
         
             
                expect(gen.call([:static,  'test'])).to eq('_buf = "test"')
         
     | 
| 
       126 
138 
     | 
    
         
             
                expect(gen.call([:dynamic, 'test'])).to eq('_buf = (test).to_s')
         
     | 
| 
       127 
     | 
    
         
            -
                expect(gen.call([:code,    'test'])).to eq('_buf = \'\'; test; _buf')
         
     | 
| 
      
 139 
     | 
    
         
            +
                expect(gen.call([:code,    'test'])).to eq('_buf = \'\'.dup; test; _buf')
         
     | 
| 
       128 
140 
     | 
    
         | 
| 
       129 
     | 
    
         
            -
                expect(gen.call([:multi, [:static, 'a'], [:static,  'b']])).to eq('_buf = \'\'; _buf << ("a"); _buf << ("b"); _buf')
         
     | 
| 
       130 
     | 
    
         
            -
                expect(gen.call([:multi, [:static, 'a'], [:dynamic, 'b']])).to eq('_buf = \'\'; _buf << ("a"); _buf << ((b).to_s); _buf')
         
     | 
| 
      
 141 
     | 
    
         
            +
                expect(gen.call([:multi, [:static, 'a'], [:static,  'b']])).to eq('_buf = \'\'.dup; _buf << ("a"); _buf << ("b"); _buf')
         
     | 
| 
      
 142 
     | 
    
         
            +
                expect(gen.call([:multi, [:static, 'a'], [:dynamic, 'b']])).to eq('_buf = \'\'.dup; _buf << ("a"); _buf << ((b).to_s); _buf')
         
     | 
| 
       131 
143 
     | 
    
         
             
              end
         
     | 
| 
       132 
144 
     | 
    
         | 
| 
       133 
145 
     | 
    
         
             
              it 'should freeze static' do
         
     | 
| 
       134 
146 
     | 
    
         
             
                gen = Temple::Generators::StringBuffer.new(freeze_static: true)
         
     | 
| 
       135 
147 
     | 
    
         
             
                expect(gen.call([:static,  'test'])).to eq('_buf = "test"')
         
     | 
| 
       136 
     | 
    
         
            -
                expect(gen.call([:multi, [:dynamic, '1'], [:static,  'test']])).to eq('_buf = \'\'; _buf << ((1).to_s); _buf << ("test".freeze); _buf')
         
     | 
| 
      
 148 
     | 
    
         
            +
                expect(gen.call([:multi, [:dynamic, '1'], [:static,  'test']])).to eq('_buf = \'\'.dup; _buf << ((1).to_s); _buf << ("test".freeze); _buf')
         
     | 
| 
       137 
149 
     | 
    
         
             
              end
         
     | 
| 
       138 
150 
     | 
    
         
             
            end
         
     | 
| 
       139 
151 
     | 
    
         | 
    
        data/temple.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: temple
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.10.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Magnus Holm
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2023-05-27 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: tilt
         
     | 
| 
         @@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       178 
178 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       179 
179 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       180 
180 
     | 
    
         
             
            requirements: []
         
     | 
| 
       181 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 181 
     | 
    
         
            +
            rubygems_version: 3.2.5
         
     | 
| 
       182 
182 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       183 
183 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       184 
184 
     | 
    
         
             
            summary: Template compilation framework in Ruby
         
     |