Sha256: 82d08a95d41433036dd4086ed27144f7d4cfe2be50f6c3f35ac7a7fe07e59f42

Contents?: true

Size: 1.25 KB

Versions: 4

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

module Phlex
	module Renderable
		def render(renderable, *args, **kwargs, &block)
			if renderable.is_a?(HTML)
				if block_given? && !block.binding.receiver.is_a?(Phlex::Block)
					block = Phlex::Block.new(self, &block)
				end

				renderable.call(@_target, view_context: @_view_context, parent: self, &block)
			elsif renderable.is_a?(Class) && renderable < Phlex::HTML
				raise ArgumentError, "You tried to render the Phlex view class: #{renderable.name} but you probably meant to render an instance of that class instead."
			else
				@_target << @_view_context.render(renderable, *args, **kwargs, &block)
			end

			nil
		end

		def render_in(view_context, &block)
			if block_given?
				call(view_context: view_context) do |*args, **kwargs|
					view_context.with_output_buffer(self) do
						original_length = @_target.length
						output = yield(*args, **kwargs)
						unchanged = (original_length == @_target.length)

						if unchanged
							if defined?(ActiveSupport::SafeBuffer) && output.is_a?(ActiveSupport::SafeBuffer)
								unsafe_raw(output)
							else
								text(output)
							end
						end
					end
				end.html_safe
			else
				call(view_context: view_context).html_safe
			end
		end

		def format
			:html
		end
	end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
phlex-0.5.3 lib/phlex/renderable.rb
phlex-0.5.2 lib/phlex/renderable.rb
phlex-0.5.1 lib/phlex/renderable.rb
phlex-0.5.0 lib/phlex/renderable.rb