tilt 2.2.0 → 2.4.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: 0b933744ac3dc007d759af22c61ea725d84e6d83a689c07e384792d08f330f60
4
- data.tar.gz: b07ad772a645934f3c0f912d2864eb9b47964b423a83d3cbc7978e6c90385229
3
+ metadata.gz: d9bb9bafc29e9442fed0bf862fb442ea6efaa97c2881b7b958361f0ef7095aaa
4
+ data.tar.gz: f25db1d4c05ef3b20c5fabefa4eb664e702f51f8d9821b0c44f5f5404ade4c3b
5
5
  SHA512:
6
- metadata.gz: 17e9ff63c011271c8fceb20c08f1c3d36f85c6674608690575ffc08b79b5d9704c0d63e456c00a2a0207295f54ef8c5df9f59c5de71680b1bf018faee93cba26
7
- data.tar.gz: fcffaeed7fba1e7f2bd9ec25f57426d544281cd434f8138253f5046f47e73a871770b4e8be1cb08349462b988a6101bbbca1f7ecc273bd74f457271eb3a84aa9
6
+ metadata.gz: dc69e05565c5b007fbaaddc7636d6298fc9930c42d1e029834b752236309d97024132118bb723817c5c192cad1f1cef01e278ce4fc46629dac706d0ec4fdd6a2
7
+ data.tar.gz: 702e18b78c3e9b21e1abe86671bbe6f2427db44b05be4941c1693f30070f1de028af5324294d693bdeda130da603ecfd5c98dcefbce7ca21f7e7f6df5a249b97
data/lib/tilt/coffee.rb CHANGED
@@ -15,18 +15,6 @@ module Tilt
15
15
  attr_accessor :default_bare
16
16
  end
17
17
 
18
- # :nocov:
19
- def self.default_no_wrap
20
- warn "#{self.class}.default_no_wrap is deprecated and will be removed in Tilt 2.3. Switch to #{self.class}.default_bare."
21
- default_bare
22
- end
23
-
24
- def self.default_no_wrap=(value)
25
- warn "#{self.class}.default_no_wrap= is deprecated and will be removed in Tilt 2.3. Switch to #{self.class}.default_bare=."
26
- self.default_bare = value
27
- end
28
- # :nocov:
29
-
30
18
  def self.literate?
31
19
  false
32
20
  end
@@ -2,53 +2,94 @@
2
2
  require_relative 'template'
3
3
  require 'commonmarker'
4
4
 
5
- aliases = {
6
- :smartypants => :SMART
7
- }.freeze
8
- parse_opts = [
9
- :FOOTNOTES,
10
- :LIBERAL_HTML_TAG,
11
- :SMART,
12
- :smartypants,
13
- :STRIKETHROUGH_DOUBLE_TILDE,
14
- :UNSAFE,
15
- :VALIDATE_UTF8,
16
- ].freeze
17
- render_opts = [
18
- :FOOTNOTES,
19
- :FULL_INFO_STRING,
20
- :GITHUB_PRE_LANG,
21
- :HARDBREAKS,
22
- :NOBREAKS,
23
- :SAFE, # Removed in v0.18.0 (2018-10-17)
24
- :SOURCEPOS,
25
- :TABLE_PREFER_STYLE_ATTRIBUTES,
26
- :UNSAFE,
27
- ].freeze
28
- exts = [
29
- :autolink,
30
- :strikethrough,
31
- :table,
32
- :tagfilter,
33
- :tasklist,
34
- ].freeze
5
+ if defined?(::Commonmarker)
6
+ aliases = {
7
+ :smartypants => :smart
8
+ }.freeze
9
+ parse_opts = [
10
+ :smart,
11
+ :default_info_string,
12
+ ].freeze
13
+ render_opts = [
14
+ :hardbreaks,
15
+ :github_pre_lang,
16
+ :width,
17
+ :unsafe,
18
+ :escape,
19
+ :sourcepos,
20
+ ].freeze
21
+ exts = [
22
+ :strikethrough,
23
+ :tagfilter,
24
+ :table,
25
+ :autolink,
26
+ :tasklist,
27
+ :superscript,
28
+ :header_ids,
29
+ :footnotes,
30
+ :description_lists,
31
+ :front_matter_delimiter,
32
+ :shortcodes,
33
+ ].freeze
35
34
 
