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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -1
  3. data/CHANGES +16 -0
  4. data/Gemfile +0 -1
  5. data/lib/temple/engine.rb +1 -0
  6. data/lib/temple/erb/engine.rb +3 -0
  7. data/lib/temple/erb/parser.rb +1 -0
  8. data/lib/temple/erb/template.rb +1 -0
  9. data/lib/temple/erb/trimming.rb +1 -0
  10. data/lib/temple/exceptions.rb +1 -0
  11. data/lib/temple/filter.rb +1 -0
  12. data/lib/temple/filters/ambles.rb +1 -0
  13. data/lib/temple/filters/code_merger.rb +1 -0
  14. data/lib/temple/filters/control_flow.rb +1 -0
  15. data/lib/temple/filters/dynamic_inliner.rb +2 -1
  16. data/lib/temple/filters/encoding.rb +1 -0
  17. data/lib/temple/filters/eraser.rb +1 -0
  18. data/lib/temple/filters/escapable.rb +1 -0
  19. data/lib/temple/filters/multi_flattener.rb +1 -0
  20. data/lib/temple/filters/remove_bom.rb +1 -0
  21. data/lib/temple/filters/static_analyzer.rb +1 -0
  22. data/lib/temple/filters/static_merger.rb +1 -0
  23. data/lib/temple/filters/string_splitter.rb +2 -1
  24. data/lib/temple/filters/validator.rb +1 -0
  25. data/lib/temple/generator.rb +9 -12
  26. data/lib/temple/generators/array.rb +1 -0
  27. data/lib/temple/generators/array_buffer.rb +1 -0
  28. data/lib/temple/generators/erb.rb +1 -0
  29. data/lib/temple/generators/rails_output_buffer.rb +7 -3
  30. data/lib/temple/generators/string_buffer.rb +2 -1
  31. data/lib/temple/grammar.rb +1 -0
  32. data/lib/temple/html/attribute_merger.rb +1 -0
  33. data/lib/temple/html/attribute_remover.rb +1 -0
  34. data/lib/temple/html/attribute_sorter.rb +1 -0
  35. data/lib/temple/html/dispatcher.rb +1 -0
  36. data/lib/temple/html/fast.rb +1 -0
  37. data/lib/temple/html/filter.rb +1 -0
  38. data/lib/temple/html/pretty.rb +1 -0
  39. data/lib/temple/html/safe.rb +1 -0
  40. data/lib/temple/map.rb +1 -0
  41. data/lib/temple/mixins/dispatcher.rb +1 -0
  42. data/lib/temple/mixins/engine_dsl.rb +1 -0
  43. data/lib/temple/mixins/grammar_dsl.rb +2 -1
  44. data/lib/temple/mixins/options.rb +1 -0
  45. data/lib/temple/mixins/template.rb +1 -0
  46. data/lib/temple/parser.rb +1 -0
  47. data/lib/temple/static_analyzer.rb +1 -0
  48. data/lib/temple/templates/rails.rb +3 -2
  49. data/lib/temple/templates/tilt.rb +1 -0
  50. data/lib/temple/templates.rb +1 -0
  51. data/lib/temple/utils.rb +3 -1
  52. data/lib/temple/version.rb +2 -1
  53. data/lib/temple.rb +1 -0
  54. data/spec/filters/string_splitter_spec.rb +1 -1
  55. data/spec/generator_spec.rb +22 -10
  56. data/temple.gemspec +0 -1
  57. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec5bd4c914592e35029369b132ae55d5ae56771b73d5c8710d3b6cbaf8c1409d
4
- data.tar.gz: 379717f7a2b6580cfe6e3732dcb8da6ff76f6adf2ec725cfc32eacd988f8471a
3
+ metadata.gz: 3fdf456fd2d277a110681cc1d0dd228bba3b75306b3caa78fb12ad668a7665c6
4
+ data.tar.gz: 7dfdd5001be5c652254aab301e391d7652c0bc1e44a00ee9fe5002c1899e99c1
5
5
  SHA512:
6
- metadata.gz: 938451e922d130af494c37d73612b35c53e05a94143d1cabff3e725b4512fbc4a04e1bf7acc27be0e8b37ebc7b00a2d9859e4f073c0941aeada7a1ed396889db
7
- data.tar.gz: f2925b82e2fb217f63d0afa4890c71f7ff6e209ee7775e33b9fb4a3885dce9bd638e46b8280f58f3f5002b020fd3e07792c560c3e44ed4b182dbfcefa2c66978
6
+ metadata.gz: 4d5847567944020f1be6ddf6b96b056ff0154cb26b00e71d4c736337cddc3e1ceb402ef4eabc3fa8a150ec56fd560cb0ac22358c8f1673bc2dfabb8407a482b9
7
+ data.tar.gz: f8f766aeb193a7bf781297dff7628d2e9d09840a241130f4a04f60b72e16d237c965f327696788e29f58ddadc1ce843392a52619363fc19dc5da66966d42ed09
@@ -22,10 +22,11 @@ jobs:
22
22
  - '2.7'
