Sha256: 2a94d960c7ece2a4954bc83e4a8db2928001b2b20c13d0f76b3e9ac894922d31

Contents?: true

Size: 1.32 KB

Versions: 6

Compression:

Stored size: 1.32 KB

Contents

module Basepack
  module Renderable
    extend ActiveSupport::Concern

    module ClassMethods
      def render(name = nil, options = {}, &rendering_block)
        if name.blank?
          render = "render"
          content = options[:content] || "content"
        else
          render = "render_#{name}"
          content = options[:content] || "content_for_#{name}"
        end

        var = "@#{content}".to_sym
        render_bang = "#{render}!"

        define_method content do |&block|
          # hack - view.capture doesn't work for Haml if not called on block with original binding
          params = block.parameters
          if params.present? and params.last[0] == :block
            instance_variable_set(var, [block, eval("proc {|c, s, a, b| c.(s, *a, &b)}", block.binding)])
          else
            instance_variable_set(var, block)
          end
        end

        define_method render_bang, &rendering_block

        define_method render do |*args, &block|
          if cont_block = instance_variable_get(var)
            if cont_block.is_a? Array
              view.capture(cont_block[0], self, args, block, &cont_block[1])
            else
              view.capture(self, *args, &cont_block)
            end
          else
            send(render_bang, *args, &block)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
basepack-1.0.1 lib/basepack/renderable.rb
basepack-1.0.0 lib/basepack/renderable.rb
basepack-1.0.0.pre.0 lib/basepack/renderable.rb
basepack-0.2.0 lib/basepack/renderable.rb
basepack-0.1.0 lib/basepack/renderable.rb
basepack-0.0.2 lib/basepack/renderable.rb