tilt 2.0.11 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a552c8551a7093b787234c00bac7ccaaef77e89b1d4835c31ddbaeb8388c74ae
4
- data.tar.gz: 014cff88cd5ec4157d02127576eb788a6b0ae3795e69dc448781093f59153769
3
+ metadata.gz: 837e8836cd6aacedb861823faead2fd72549f1c750e2f0350471303c1ca5cab3
4
+ data.tar.gz: 578c1873d63eb0e2426e2c86199f414f516952562c85ee9e91e0907a936603b9
5
5
  SHA512:
6
- metadata.gz: 9d9da743f0359f10e8486b946132d39ba892482a99e7961c4a62258a680a214030824e92442db2421f35cac7c4378ff3e8e8e0af72bd8af35150aae2cc58555b
7
- data.tar.gz: 2755a44a43e094eb95bffe6ab095f4d8a6cc1b58d1c96d6c20325d8d607ada32da7529758dfed8f8d8f09a3eafe2c7d96f381c314c7cc99f950a36c5eaff3454
6
+ metadata.gz: a63e7b55aacbe374f70317cddd821c065ae512622be8f20bc25aeb2aabd5455d91cb7d97894de420f3bfb4f7c571c5f832047db182bb35107fd6d566879c04d7
7
+ data.tar.gz: 2c2785a08edb15f9e593a1b717682212f5a50f1f6694c02256179ee15c9a1e73429a5c6ae804e83611cc645209330c36ea117c6d38698f0021e2a7d748c59919
@@ -1,6 +1,8 @@
1
1
  require 'tilt/template'
2
2
  require 'bluecloth'
3
3
 
4
+ warn "Tilt::BlueClothTemplate is deprecated, please switch to a different markdown implementation"
5
+
4
6
  module Tilt
5
7
  # BlueCloth Markdown implementation. See:
6
8
  # http://deveiate.org/projects/BlueCloth/
data/lib/tilt/csv.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  require 'tilt/template'
2
-
3
- if RUBY_VERSION >= '1.9.0'
4
- require 'csv'
5
- else
6
- require 'fastercsv'
7
- end
2
+ require 'csv'
8
3
 
9
4
  module Tilt
10
5
 
@@ -36,21 +31,13 @@ module Tilt
36
31
  class CSVTemplate < Template
37
32
  self.default_mime_type = 'text/csv'
38
33
 
39
- def self.engine
40
- if RUBY_VERSION >= '1.9.0' && defined? ::CSV
41
- ::CSV
42
- elsif defined? ::FasterCSV
43
- ::FasterCSV
44
- end
45
- end
46
-
47
34
  def prepare
48
35
  @outvar = options.delete(:outvar) || '_csvout'
49
36
  end
50
37
 
51
38
  def precompiled_template(locals)
52
39
  <<-RUBY
53
- #{@outvar} = #{self.class.engine}.generate(**#{options}) do |csv|
40
+ #{@outvar} = CSV.generate(**#{options}) do |csv|
54
41
  #{data}
55
42
  end
56
43
  RUBY
data/lib/tilt/erb.rb CHANGED
@@ -19,12 +19,20 @@ module Tilt
19
19
  end
20
20
 
21
21
  def prepare
22
+ @freeze_string_literals = !!@options[:freeze]
22
23
  @outvar = options[:outvar] || self.class.default_output_variable
23
- options[:trim] = '<>' if !(options[:trim] == false) && (options[:trim].nil? || options[:trim] == true)
24
+ trim = case options[:trim]
25
+ when false
26
+ nil
27
+ when nil, true
28
+ '<>'
29
+ else
30
+ options[:trim]
31
+ end
24
32
  @engine = if SUPPORTS_KVARGS
25
- ::ERB.new(data, trim_mode: options[:trim], eoutvar: @outvar)
33
+ ::ERB.new(data, trim_mode: trim, eoutvar: @outvar)
26
34
  else
27
- ::ERB.new(data, options[:safe], options[:trim], @outvar)
35
+ ::ERB.new(data, options[:safe], trim, @outvar)
28
36
  end