23
23
  - '3.0'
24
24
  - '3.1'
25
+ - '3.2'
25
26
  - jruby
26
27
  - truffleruby-head
27
28
  steps:
28
- - uses: actions/checkout@v2
29
+ - uses: actions/checkout@v3
29
30
  - name: Set up Ruby
30
31
  uses: ruby/setup-ruby@v1
31
32
  with:
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
@@ -1,3 +1,2 @@
1
1
  source 'https://rubygems.org/'
2
2
  gemspec
3
- gem 'escape_utils' if ENV['ESCAPE_UTILS']
data/lib/temple/engine.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # An engine is simply a chain of compilers (that often includes a parser,
3
4
  # some filters and a generator).
@@ -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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module ERB
3
4
  # Example ERB parser
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # ERB example implementation
3
4
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module ERB
3
4
  # ERB trimming like in erubis
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # Exception raised if invalid temple expression is found
3
4
  #
data/lib/temple/filter.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # Temple base filter
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  class Ambles < Filter
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Control flow filter which processes [:if, condition, yes-exp, no-exp]
@@ -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
  module Temple
2
3
  module Filters
3
4
  # Try to encode input string
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Erase expressions with a certain type
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Escape dynamic or static expressions.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Flattens nested multi expressions
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Remove BOM from input string
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Convert [:dynamic, code] to [:static, text] if code is static Ruby expression.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Merges several statics into a single static. Example:
@@ -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) && RUBY_VERSION >= "2.0.0" && Ripper.respond_to?(:lex)
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)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Filters
3
4
  # Validates temple expression with given grammar
@@ -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: :self,
14
+ capture_generator: 'StringBuffer',
14
15
  buffer: '_buf',
15
- freeze_static: RUBY_VERSION >= '2.1'
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(**options, buffer: name).call(exp)
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
- case options[:capture_generator]
81
- when :self
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 an array buffer.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Generators
3
4
  # Just like Array, but calls #join on the array.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Generators
3
4
  # Implements an ERB generator.
@@ -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
- "#{buffer} = output_buffer || #{options[:buffer_class]}.new"
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # Temple expression grammar which can be used to validate Temple expressions.
3
4
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  # This filter merges html attributes (e.g. used for id and class)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  # This filter removes empty attributes
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  # This filter sorts html attributes.
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  # @api private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module HTML
3
4
  class SafeString < String
data/lib/temple/map.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # Immutable map class which supports map merging
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Mixins
3
4
  # @api private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Mixins
3
4
  # @api private
@@ -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
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Mixins
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  module Mixins
3
4
  # @api private
data/lib/temple/parser.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # Temple base parser
3
4
  # @api public
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  begin
2
3
  require 'ripper'
3
4
  rescue LoadError
@@ -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 < 3 || ::ActiveSupport::VERSION::MAJOR == 3 && ::ActiveSupport::VERSION::MINOR < 1
22
- raise "Temple supports only Rails 3.1 and greater, your Rails version is #{::ActiveSupport::VERSION::STRING}"
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'tilt'
2
3
 
3
4
  module Temple
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
3
  # @api public
3
4
  module Templates
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
- html.html_safe? ? html : escape_html(html)
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)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Temple
2
- VERSION = '0.9.1'
3
+ VERSION = '0.10.2'
3
4
  end
data/lib/temple.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'temple/version'
2
3
 
3
4
  module Temple
@@ -4,7 +4,7 @@ begin
4
4
  rescue LoadError
5
5
  end
6
6
 
7
- if defined?(Ripper) && RUBY_VERSION >= "2.0.0"
7
+ if defined?(Ripper)
8
8
  describe Temple::Filters::StringSplitter do
9
9
  before do
10
10
  @filter = Temple::Filters::StringSplitter.new
@@ -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 capture with the same capture_generator' do
66
- gen = SimpleGenerator.new(buffer: "VAR", capture_generator: SimpleGenerator)
67
- expect(gen.call([:capture, "foo", [:multi,
68
- [:capture, "bar", [:multi,
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
- [:static, "b"]]]]
71
- ])).to eq "VAR = BUFFER; foo = BUFFER; bar = BUFFER; bar << (S:a); bar << (S:b); bar; foo; VAR"
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
@@ -1,4 +1,3 @@
1
- # -*- encoding: utf-8 -*-
2
1
  require File.dirname(__FILE__) + '/lib/temple/version'
3
2
  require 'date'
4
3
 
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.9.1
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: 2022-10-25 00:00:00.000000000 Z
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.3.7
181
+ rubygems_version: 3.2.5
182
182
  signing_key:
183
183
  specification_version: 4
184
184
  summary: Template compilation framework in Ruby