serbea 0.4.4 → 0.5.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: edb5cf139c2f14b2f524192f87b45fcfcc931efa0eb27b25e19d6f86ec98f3b2
4
- data.tar.gz: 40b5e1177175daad6b356371d58a608e838d214a90b08415f63f4930dd28f4e3
3
+ metadata.gz: ce17e2b60c2abf63a033d8d358686d4df115e87a4c149ba3c625a403863e129c
4
+ data.tar.gz: a3901a5286afc92e84b2ecc29b2622e80a592f0d0d9de46a7aa58d836e150c65
5
5
  SHA512:
6
- metadata.gz: 074cb4b928fe2e79ab5786169f88be23dc01e17f5545d43b6bacdbe619491dc9a656a16fb019ea86e3f7c3feee1ce45f7f3f916063aaed2b61c6ecf21af00066
7
- data.tar.gz: 14f6024cec0af16f22de2549f6c0bf25ede4a75b458ab64b9970dc71088923643cdc4be0414b952dd2c12cc814d2b34aa17b6cc9cda97cfe71d72b8b15efa97a
6
+ metadata.gz: 52aadba5419583064f26be67a99805ea66af5798b3bd3a34604967c91fdee3f2e6010ba692b6f70a2de798fa5d899bb7760fd3a76975e415932e5922c7f21c6a
7
+ data.tar.gz: 4bc3fcfa08bb021ceb68ae675f4f47d4fd72a2e1cdd71fe68d8b4e435493238c49f205f10ccc52e0980d160a226433af19b70d39d18bc3d73b30c9afb8be0698
@@ -10,7 +10,7 @@ require "serbea/component_renderer"
10
10
  module Tilt
11
11
  class SerbeaTemplate < ErubiTemplate
12
12
  def prepare
13
- @options.merge!(outvar: "@_erbout", engine_class: Serbea::TemplateEngine)
13
+ @options.merge!(outvar: "@_erbout", bufval: "Serbea::Buffer.new", engine_class: Serbea::TemplateEngine)
14
14
  super
15
15
  end
16
16
 
@@ -4,9 +4,9 @@ module Bridgetown
4
4
  class SerbeaView < RubyTemplateView
5
5
  include Serbea::Helpers
6
6
 
7
- def partial(partial_name, options = {})
7
+ def partial(partial_name, options = {}, &block)
8
8
  options.merge!(options[:locals]) if options[:locals]
9
- options[:content] = yield if block_given?
9
+ options[:content] = capture(&block) if block
10
10
 
11
11
  partial_segments = partial_name.split("/")
12
12
  partial_segments.last.sub!(%r!^!, "_")
@@ -17,11 +17,12 @@ module Bridgetown
17
17
  ).render(self, options)
18
18
  end
19
19
 
20
- def markdownify(&block)
21
- content = Bridgetown::Utils.reindent_for_markdown(capture(&block))
20
+ def markdownify(input = nil, &block)
21
+ content = Bridgetown::Utils.reindent_for_markdown(
22
+ block.nil? ? input.to_s : capture(&block)
23
+ )
22
24
  converter = site.find_converter_instance(Bridgetown::Converters::Markdown)
23
- md_output = converter.convert(content).strip
24
- @_erbout << md_output
25
+ converter.convert(content).strip
25
26
  end
26
27
  end
27
28
 
@@ -4,12 +4,22 @@ module Serbea
4
4
  Serbea::Pipeline.deny_value_method %i(escape h prepend append assign_to)
5
5
  end
6
6
 
7
- def capture(obj=nil)
7
+ def capture(obj = nil, &block)
8
8
  previous_buffer_state = @_erbout
9
- @_erbout = +""
10
- result = obj ? yield(obj) : yield
9
+ @_erbout = Serbea::Buffer.new
10
+
11
+ # For compatibility with ActionView, not used by Bridgetown normally
12
+ previous_ob_state = @output_buffer
13
+ @output_buffer = Serbea::Buffer.new
14
+
15
+ result = instance_exec(obj, &block)
16
+ if @output_buffer != ""
17
+ # use Rails' ActionView buffer if present
18
+ result = @output_buffer
19
+ end
11
20
  @_erbout = previous_buffer_state
12
-
21
+ @output_buffer = previous_ob_state
22
+
13
23
  result.respond_to?(:html_safe) ? result.html_safe : result
14
24
  end
15
25
 
@@ -27,6 +27,8 @@ end
27
27
 
28
28
  ActionView::Template.register_template_handler(:serb, Serbea::Plugin)
29
29
 
30
- Serbea::Pipeline.output_processor = lambda do |input|
31
- input.html_safe? ? input : ActionController::Base.helpers.strip_tags(input)
30
+ if defined?(ActionController::Base)
31
+ Serbea::Pipeline.output_processor = lambda do |input|
32
+ input.html_safe? ? input : ActionController::Base.helpers.strip_tags(input)
33
+ end
32
34
  end