29
37
  end
30
38
 
@@ -52,11 +60,13 @@ module Tilt
52
60
 
53
61
  # ERB generates a line to specify the character coding of the generated
54
62
  # source in 1.9. Account for this in the line offset.
55
- if RUBY_VERSION >= '1.9.0'
56
- def precompiled(locals)
57
- source, offset = super
58
- [source, offset + 1]
59
- end
63
+ def precompiled(locals)
64
+ source, offset = super
65
+ [source, offset + 1]
66
+ end
67
+
68
+ def freeze_string_literals?
69
+ @freeze_string_literals
60
70
  end
61
71
  end
62
72
  end
data/lib/tilt/erubi.rb CHANGED
@@ -16,6 +16,24 @@ module Tilt
16
16
 
17
17
  engine_class = @options[:engine_class] || Erubi::Engine
18
18
 
19
+ # If :freeze option is given, the intent is to setup frozen string
20
+ # literals in the template. So enable frozen string literals in the
21
+ # code Tilt generates if the :freeze option is given.
22
+ if @freeze_string_literals = !!@options[:freeze]
23
+ # Passing the :freeze option to Erubi sets the
24
+ # frozen-string-literal magic comment, which doesn't have an effect
25
+ # with Tilt as Tilt wraps the resulting code. Worse, the magic
26
+ # comment appearing not at the top of the file can cause a warning.
27
+ # So remove the :freeze option before passing to Erubi.
28
+ @options.delete(:freeze)
29
+
30
+ # Erubi by default appends .freeze to template literals on Ruby 2.1+,
31
+ # but that is not necessary and slows down code when Tilt is using
32
+ # frozen string literals, so pass the :freeze_template_literals
33
+ # option to not append .freeze.
34
+ @options[:freeze_template_literals] = false
35
+ end
36
+
19
37
  @engine = engine_class.new(data, @options)
20
38
  @outvar = @engine.bufvar
21
39
 
@@ -28,5 +46,9 @@ module Tilt
28
46
  def precompiled_template(locals)
29
47
  @src
30
48
  end
49
+
50
+ def freeze_string_literals?
51
+ @freeze_string_literals
52
+ end
31
53
  end
32
54
  end
data/lib/tilt/erubis.rb CHANGED
@@ -16,6 +16,7 @@ module Tilt
16
16
  # within <%= %> blocks will be automatically html escaped.
17
17
  class ErubisTemplate < ERBTemplate
18
18
  def prepare
19
+ @freeze_string_literals = !!@options.delete(:freeze)
19
20
  @outvar = options.delete(:outvar) || self.class.default_output_variable
20
21
  @options.merge!(:preamble => false, :postamble => false, :bufvar => @outvar)
21
22
  engine_class = options.delete(:engine_class)
@@ -33,11 +34,13 @@ module Tilt
33
34
 
34
35
  # Erubis doesn't have ERB's line-off-by-one under 1.9 problem.
35
36
  # Override and adjust back.
36
- if RUBY_VERSION >= '1.9.0'
37
- def precompiled(locals)
38
- source, offset = super
39
- [source, offset - 1]
40
- end
37
+ def precompiled(locals)
38
+ source, offset = super
39
+ [source, offset - 1]
40
+ end
41
+
42
+ def freeze_string_literals?
43
+ @freeze_string_literals
41
44
  end
42
45
  end
43
46
  end
data/lib/tilt/haml.rb CHANGED
@@ -4,81 +4,86 @@ require 'haml'
4
4
  module Tilt
5
5
  # Haml template implementation. See:
6
6
  # http://haml.hamptoncatlin.com/
7
- class HamlTemplate < Template
8
- self.default_mime_type = 'text/html'
7
+ if defined?(Haml::Template) && Haml::Template < Tilt::Template
8
+ # Haml >= 6 ships its own template, prefer it when available.
9
+ HamlTemplate = Haml::Template
10
+ else
11
+ class HamlTemplate < Template
12
+ self.default_mime_type = 'text/html'
9
13
 
