module Avatarro

Constants

GRADIENTS
VERSION

Public Class Methods

image(initials, args = {}) click to toggle source
# File lib/avatarro.rb, line 48
def Avatarro.image(initials, args = {})
  "data:image/svg+xml;base64,#{Base64.encode64(svg(initials, args))}".html_safe
end
svg(initials, args = {}) click to toggle source
# File lib/avatarro.rb, line 52
def Avatarro.svg(initials, args = {})
  template(initials, args)
end

Private Class Methods

format_initials(initials) click to toggle source
# File lib/avatarro.rb, line 86
def Avatarro.format_initials(initials)
  if initials.size > 2
    initials.scan(/([[:alpha:]])[[:alpha:]]*/).flatten.join.upcase
  else
    initials
  end
end
index(initials) click to toggle source
# File lib/avatarro.rb, line 58
def Avatarro.index(initials)
  initials.chars.inject(0) {|sum, e| sum+= e.ord; sum}
end
template(initials, args = {}) click to toggle source
# File lib/avatarro.rb, line 62
def Avatarro.template(initials, args = {})
  data        = args[:random] ? GRADIENTS.sample : GRADIENTS[index(initials) % GRADIENTS.size]
  start       = args[:start].presence || data[0]
  finish      = args[:solid] ? data[0] : (args[:finish].presence || data[1])
  degree      = args[:degree].presence || data[2].presence || 90
  color       = args[:color].presence || data[3].presence || '#FFF'
  width       = args[:width].presence || 64
  height      = args[:height].presence || 64

  gradient_id = "gradient_#{Time.now.to_i}_#{rand(1_000_000)}"
  %{<?xml version="1.0" encoding="UTF-8"?>
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="#{width}" height="#{height}" viewBox="0 0 #{width} #{height}">
      <linearGradient id="#{gradient_id}" gradientTransform="rotate(#{degree})">
        <stop stop-color="#{start}" offset="0%" />
        <stop stop-color="#{finish}" offset="100%" />
      </linearGradient>
      <rect width="100%" height="100%" fill="url(##{gradient_id})" />
      <text fill="#{color}" font-family="Open Sans,Helvetica,Arial,sans-serif" font-size="#{1 + height / 2}" font-weight="500" x="50%" y="55%" dominant-baseline="middle" text-anchor="middle">
        #{Avatarro.format_initials initials}
      </text>
    </svg>
  }
end