35
+ Tilt::CommonMarkerTemplate = Tilt::StaticTemplate.subclass do
36
+ parse_options = @options.select { |key, _| parse_opts.include?(key.downcase) }.transform_keys(&:downcase)
37
+ parse_options.merge!(@options.select { |key, _| aliases.has_key?(key) }.transform_keys { |key| aliases[key] })
38
+ render_options = @options.select { |key, _| render_opts.include?(key.downcase) }.transform_keys(&:downcase)
39
+ extensions = @options.select { |key, _| exts.include?(key) }.transform_keys(&:downcase)
36
40
 
37
- Tilt::CommonMarkerTemplate = Tilt::StaticTemplate.subclass do
38
- extensions = exts.select do |extension|
39
- @options[extension]
41
+ Commonmarker.to_html(@data, options: { parse: parse_options, render: render_options, extension: extensions })
40
42
  end
43
+ # :nocov:
44
+ else
45
+ aliases = {
46
+ :smartypants => :SMART
47
+ }.freeze
48
+ parse_opts = [
49
+ :FOOTNOTES,
50
+ :LIBERAL_HTML_TAG,
51
+ :SMART,
52
+ :smartypants,
53
+ :STRIKETHROUGH_DOUBLE_TILDE,
54
+ :UNSAFE,
55
+ :VALIDATE_UTF8,
56
+ ].freeze
57
+ render_opts = [
58
+ :FOOTNOTES,
59
+ :FULL_INFO_STRING,
60
+ :GITHUB_PRE_LANG,
61
+ :HARDBREAKS,
62
+ :NOBREAKS,
63
+ :SAFE, # Removed in v0.18.0 (2018-10-17)
64
+ :SOURCEPOS,
65
+ :TABLE_PREFER_STYLE_ATTRIBUTES,
66
+ :UNSAFE,
67
+ ].freeze
68
+ exts = [
69
+ :autolink,
70
+ :strikethrough,
71
+ :table,
72
+ :tagfilter,
73
+ :tasklist,
74
+ ].freeze
41
75
 
42
- parse_options, render_options = [parse_opts, render_opts].map do |opts|
43
- opts = opts.select do |option|
44
- @options[option]
45
- end.map! do |option|
46
- aliases[option] || option
76
+ Tilt::CommonMarkerTemplate = Tilt::StaticTemplate.subclass do
77
+ extensions = exts.select do |extension|
78
+ @options[extension]
47
79
  end
48
80
 
49
- opts = :DEFAULT unless opts.any?
50
- opts
51
- end
81
+ parse_options, render_options = [parse_opts, render_opts].map do |opts|
82
+ opts = opts.select do |option|
83
+ @options[option]
84
+ end.map! do |option|
85
+ aliases[option] || option
86
+ end
87
+
88
+ opts = :DEFAULT unless opts.any?
89
+ opts
90
+ end
52
91
 
53
- CommonMarker.render_doc(@data, parse_options, extensions).to_html(render_options, extensions)
92
+ CommonMarker.render_doc(@data, parse_options, extensions).to_html(render_options, extensions)
93
+ end
54
94
  end
95
+ # :nocov:
data/lib/tilt/erb.rb CHANGED
@@ -8,23 +8,9 @@ module Tilt
8
8
  class ERBTemplate < Template
9
9
  SUPPORTS_KVARGS = ::ERB.instance_method(:initialize).parameters.assoc(:key) rescue false
10
10
 
11
- # Remove in Tilt 2.3
12
- @default_output_variable = nil
13
- def self._default_output_variable
14
- @default_output_variable
15
- end
16
- def self.default_output_variable
17
- warn "#{self}.default_output_variable is deprecated and will be removed in Tilt 2.3.", uplevel: 1
18
- @default_output_variable
19
- end
20
- def self.default_output_variable=(name)
21
- warn "#{self}.default_output_variable= is deprecated and will be removed in Tilt 2.3. Switch to using the :outvar option.", uplevel: 1
22
- @default_output_variable = name
23
- end
24
-
25
11
  def prepare
26
12
  @freeze_string_literals = !!@options[:freeze]
27
- @outvar = @options[:outvar] || self.class._default_output_variable || '_erbout'
13
+ @outvar = @options[:outvar] || '_erbout'
28
14
  trim = case @options[:trim]
29
15
  when false
30
16
  nil
