class Purpur::Generator

Public Class Methods

new() click to toggle source
# File lib/purpur/generator.rb, line 8
def initialize
  @templates_dir  = File.expand_path('../../templates', __FILE__)
end

Public Instance Methods

files() click to toggle source
# File lib/purpur/generator.rb, line 12
def files
  Purpur.icons
end
generate(template, destination_path) click to toggle source
# File lib/purpur/generator.rb, line 49
def generate(template, destination_path)
  file = File.new(destination_path, 'w')
  file.write sprite(template)
  file.close
end
icons() click to toggle source
# File lib/purpur/generator.rb, line 20
def icons
  files.map do |name|
    file        = read_svg(name)
    doc         = Nokogiri::HTML::DocumentFragment.parse(file)

    doc.css('*').remove_attr('fill')

    svg         = doc.at_css('svg')
    viewbox     = svg['viewbox']
    g           = svg.search('g')
    container   = g.empty? ? svg : g

    shape       = container.children.map {|c| c.to_s}.join('')
    name        = File.basename(name, Purpur::ICON_EXTENTION)

    { name: name, viewbox: viewbox, shape: shape }
  end
end
optimize(code, template) click to toggle source
# File lib/purpur/generator.rb, line 39
def optimize(code, template)
  template == 'sprite.svg' ? code.gsub(/$\s+/, '') : code
end
read_svg(filename) click to toggle source
# File lib/purpur/generator.rb, line 16
def read_svg(filename)
  File.read(filename)
end
sprite(template) click to toggle source
# File lib/purpur/generator.rb, line 43
def sprite(template)
  view    = File.read File.join(@templates_dir, "#{template}.erb")
  result  = ERB.new(view).result(binding)
  optimize(result, template)
end