class Svgeez::Elements::SymbolElement
Public Class Methods
new(file_path, file_id)
click to toggle source
# File lib/svgeez/elements/symbol_element.rb, line 4 def initialize(file_path, file_id) @file_path = file_path @file_id = file_id end
Public Instance Methods
build()
click to toggle source
# File lib/svgeez/elements/symbol_element.rb, line 9 def build IO.read(@file_path).match(%r{^<svg\s*?(?<attributes>.*?)>(?<content>.*?)</svg>}m) do |matches| %(<symbol #{element_attributes(matches[:attributes]).sort.join(' ')}>#{element_contents(matches[:content])}</symbol>) end end
Private Instance Methods
element_attributes(attributes)
click to toggle source
# File lib/svgeez/elements/symbol_element.rb, line 17 def element_attributes(attributes) attrs = attributes.scan(/(?:viewBox|xmlns:.+?)=".*?"/m) id_prefix = @file_id id_suffix = File.basename(@file_path, '.svg').gsub(/['"\s]/, '-') id_attribute = [id_prefix, id_suffix].reject(&:empty?).join('-') attrs << %(id="#{id_attribute}") end
element_contents(content)
click to toggle source
# File lib/svgeez/elements/symbol_element.rb, line 26 def element_contents(content) content.scan(/\sid="(.+?)"/).flatten.each do |value| uuid = SecureRandom.uuid content.gsub!(/\s(id|xlink:href)="(#?#{value})"/m, %( \\1="\\2-#{uuid}")) content.gsub!(/\s(clip-path|fill|filter|marker-end|marker-mid|marker-start|mask|stroke)="url\((##{value})\)"/m, %( \\1="url(\\2-#{uuid})")) end content end