data/lib/tilt/erubis.rb CHANGED
@@ -2,6 +2,8 @@
2
2
  require_relative 'erb'
3
3
  require 'erubis'
4
4
 
5
+ warn 'tilt/erubis is deprecated, as erubis requires modifying string literals', uplevel: 1
6
+
5
7
  module Tilt
6
8
  # Erubis template implementation. See:
7
9
  # http://www.kuwata-lab.com/erubis/
@@ -16,12 +18,9 @@ module Tilt
16
18
  # the engine class instead of the default. All content
17
19
  # within <%= %> blocks will be automatically html escaped.
18
20
  class ErubisTemplate < ERBTemplate
19
- # Remove in Tilt 2.3
20
- @default_output_variable = nil
21
-
22
21
  def prepare
23
22
  @freeze_string_literals = !!@options.delete(:freeze)
24
- @outvar = @options.delete(:outvar) || self.class._default_output_variable || '_erbout'
23
+ @outvar = @options.delete(:outvar) || '_erbout'
25
24
  @options[:preamble] = false
26
25
  @options[:postamble] = false
27
26
  @options[:bufvar] = @outvar
data/lib/tilt/etanni.rb CHANGED
@@ -5,7 +5,7 @@ module Tilt
5
5
  class EtanniTemplate < Template
6
6
  def prepare
7
7
  separator = data.hash.abs
8
- chomp = "<<#{separator}.chomp!"
8
+ chomp = "<<#{separator}.chomp"
9
9
  start = "\n_out_ << #{chomp}\n"
10
10
  stop = "\n#{separator}\n"
11
11
  replacement = "#{stop}\\1#{start}"
@@ -13,7 +13,7 @@ module Tilt
13
13
  temp = @data.strip
14
14
  temp.gsub!(/<\?r\s+(.*?)\s+\?>/m, replacement)
15
15
 
16
- @code = "_out_ = [<<#{separator}.chomp!]\n#{temp}#{stop}_out_.join"
16
+ @code = "_out_ = [<<#{separator}.chomp]\n#{temp}#{stop}_out_.join"
17
17
  end
18
18
 
19
19
  def precompiled_template(locals)
data/lib/tilt/maruku.rb CHANGED
@@ -2,6 +2,8 @@
2
2
  require_relative 'template'
3
3
  require 'maruku'
4
4
 
5
+ warn 'tilt/maruku is deprecated, as maruku requires modifying string literals', uplevel: 1
6
+
5
7
  # Maruku markdown implementation. See: https://github.com/bhollis/maruku
6
8
  Tilt::MarukuTemplate = Tilt::StaticTemplate.subclass do
7
9
  Maruku.new(@data, @options).to_html
data/lib/tilt/prawn.rb CHANGED
@@ -15,16 +15,9 @@ module Tilt
15
15
 
16
16
  def evaluate(scope, locals, &block)
17
17
  pdf = @engine
18
- if @data.respond_to?(:to_str)
19
- locals = locals.dup
20
- locals[:pdf] = pdf
21
- super
22
- else
23
- warn "Non-string provided as prawn template data. This is no longer supported and support for it will be removed in Tilt 2.3", :uplevel=>2
24
- # :nocov:
25
- @data.call(pdf) if @data.kind_of?(Proc)
26
- # :nocov:
27
- end
18
+ locals = locals.dup
19
+ locals[:pdf] = pdf
20
+ super
28
21
  pdf.render
29
22
  end
30
23
 
@@ -4,41 +4,28 @@ require 'redcarpet'
4
4
 
5
5
  aliases = {:escape_html => :filter_html, :smartypants => :smart}.freeze
6
6
 
7
- # :nocov:
8
- unless defined? ::Redcarpet::Render and defined? ::Redcarpet::Markdown
9
- # Redcarpet 1.x
10
- warn "Tilt support for RedCarpet 1.x is deprecated and will be removed in Tilt 2.3", uplevel: 1
11
- _flags = [:smart, :filter_html, :smartypants, :escape_html]
12
-
13
- Tilt::RedcarpetTemplate = Tilt::StaticTemplate.subclass do
14
- flags = _flags.select { |flag| @options[flag] }.map! { |flag| aliases[flag] || flag }
15
- RedcarpetCompat.new(@data, *flags).to_html
16
- end
17
- # :nocov:
18
- else
19
- Tilt::RedcarpetTemplate = Tilt::StaticTemplate.subclass do
20
- aliases.each do |opt, aka|
21
- if options.key?(aka) || !@options.key?(opt)
22
- @options[opt] = @options.delete(aka)
23
- end
7
+ Tilt::RedcarpetTemplate = Tilt::StaticTemplate.subclass do
8
+ aliases.each do |opt, aka|
9
+ if options.key?(aka) || !@options.key?(opt)
10
+ @options[opt] = @options.delete(aka)
24
11
  end
