serbea 0.4.4 → 0.5.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: 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