class Slim::Splat::Builder

@api private

Public Class Methods

new(options) click to toggle source
# File lib/slim/splat/builder.rb, line 5
def initialize(options)
  @options = options
  @attrs = {}
end

Public Instance Methods

attr(name, value) click to toggle source
# File lib/slim/splat/builder.rb, line 37
def attr(name, value)
  if @attrs[name]
    if delim = @options[:merge_attrs][name]
      @attrs[name] << delim << value
    else
      raise("Multiple #{name} attributes specified")
    end
  else
    @attrs[name] = value
  end
end
build_attrs() click to toggle source
# File lib/slim/splat/builder.rb, line 59
def build_attrs
  attrs = @options[:sort_attrs] ? @attrs.sort_by(&:first) : @attrs
  attrs.map do |k, v|
    " #{k}=#{@options[:attr_quote]}#{v}#{@options[:attr_quote]}"
  end.join
end
build_tag() click to toggle source
# File lib/slim/splat/builder.rb, line 49
def build_tag
  tag = @attrs.delete('tag').to_s
  tag = @options[:default_tag] if tag.empty?
  if block_given?
    "<#{tag}#{build_attrs}>#{yield}</#{tag}>"
  else
    "<#{tag}#{build_attrs} />"
  end
end
code_attr(name, escape, value) click to toggle source
# File lib/slim/splat/builder.rb, line 10
def code_attr(name, escape, value)
  if delim = @options[:merge_attrs][name]
    value = Array === value ? value.join(delim) : value.to_s
    attr(name, escape ? Temple::Utils.escape_html(value) : value) unless value.empty?
  elsif @options[:hyphen_attrs].include?(name) && Hash === value
    hyphen_attr(name, escape, value)
  else
    case value
    when false, nil
      # Boolean false attribute
      return
    when true
      # Boolean true attribute
      value = ''
    else
      value = value.to_s
    end
    attr(name, escape ? Temple::Utils.escape_html(value) : value)
  end
end
splat_attrs(splat) click to toggle source
# File lib/slim/splat/builder.rb, line 31
def splat_attrs(splat)
  splat.each do |name, value|
    code_attr(name.to_s, true, value)
  end
end

Private Instance Methods

hyphen_attr(name, escape, value) click to toggle source
# File lib/slim/splat/builder.rb, line 68
def hyphen_attr(name, escape, value)
  if Hash === value
    value.each do |n, v|
      hyphen_attr("#{name}-#{n.to_s.gsub('_', '-')}", escape, v)
    end
  else
    attr(name, escape ? Temple::Utils.escape_html(value) : value.to_s)
  end
end