12
+ end
25
13
 
26
- # only raise an exception if someone is trying to enable :escape_html
27
- @options.delete(:escape_html) unless @options[:escape_html]
14
+ # only raise an exception if someone is trying to enable :escape_html
15
+ @options.delete(:escape_html) unless @options[:escape_html]
28
16
 
29
- renderer = @options.delete(:renderer) || ::Redcarpet::Render::HTML.new(@options)
30
- if options.delete(:smartypants) && !(renderer.is_a?(Class) && renderer <= ::Redcarpet::Render::SmartyPants)
31
- renderer = if renderer == ::Redcarpet::Render::XHTML
32
- ::Redcarpet::Render::SmartyHTML.new(:xhtml => true)
33
- elsif renderer == ::Redcarpet::Render::HTML
34
- ::Redcarpet::Render::SmartyHTML
35
- elsif renderer.is_a? Class
36
- Class.new(renderer) { include ::Redcarpet::Render::SmartyPants }
37
- else
38
- renderer.extend ::Redcarpet::Render::SmartyPants
39
- end
17
+ renderer = @options.delete(:renderer) || ::Redcarpet::Render::HTML.new(@options)
18
+ if options.delete(:smartypants) && !(renderer.is_a?(Class) && renderer <= ::Redcarpet::Render::SmartyPants)
19
+ renderer = if renderer == ::Redcarpet::Render::XHTML
20
+ ::Redcarpet::Render::SmartyHTML.new(:xhtml => true)
21
+ elsif renderer == ::Redcarpet::Render::HTML
22
+ ::Redcarpet::Render::SmartyHTML
23
+ elsif renderer.is_a? Class
24
+ Class.new(renderer) { include ::Redcarpet::Render::SmartyPants }
25
+ else
26
+ renderer.extend ::Redcarpet::Render::SmartyPants
40
27
  end
41
-
42
- Redcarpet::Markdown.new(renderer, @options).render(@data)
43
28
  end
29
+
30
+ Redcarpet::Markdown.new(renderer, @options).render(@data)
44
31
  end
data/lib/tilt/sass.rb CHANGED
@@ -13,6 +13,13 @@ module Tilt
13
13
  # :nocov:
14
14
  require 'uri'
15
15
 
16
+ ALLOWED_KEYS = (defined?(::Sass::Compiler) ? ::Sass::Compiler : ::Sass::Embedded).
17
+ instance_method(:compile_string).
18
+ parameters.
19
+ map{|k, v| v if k == :key}.
20
+ compact rescue nil
21
+ private_constant :ALLOWED_KEYS
22
+
16
23
  private
17
24
 
18
25
  def _prepare_output
@@ -22,9 +29,11 @@ module Tilt
22
29
  def sass_options
23
30
  path = File.absolute_path(eval_file)
24
31
  path = '/' + path unless path.start_with?('/')
25
- @options[:url] = ::URI::File.build([nil, ::URI::DEFAULT_PARSER.escape(path)]).to_s
26
- @options[:syntax] = :indented
27
- @options
32
+ opts = @options.dup
33
+ opts[:url] = ::URI::File.build([nil, ::URI::DEFAULT_PARSER.escape(path)]).to_s
34
+ opts[:syntax] = :indented
35
+ opts.delete_if{|k| !ALLOWED_KEYS.include?(k)} if ALLOWED_KEYS
36
+ opts
28
37
  end
29
38
  rescue LoadError => err
30
39
  begin
@@ -61,9 +70,9 @@ module Tilt
61
70
  private
62
71
 
63
72
  def sass_options
64
- super
65
- @options[:syntax] = :scss
66
- @options
73
+ opts = super
74
+ opts[:syntax] = :scss
75
+ opts
67
76
  end
68
77
  end
69
78
  end
data/lib/tilt/string.rb CHANGED
@@ -7,6 +7,7 @@ module Tilt
7
7
  class StringTemplate < Template
