/usr/lib/ruby/vendor_ruby/slim/splat/builder.rb is in ruby-slim 2.0.2-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | module Slim
module Splat
# @api private
class Builder
def initialize(options)
@options = options
@attrs = {}
end
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
def splat_attrs(splat)
splat.each do |name, value|
code_attr(name.to_s, true, value)
end
end
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
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
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
private
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
end
end
end
|