10
- # `Gem::Version.correct?` may return false because of Haml::VERSION #=> "3.1.8 (Separated Sally)". After Haml 4, it's always correct.
11
- if Gem::Version.correct?(Haml::VERSION) && Gem::Version.new(Haml::VERSION) >= Gem::Version.new('5.0.0.beta.2')
12
- def prepare
13
- options = {}.update(@options).update(filename: eval_file, line: line)
14
- if options.include?(:outvar)
15
- options[:buffer] = options.delete(:outvar)
16
- options[:save_buffer] = true
14
+ # `Gem::Version.correct?` may return false because of Haml::VERSION #=> "3.1.8 (Separated Sally)". After Haml 4, it's always correct.
15
+ if Gem::Version.correct?(Haml::VERSION) && Gem::Version.new(Haml::VERSION) >= Gem::Version.new('5.0.0.beta.2')
16
+ def prepare
17
+ options = {}.update(@options).update(filename: eval_file, line: line)
18
+ if options.include?(:outvar)
19
+ options[:buffer] = options.delete(:outvar)
20
+ options[:save_buffer] = true
21
+ end
22
+ @engine = ::Haml::TempleEngine.new(options)
23
+ @engine.compile(data)
17
24
  end
18
- @engine = ::Haml::TempleEngine.new(options)
19
- @engine.compile(data)
20
- end
21
25
 
22
- def evaluate(scope, locals, &block)
23
- raise ArgumentError, 'invalid scope: must not be frozen' if scope.frozen?
24
- super
25
- end
26
+ def evaluate(scope, locals, &block)
27
+ raise ArgumentError, 'invalid scope: must not be frozen' if scope.frozen?
28
+ super
29
+ end
26
30
 
27
- def precompiled_template(locals)
28
- @engine.precompiled_with_ambles(
29
- [],
30
- after_preamble: <<-RUBY
31
- __in_erb_template = true
32
- _haml_locals = locals
33
- RUBY
34
- )
35
- end
36
- else # Following definitions are for Haml <= 4 and deprecated.
37
- def prepare
38
- options = @options.merge(:filename => eval_file, :line => line)
39
- @engine = ::Haml::Engine.new(data, options)
40
- end
31
+ def precompiled_template(locals)
32
+ @engine.precompiled_with_ambles(
33
+ [],
34
+ after_preamble: <<-RUBY
35
+ __in_erb_template = true
36
+ _haml_locals = locals
37
+ RUBY
38
+ )
39
+ end
40
+ else # Following definitions are for Haml <= 4 and deprecated.
41
+ def prepare
42
+ options = @options.merge(:filename => eval_file, :line => line)
43
+ @engine = ::Haml::Engine.new(data, options)
44
+ end
41
45
 
42
- def evaluate(scope, locals, &block)
43
- raise ArgumentError, 'invalid scope: must not be frozen' if scope.frozen?
46
+ def evaluate(scope, locals, &block)
47
+ raise ArgumentError, 'invalid scope: must not be frozen' if scope.frozen?
44
48
 
45
- if @engine.respond_to?(:precompiled_method_return_value, true)
46
- super
47
- else
48
- @engine.render(scope, locals, &block)
49
+ if @engine.respond_to?(:precompiled_method_return_value, true)
50
+ super
51
+ else
52
+ @engine.render(scope, locals, &block)
53
+ end
49
54
  end
50
- end
51
55
 
52
- # Precompiled Haml source. Taken from the precompiled_with_ambles
53
- # method in Haml::Precompiler:
54
- # http://github.com/nex3/haml/blob/master/lib/haml/precompiler.rb#L111-126
55
- def precompiled_template(locals)
56
- @engine.precompiled
57
- end
56
+ # Precompiled Haml source. Taken from the precompiled_with_ambles
57
+ # method in Haml::Precompiler:
58
+ # http://github.com/nex3/haml/blob/master/lib/haml/precompiler.rb#L111-126
59
+ def precompiled_template(locals)
60
+ @engine.precompiled
61
+ end
58
62
 