8
8
  def prepare
9
9
  hash = "TILT#{@data.hash.abs}"
10
+ @freeze_string_literals = !!@options[:freeze]
10
11
  @code = String.new("<<#{hash}.chomp\n#{@data}\n#{hash}")
11
12
  end
12
13
 
@@ -18,5 +19,9 @@ module Tilt
18
19
  source, offset = super
19
20
  [source, offset + 1]
20
21
  end
22
+
23
+ def freeze_string_literals?
24
+ @freeze_string_literals
25
+ end
21
26
  end
22
27
  end
data/lib/tilt/template.rb CHANGED
@@ -99,11 +99,7 @@ module Tilt
99
99
  # block is given, it is typically available within the template via
100
100
  # +yield+.
101
101
  def render(scope=nil, locals=nil, &block)
102
- current_template = Thread.current[:tilt_current_template]
103
- Thread.current[:tilt_current_template] = self
104
102
  evaluate(scope || Object.new, locals || EMPTY_HASH, &block)
105
- ensure
106
- Thread.current[:tilt_current_template] = current_template
107
103
  end
108
104
 
109
105
  # The basename of the template file.
@@ -355,7 +351,11 @@ module Tilt
355
351
  path << ".rb"
356
352
 
357
353
  # Wrap method source in a class block for the scope, so constant lookup works
358
- method_source = "class #{scope_class.name}\n#{method_source}\nend"
354
+ if freeze_string_literals?
355
+ method_source_prefix = "# frozen-string-literal: true\n"
356
+ method_source = method_source.sub(/\A# frozen-string-literal: true\n/, '')
357
+ end
358
+ method_source = "#{method_source_prefix}class #{scope_class.name}\n#{method_source}\nend"
359
359
 
360
360
  load_compiled_method(path, method_source)
361
361
  else
@@ -2,6 +2,8 @@
2
2
  require_relative 'template'
3
3
  require 'wikicloth'
4
4
 
5
+ warn 'tilt/wikicloth is deprecated, as wikicloth requires modifying string literals', uplevel: 1
6
+
5
7
  # WikiCloth implementation. See: https://github.com/nricciar/wikicloth
6
8
  Tilt::WikiClothTemplate = Tilt::StaticTemplate.subclass do
7
9
  parser = @options.delete(:parser) || WikiCloth::Parser
data/lib/tilt.rb CHANGED
@@ -5,7 +5,7 @@ require_relative 'tilt/template'
5
5
  # Namespace for Tilt. This module is not intended to be included anywhere.
6
6
  module Tilt
7
7
  # Current version.
8
- VERSION = '2.2.0'
8
+ VERSION = '2.4.0'
9
9
 
10
10
  EMPTY_HASH = {}.freeze
11
11
  private_constant :EMPTY_HASH
@@ -18,6 +18,8 @@ module Tilt
18
18
  # is called, all attempts to modify the default mapping will fail.
19
19
  # This also freezes Tilt itself.
20
20
  def self.finalize!
21
+ return self if @default_mapping.is_a?(FinalizedMapping)
22
+
21
23
  class << self
22
24
  prepend(Module.new do
23
25
  def lazy_map(*)
@@ -80,19 +82,6 @@ module Tilt
80
82
  @default_mapping.templates_for(file)
81
83
  end
82
84
 
83
- # @return the template object that is currently rendering.
84
- #
85
- # @example
86
- # tmpl = Tilt['index.erb'].new { '<%= Tilt.current_template %>' }
87
- # tmpl.render == tmpl.to_s
88
- #
89
- # @note This is currently an experimental feature and might return nil
90
- # in the future.
91
- def self.current_template
92
- warn "Tilt.current_template is deprecated and will be removed in Tilt 2.3", uplevel: 1
93
- Thread.current[:tilt_current_template]
94
- end
95
-
96
85
  class << self
97
86
  # @return [Tilt::Mapping] the main mapping object
98
87
  attr_reader :default_mapping
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tilt
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Tomayko
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-06-05 00:00:00.000000000 Z
13
+ date: 2024-06-27 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Generic interface to multiple Ruby template engines
16
16
  email: code@jeremyevans.net
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
95
- rubygems_version: 3.4.10
95
+ rubygems_version: 3.5.9
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: Generic interface to multiple Ruby template engines