Sha256: cade04b400a4b5cb9905297d2df70ba69857da7babf64189e352ee185dadc4ee

Contents?: true

Size: 1.94 KB

Versions: 13

Compression:

Stored size: 1.94 KB

Contents

module Padrino
  module Helpers
    module OutputHelpers
      class AbstractHandler
        attr_reader :template, :output_buffer

        def initialize(template)
          @template = template
          @output_buffer = template.instance_variable_get(:@_out_buf)
        end

        ##
        # Returns true if the block given is of the handler's template type; false otherwise.
        #
        # @example
        #   @handler.engine_matches?(block) => true
        #
        def engine_matches?(block)
        end

        ##
        # Captures the html from a block of template code for this handler.
        #
        # This method is called to capture content of a block-loving helpers in templates.
        # Haml has a special method to do this, for Erb and Slim we save original buffer,
        # call the block and then restore the buffer.
        #
        # @example
        #   @handler.capture_from_template(&block) => "...html..."
        #
        def capture_from_template(*args, &block)
          self.output_buffer, _buf_was = ActiveSupport::SafeBuffer.new, self.output_buffer
          raw = yield(*args)
          captured = template.instance_variable_get(:@_out_buf)
          self.output_buffer = _buf_was
          engine_matches?(block) && !captured.empty? ? captured : raw.to_s
        end

        ##
        # Outputs the given text to the template.
        #
        # This method is called when template uses block-aware helpers. For Slim and Haml such
        # helpers just return output to use with `=`. For Erb this method is implemented in
        # ErbHandler by concatenating given text to output buffer.
        #
        # @example
        #   @handler.concat_to_template("This will be output to the template buffer")
        #
        def concat_to_template(text="")
          text
        end

        protected

        def output_buffer=(val)
          template.instance_variable_set(:@_out_buf, val)
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
padrino-helpers-0.12.8.1 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.12.8 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.12.7 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.12.6 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.13.2 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.13.1 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.13.1.beta1 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.13.0 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.13.0.beta3 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.13.0.beta2 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.12.5 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.13.0.beta1 lib/padrino-helpers/output_helpers/abstract_handler.rb
padrino-helpers-0.12.4 lib/padrino-helpers/output_helpers/abstract_handler.rb