Sha256: 9d733e2a99660e6cf4a2fb4f65d35e3fdc05464a7e3be20c8284938067819b8c

Contents?: true

Size: 1.04 KB

Versions: 10

Compression:

Stored size: 1.04 KB

Contents

module Rbexy
  class Runtime
    include ActionView::Context
    include ActionView::Helpers::TagHelper
    include ComponentContext

    def self.tag_builder
      # TagBuilder requires a view_context arg, but it's only used in #tag_string.
      # Since all we need is #tag_options, we pass in a nil view_context.
      @tag_builder ||= TagBuilder.new(nil)
    end

    def self.splat_attrs(attrs_hash)
      tag_builder.tag_options(attrs_hash)&.html_safe
    end

    def self.expr_out(*value)
      return if value.length == 0
      value = value.first

      value = html_safe_array?(value) ? value.join.html_safe : value
      [nil, false].include?(value) ? "" : value.to_s
    end

    def self.html_safe_array?(value)
      value.is_a?(Array) && value.all? { |v| v.respond_to?(:html_safe?) && v.html_safe? }
    end

    def evaluate(code)
      @output_buffer = ActionView::OutputBuffer.new
      instance_eval(code)
    rescue => e
      e.set_backtrace(e.backtrace.map { |l| l.gsub("(eval)", "(rbx template string)") })
      raise e
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
rbexy-2.0.0.rc4 lib/rbexy/runtime.rb
rbexy-2.0.0.rc3 lib/rbexy/runtime.rb
rbexy-2.0.0.rc2 lib/rbexy/runtime.rb
rbexy-2.0.0.rc1 lib/rbexy/runtime.rb
rbexy-2.0.0.beta9 lib/rbexy/runtime.rb
rbexy-2.0.0.beta8 lib/rbexy/runtime.rb
rbexy-2.0.0.beta7 lib/rbexy/runtime.rb
rbexy-2.0.0.beta6 lib/rbexy/runtime.rb
rbexy-2.0.0.beta5 lib/rbexy/runtime.rb
rbexy-2.0.0.beta4 lib/rbexy/runtime.rb