59
- def precompiled_preamble(locals)
60
- local_assigns = super
61
- @engine.instance_eval do
62
- <<-RUBY
63
- begin
64
- extend Haml::Helpers
65
- _hamlout = @haml_buffer = Haml::Buffer.new(haml_buffer, #{options_for_buffer.inspect})
66
- _erbout = _hamlout.buffer
67
- __in_erb_template = true
68
- _haml_locals = locals
69
- #{local_assigns}
70
- RUBY
63
+ def precompiled_preamble(locals)
64
+ local_assigns = super
65
+ @engine.instance_eval do
66
+ <<-RUBY
67
+ begin
68
+ extend Haml::Helpers
69
+ _hamlout = @haml_buffer = Haml::Buffer.new(haml_buffer, #{options_for_buffer.inspect})
70
+ _erbout = _hamlout.buffer
71
+ __in_erb_template = true
72
+ _haml_locals = locals
73
+ #{local_assigns}
74
+ RUBY
75
+ end
71
76
  end
72
- end
73
77
 
74
- def precompiled_postamble(locals)
75
- @engine.instance_eval do
76
- <<-RUBY
77
- #{precompiled_method_return_value}
78
- ensure
79
- @haml_buffer = @haml_buffer.upper if haml_buffer
80
- end
81
- RUBY
78
+ def precompiled_postamble(locals)
79
+ @engine.instance_eval do
80
+ <<-RUBY
81
+ #{precompiled_method_return_value}
82
+ ensure
83
+ @haml_buffer = @haml_buffer.upper if haml_buffer
84
+ end
85
+ RUBY
86
+ end
82
87
  end
83
88
  end
84
89
  end
data/lib/tilt/less.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'tilt/template'
2
2
  require 'less'
3
3
 
4
+ warn "Tilt::LessTemplate is deprecated, consider switching from LESS to SCSS"
5
+
4
6
  module Tilt
5
7
  # Lessscss template implementation. See:
6
8
  # http://lesscss.org/
data/lib/tilt/mapping.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'monitor'
2
+ require_relative 'pipeline'
2
3
 
3
4
  module Tilt
4
5
  # Tilt::Mapping associates file extensions with template implementations.
@@ -112,6 +113,62 @@ module Tilt
112
113
  end
113
114
  end
114
115
 
116
+ # Register a new template class using the given extension that
117
+ # represents a pipeline of multiple existing template, where the
118
+ # output from the previous template is used as input to the next
119
+ # template.
120
+ #
121
+ # This will register a template class that processes the input
122
+ # with the *erb* template processor, and takes the output of
123
+ # that and feeds it to the *scss* template processor, returning
124
+ # the output of the *scss* template processor as the result of
125
+ # the pipeline.
126
+ #
127
+ # @param ext [String] Primary extension to register
128
+ # @option :templates [Array<String>] Extensions of templates
129
+ # to execute in order (defaults to the ext.split('.').reverse)
130
+ # @option :extra_exts [Array<String>] Additional extensions to register
131
+ # @option String [Hash] Options hash for individual template in the
132
+ # pipeline (key is extension).
133
+ # @return [void]
134
+ #
135
+ # @example
136
+ # mapping.register_pipeline('scss.erb')
137
+ # mapping.register_pipeline('scss.erb', 'erb'=>{:outvar=>'@foo'})
138
+ # mapping.register_pipeline('scsserb', :extra_exts => 'scss.erb',
139
+ # :templates=>['erb', 'scss'])
140
+ def register_pipeline(ext, options={})
141
+ templates = options[:templates] || ext.split('.').reverse
142
+ templates = templates.map{|t| [self[t], options[t] || {}]}
143
+
144
+ klass = Class.new(Pipeline)
145
+ klass.send(:const_set, :TEMPLATES, templates)
146
+
147
+ register(klass, ext, *Array(options[:extra_exts]))
148
+ klass
149
+ end
150
+
151
+ # Unregisters an extension. This removes the both normal registrations
152
+ # and lazy registrations.
153
+ #
154
+ # @param extensions [Array<String>] List of extensions.
155
+ # @return nil
156
+ #
157
+ # @example
158
+ # mapping.register MyEngine::Template, 'mt'
159
+ # mapping['index.mt'] # => MyEngine::Template
160
+ # mapping.unregister('mt')
161
+ # mapping['index.mt'] # => nil
162
+ def unregister(*extensions)
163
+ extensions.each do |ext|
164
+ ext = ext.to_s
165
+ @template_map.delete(ext)
166
+ @lazy_map.delete(ext)
167
+ end
168
+
169
+ nil
170
+ end
171
+
115
172
  # Checks if a file extension is registered (either eagerly or
116
173
  # lazily) in this mapping.
117
174
  #
@@ -188,7 +245,7 @@ module Tilt
188
245
  lazy_map.each do |ext, choices|
189
246
  res << ext if choices.any? { |klass, file| template_class.to_s == klass }
190
247
  end
191
- res
248
+ res.uniq
192
249
  end
193
250
 
194
251
  private
@@ -257,11 +314,6 @@ module Tilt
257
314
  LOCK.exit if entered
258
315
  end
259
316
 
260
- # This is due to a bug in JRuby (see GH issue jruby/jruby#3585)
261
- Tilt.autoload :Dummy, "tilt/dummy"
262
- require "tilt/dummy"
263
- AUTOLOAD_IS_BROKEN = Tilt.autoload?(:Dummy)
264
-
265
317
  # The proper behavior (in MRI) for autoload? is to
266
318
  # return `false` when the constant/file has been
267
319
  # explicitly required.
@@ -276,16 +328,7 @@ module Tilt
276
328
 
277
329
  def constant_defined?(name)
278
330
  name.split('::').inject(Object) do |scope, n|
279
- if scope.autoload?(n)
280
- if !AUTOLOAD_IS_BROKEN
281
- return false
282
- end
283
-
284
- if eval("!defined?(scope::#{n})")
285
- return false
286
- end
287
- end
288
- return false if !scope.const_defined?(n)
331
+ return false if scope.autoload?(n) || !scope.const_defined?(n)
289
332
  scope.const_get(n)
290
333
  end
291
334
  end
@@ -0,0 +1,18 @@
1
+ require_relative 'template'
2
+
3
+ module Tilt
4
+ # Superclass used for pipeline templates. Should not be used directly.
5
+ class Pipeline < Template
6
+ def prepare
7
+ @pipeline = self.class::TEMPLATES.inject(proc{|*| data}) do |data, (klass, options)|
8
+ proc do |s,l,&sb|
9
+ klass.new(file, line, options, &proc{|*| data.call(s, l, &sb)}).render(s, l, &sb)
10
+ end
11
+ end
12
+ end
13
+
14
+ def evaluate(scope, locals, &block)
15
+ @pipeline.call(scope, locals, &block)
16
+ end
17
+ end
18
+ end
@@ -1,5 +1,5 @@
1
1
  require 'tilt/template'
2
- require 'pandoc'
2
+ require_relative 'pandoc'
3
3
 
4
4
  module Tilt
5
5
  # Pandoc reStructuredText implementation. See:
data/lib/tilt/sigil.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'open3'
2
2
  require 'shellwords'
3
3
 
4
+ warn "Tilt::SigilTemplate is deprecated"
5
+
4
6
  module Tilt
5
7
  # Standalone string interpolator and template processor implementation in Go.
6
8
  # see: https://github.com/gliderlabs/sigil
data/lib/tilt/template.rb CHANGED
@@ -1,17 +1,11 @@
1
- require 'thread'
2
-
3
1
  module Tilt
4
2
  # @private
5
- TOPOBJECT = if RUBY_VERSION >= '2.0'
6
- # @private
7
- module CompiledTemplates
8
- self
9
- end
10
- elsif RUBY_VERSION >= '1.9'
11
- BasicObject
12
- else
13
- Object
3
+ module CompiledTemplates
14
4
  end
5
+
6
+ # @private
7
+ TOPOBJECT = CompiledTemplates
8
+
15
9
  # @private
16
10
  LOCK = Mutex.new
17
11
 
@@ -33,6 +27,12 @@ module Tilt
33
27
  # interface.
34
28
  attr_reader :options
35
29
 
30
+ # A path ending in .rb that the template code will be written to, then
31
+ # required, instead of being evaled. This is useful for determining
32
+ # coverage of compiled template code, or to use static analysis tools
33
+ # on the compiled template code.
34
+ attr_reader :compiled_path
35
+
36
36
  class << self
37
37
  # An empty Hash that the template engine can populate with various
38
38
  # metadata.
@@ -136,6 +136,17 @@ module Tilt
136
136
  end
137
137
  end
138
138
 
139
+ # Set the prefix to use for compiled paths.
140
+ def compiled_path=(path)
141
+ if path
142
+ # Use expanded paths when loading, since that is helpful
143
+ # for coverage. Remove any .rb suffix, since that will
144
+ # be added back later.
145
+ path = File.expand_path(path.sub(/\.rb\z/i, ''))
146
+ end
147
+ @compiled_path = path
148
+ end
149
+
139
150
  protected
140
151
 
141
152
  # @!group For template implementations
@@ -144,9 +155,7 @@ module Tilt
144
155
  # default_encoding-option if present. You may override this method
145
156
  # in your template class if you have a better hint of the data's
146
157
  # encoding.
147
- def default_encoding
148
- @default_encoding
149
- end
158
+ attr_reader :default_encoding
150
159
 
151
160
  # Do whatever preparation is necessary to setup the underlying template
152
161
  # engine. Called immediately after template data is loaded. Instance
@@ -158,6 +167,7 @@ module Tilt
158
167
  end
159
168
 
160
169
  CLASS_METHOD = Kernel.instance_method(:class)
170
+ USE_BIND_CALL = RUBY_VERSION >= '2.7'
161
171
 
162
172
  # Execute the compiled template and return the result string. Template
163
173
  # evaluation is guaranteed to be performed in the scope object with the
@@ -168,17 +178,20 @@ module Tilt
168
178
  def evaluate(scope, locals, &block)
169
179
  locals_keys = locals.keys
170
180
  locals_keys.sort!{|x, y| x.to_s <=> y.to_s}
181
+
171
182
  case scope
172
183
  when Object
173
- method = compiled_method(locals_keys, Module === scope ? scope : scope.class)
184
+ scope_class = Module === scope ? scope : scope.class
174
185
  else
175
- if RUBY_VERSION >= '2'
176
- method = compiled_method(locals_keys, CLASS_METHOD.bind(scope).call)
177
- else
178
- method = compiled_method(locals_keys, Object)
179
- end
186
+ scope_class = USE_BIND_CALL ? CLASS_METHOD.bind_call(scope) : CLASS_METHOD.bind(scope).call
187
+ end
188
+ method = compiled_method(locals_keys, scope_class)
189
+
190
+ if USE_BIND_CALL
191
+ method.bind_call(scope, locals, &block)
192
+ else
193
+ method.bind(scope).call(locals, &block)
180
194
  end
181
- method.bind(scope).call(locals, &block)
182
195
  end
183
196
 
184
197
  # Generates all template source by combining the preamble, template, and
@@ -269,18 +282,58 @@ module Tilt
269
282
  method_source.force_encoding(source.encoding)
270
283
  end
271
284
 
272
- method_source << <<-RUBY
273
- TOPOBJECT.class_eval do
274
- def #{method_name}(locals)
275
- #{local_code}
276
- RUBY
285
+ if freeze_string_literals?
286
+ method_source << "# frozen-string-literal: true\n"
287
+ end
288
+
289
+ # Don't indent method source, to avoid indentation warnings when using compiled paths
290
+ method_source << "::Tilt::TOPOBJECT.class_eval do\ndef #{method_name}(locals)\n#{local_code}\n"
291
+
277
292
  offset += method_source.count("\n")
278
293
  method_source << source
279
294
  method_source << "\nend;end;"
280
- (scope_class || Object).class_eval(method_source, eval_file, line - offset)
295
+
296
+ bind_compiled_method(method_source, offset, scope_class, local_keys)
281
297
  unbind_compiled_method(method_name)
282
298
  end
283
299
 
300
+ def bind_compiled_method(method_source, offset, scope_class, local_keys)
301
+ path = compiled_path
302
+ if path && scope_class.name
303
+ path = path.dup
304
+
305
+ if defined?(@compiled_path_counter)
306
+ path << '-' << @compiled_path_counter.succ!
307
+ else
308
+ @compiled_path_counter = "0".dup
309
+ end
310
+ path << ".rb"
311
+
312
+ # Wrap method source in a class block for the scope, so constant lookup works
313
+ method_source = "class #{scope_class.name}\n#{method_source}\nend"
314
+
315
+ load_compiled_method(path, method_source)
316
+ else
317
+ if path
318
+ warn "compiled_path (#{compiled_path.inspect}) ignored on template with anonymous scope_class (#{scope_class.inspect})"
319
+ end
320
+
321
+ eval_compiled_method(method_source, offset, scope_class)
322
+ end
323
+ end
324
+
325
+ def eval_compiled_method(method_source, offset, scope_class)
326
+ (scope_class || Object).class_eval(method_source, eval_file, line - offset)
327
+ end
328
+
329
+ def load_compiled_method(path, method_source)
330
+ File.binwrite(path, method_source)
331
+
332
+ # Use load and not require, so unbind_compiled_method does not
333
+ # break if the same path is used more than once.
334
+ load path
335
+ end
336
+
284
337
  def unbind_compiled_method(method_name)
285
338
  method = TOPOBJECT.instance_method(method_name)
286
339
  TOPOBJECT.class_eval { remove_method(method_name) }
@@ -297,6 +350,10 @@ module Tilt
297
350
  end
298
351
  end
299
352
 
353
+ def freeze_string_literals?
354
+ false
355
+ end
356
+
300
357
  def binary(string)
301
358
  original_encoding = string.encoding
302
359
  string.force_encoding(Encoding::BINARY)
data/lib/tilt.rb CHANGED
@@ -1,16 +1,16 @@
1
- require 'tilt/mapping'
2
- require 'tilt/template'
1
+ require_relative 'tilt/mapping'
2
+ require_relative 'tilt/template'
3
3
 
4
4
  # Namespace for Tilt. This module is not intended to be included anywhere.
5
5
  module Tilt
6
6
  # Current version.
7
- VERSION = '2.0.11'
7
+ VERSION = '2.1.0'
8
8
 
9
9
  @default_mapping = Mapping.new
10
10
 
11
- # @return [Tilt::Mapping] the main mapping object
12
- def self.default_mapping
13
- @default_mapping
11
+ class << self
12
+ # @return [Tilt::Mapping] the main mapping object
13
+ attr_reader :default_mapping
14
14
  end
15
15
 
16
16
  # @private
@@ -28,6 +28,11 @@ module Tilt
28
28
  default_mapping.register_lazy(class_name, file, *extensions)
29
29
  end
30
30
 
31
+ # @see Tilt::Mapping#register_pipeline
32
+ def self.register_pipeline(ext, options={})
33
+ default_mapping.register_pipeline(ext, options)
34
+ end
35
+
31
36
  # @deprecated Use {register} instead.
32
37
  def self.prefer(template_class, *extensions)
33
38
  register(template_class, *extensions)
@@ -140,7 +145,7 @@ module Tilt
140
145
  register_lazy :HamlTemplate, 'tilt/haml', 'haml'
141
146
  register_lazy :LessTemplate, 'tilt/less', 'less'
142
147
  register_lazy :LiquidTemplate, 'tilt/liquid', 'liquid'
143
- register_lazy :LiveScriptTemplate, 'tilt/livescript','ls'
148
+ register_lazy :LiveScriptTemplate, 'tilt/livescript','ls', 'livescript'
144
149
  register_lazy :MarkabyTemplate, 'tilt/markaby', 'mab'
145
150
  register_lazy :NokogiriTemplate, 'tilt/nokogiri', 'nokogiri'
146
151
  register_lazy :PlainTemplate, 'tilt/plain', 'html'
@@ -162,6 +167,5 @@ module Tilt
162
167
  register_lazy 'Tilt::HandlebarsTemplate', 'tilt/handlebars', 'handlebars', 'hbs'
163
168
  register_lazy 'Tilt::OrgTemplate', 'org-ruby', 'org'
164
169
  register_lazy 'Tilt::EmacsOrgTemplate', 'tilt/emacs_org', 'org'
165
- register_lazy 'Opal::Processor', 'opal', 'opal', 'rb'
166
170
  register_lazy 'Tilt::JbuilderTemplate', 'tilt/jbuilder', 'jbuilder'
167
171
  end
metadata CHANGED
@@ -1,14 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tilt
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.11
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Tomayko
8
+ - Magnus Holm
9
+ - Jeremy Evans
8
10
  autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2022-07-22 00:00:00.000000000 Z
13
+ date: 2023-02-17 00:00:00.000000000 Z
12
14
  dependencies: []
13
15
  description: Generic interface to multiple Ruby template engines
14
16
  email: r@tomayko.com
@@ -28,7 +30,6 @@ files:
28
30
  - lib/tilt/commonmarker.rb
29
31
  - lib/tilt/creole.rb
30
32
  - lib/tilt/csv.rb
31
- - lib/tilt/dummy.rb
32
33
  - lib/tilt/erb.rb
33
34
  - lib/tilt/erubi.rb
34
35
  - lib/tilt/erubis.rb
@@ -43,6 +44,7 @@ files:
43
44
  - lib/tilt/maruku.rb
44
45
  - lib/tilt/nokogiri.rb
45
46
  - lib/tilt/pandoc.rb
47
+ - lib/tilt/pipeline.rb
46
48
  - lib/tilt/plain.rb
47
49
  - lib/tilt/prawn.rb
48
50
  - lib/tilt/radius.rb
@@ -58,10 +60,14 @@ files:
58
60
  - lib/tilt/typescript.rb
59
61
  - lib/tilt/wikicloth.rb
60
62
  - lib/tilt/yajl.rb
61
- homepage: https://github.com/rtomayko/tilt/
63
+ homepage: https://github.com/jeremyevans/tilt
62
64
  licenses:
63
65
  - MIT
64
- metadata: {}
66
+ metadata:
67
+ bug_tracker_uri: https://github.com/jeremyevans/tilt/issues
68
+ changelog_uri: https://github.com/jeremyevans/tilt/blob/master/CHANGELOG.md
69
+ mailing_list_uri: https://github.com/jeremyevans/tilt/discussions
70
+ source_code_uri: https://github.com/jeremyevans/tilt
65
71
  post_install_message:
66
72
  rdoc_options:
67
73
  - "--line-numbers"
@@ -76,15 +82,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
82
  requirements:
77
83
  - - ">="
78
84
  - !ruby/object:Gem::Version
79
- version: '0'
85
+ version: '2.0'
80
86
  required_rubygems_version: !ruby/object:Gem::Requirement
81
87
  requirements:
82
88
  - - ">="
83
89
  - !ruby/object:Gem::Version
84
90
  version: '0'
85
91
  requirements: []
86
- rubygems_version: 3.2.29
92
+ rubygems_version: 3.4.6
87
93
  signing_key:
88
- specification_version: 2
94
+ specification_version: 4
89
95
  summary: Generic interface to multiple Ruby template engines
90
96
  test_files: []
data/lib/tilt/dummy.rb DELETED
@@ -1,3 +0,0 @@
1
- # Used for detecting autoloading bug in JRuby
2
- class Tilt::Dummy; end
3
-