Sha256: f701366579c96290084ebde5dc00a5049c6241edf2d0be8fa0ac1882fa5a9c98

Contents?: true

Size: 1.99 KB

Versions: 3

Compression:

Stored size: 1.99 KB

Contents

require "active_support/core_ext/string/output_safety"

module Serbea
  module Helpers
    def self.included(mod)
      Serbea::Pipeline.deny_value_method %i(escape h prepend append assign_to)
    end

    def capture(obj = nil, &block)
      previous_buffer_state = @_erbout
      @_erbout = Serbea::Buffer.new

      # For compatibility with ActionView, not used by Bridgetown normally
      previous_ob_state = @output_buffer
      @output_buffer = Serbea::Buffer.new

      result = instance_exec(obj, &block)
      if @output_buffer != ""
        # use Rails' ActionView buffer if present
        result = @output_buffer
      end
      @_erbout = previous_buffer_state
      @output_buffer = previous_ob_state

      result.html_safe
    end
  
    def pipeline(context, value)
      Pipeline.new(context, value)
    end
  
    def helper(name, &helper_block)
      self.class.define_method(name) do |*args, &block|
        previous_buffer_state = @_erbout
        @_erbout = Serbea::Buffer.new
  
        # For compatibility with ActionView, not used by Bridgetown normally
        previous_ob_state = @output_buffer
        @output_buffer = Serbea::Buffer.new
  
        result = helper_block.call(*args, &block)
        if @output_buffer != ""
          # use Rails' ActionView buffer if present
          result = @output_buffer
        end
        @_erbout = previous_buffer_state
        @output_buffer = previous_ob_state
  
        result.is_a?(String) ? result.html_safe : result
      end
    end
    alias_method :macro, :helper
  
    def h(input)
      ERB::Util.h(input.to_s)
    end
    alias_method :escape, :h

    def safe(input)
      input.to_s.html_safe
    end
    alias_method :raw, :safe

    def prepend(old_string, new_string)
      "#{new_string}#{old_string}"
    end

    def append(old_string, new_string)
      "#{old_string}#{new_string}"
    end

    def assign_to(input, varname, preserve: false)
      self.instance_variable_set("@#{varname}", input)
      preserve ? input : nil
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
serbea-0.7.1 lib/serbea/helpers.rb
serbea-0.7.0 lib/serbea/helpers.rb
serbea-0.6.4 lib/serbea/helpers.rb