@@ -1,5 +1,15 @@
1
1
  module Serbea
2
- class TemplateEngine < Erubi::CaptureEndEngine
2
+ class Buffer < String
3
+ def concat_to_s(input)
4
+ concat input.to_s
5
+ end
6
+
7
+ alias_method :safe_append=, :concat_to_s
8
+ alias_method :append=, :concat_to_s
9
+ alias_method :safe_expr_append=, :concat_to_s
10
+ end
11
+
12
+ class TemplateEngine < Erubi::Engine
3
13
  FRONT_MATTER_REGEXP = %r!\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)!m.freeze
4
14
 
5
15
  def self.render_directive=(directive)
@@ -21,14 +31,14 @@ module Serbea
21
31
  end
22
32
 
23
33
  def initialize(input, properties={})
24
- properties[:regexp] = /{%(\:?={1,2}|-|\#|%|\:)?(.*?)([-=])?%}([ \t]*\r?\n)?/m
34
+ properties[:regexp] = /{%(={1,2}|-|\#|%)?(.*?)([-=])?%}([ \t]*\r?\n)?/m
25
35
  properties[:strip_front_matter] = true unless properties.key?(:strip_front_matter)
26
36
  super process_serbea_input(input, properties), properties
27
37
  end
28
38
 
29
39
  def add_postamble(postamble)
30
40
  src << postamble
31
- src << "@_erbout.html_safe" if postamble.respond_to?(:html_safe)
41
+ src << "#{@bufvar}.html_safe" if postamble.respond_to?(:html_safe)
32
42
 
33
43
  src.gsub!("__RAW_START_PRINT__", "{{")
34
44
  src.gsub!("__RAW_END_PRINT__", "}}")
@@ -140,7 +150,7 @@ module Serbea
140
150
  end
141
151
 
142
152
  if includes_block
143
- buff << "{%:= #{self.class.render_directive}#{pieces.join(" ")} %}"
153
+ buff << "{%= #{self.class.render_directive}#{pieces.join(" ")} %}"
144
154
  else
145
155
  pieces.last << ")"
146
156
  buff << "{%= #{self.class.render_directive}#{pieces.join(" ")} %}"
@@ -149,7 +159,7 @@ module Serbea
149
159
  buff << "\n{% %}" # preserve original directive line length
150
160
  end
151
161
  else
152
- buff << "{%: end %}"
162
+ buff << "{% end %}"
153
163
  end
154
164
  end
155
165
  end
@@ -158,26 +168,27 @@ module Serbea
158
168
  end
159
169
 
160
170
  private
161
-
162
- # Handle the {%:= and {%:== tags
163
- # Carried over from the Erubi class but with changed indicators
164
- def handle(indicator, code, tailch, rspace, lspace)
165
- case indicator
166
- when ':=', ':=='
167
- rspace = nil if tailch && !tailch.empty?
168
- add_text(lspace) if lspace
169
- escape_capture = !((indicator == ':=') ^ @escape_capture)
170
- src << "begin; (#{@bufstack} ||= []) << #{@bufvar}; #{@bufvar} = #{@bufval}; #{@bufstack}.last << #{@escapefunc if escape_capture}((" << code
171
- add_text(rspace) if rspace
172
- when ':'
173
- rspace = nil if tailch && !tailch.empty?
174
- add_text(lspace) if lspace
175
- result = @yield_returns_buffer ? " #{@bufvar}; " : ""
176
- src << result << code << ")).to_s; ensure; #{@bufvar} = #{@bufstack}.pop; end;"
177
- add_text(rspace) if rspace
171
+
172
+ def add_code(code)
173
+ @src << code
174
+ @src << ";#{@bufvar};" if code.strip.split(".").first == "end"
175
+ @src << ';' unless code[Erubi::RANGE_LAST] == "\n"
176
+ end
177
+
178
+ # pulled from Rails' ActionView
179
+ BLOCK_EXPR = %r!\s*((\s+|\))do|\{)(\s*\|[^|]*\|)?\s*\Z!.freeze
180
+
181
+ def add_expression(indicator, code)
182
+ if BLOCK_EXPR.match?(code)
183
+ src << "#{@bufvar}.append= " << code
178
184
  else
179
185
  super
180
186
  end
181
187
  end
188
+
189
+ # Don't allow == to output escaped strings, as that's the opposite of Rails
190
+ def add_expression_result_escaped(code)
191
+ add_expression_result(code)
192
+ end
182
193
  end # class
183
194
  end
@@ -1,3 +1,3 @@
1
1
  module Serbea
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serbea
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bridgetown Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-19 00:00:00.000000000 Z
11
+ date: 2020-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: erubi