tilt 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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