class LetterAvatarSimple

Constants

VERSION

Public Class Methods

config() { |self| ... } click to toggle source
# File lib/letter_avatar_simple.rb, line 13
def self.config(&blk)
  yield(self)
end
generate(identity, output: :string, **kwargs) click to toggle source
# File lib/letter_avatar_simple.rb, line 25
def self.generate(identity, output: :string, **kwargs)
  if identity.is_a?(String)
    identity = Identity.from_username(identity)
  end

  opts = {
    palette: kwargs[:palette] || LetterAvatarSimple.palette,
    color: kwargs[:color] || LetterAvatarSimple.color,
    size: kwargs[:size] || LetterAvatarSimple.size,
    pointsize: kwargs[:pointsize] || LetterAvatarSimple.pointsize,
    font: kwargs[:font] || LetterAvatarSimple.font,
    weight: kwargs[:weight] || LetterAvatarSimple.weight,
    fill_color: kwargs[:fill_color] || LetterAvatarSimple.fill_color,
    annotate_position: kwargs[:annotate_position] || LetterAvatarSimple.annotate_position,
  }

  filename = kwargs[:filename] || generate_temp_filename
  color = opts[:color] || LetterAvatarSimple.palettes.fetch(opts.fetch(:palette)).letter_color(identity)
  MiniMagick::Tool::Convert.new do |x|
    x.size "#{opts.fetch(:size)}x#{opts.fetch(:size)}"
    x << "xc:#{to_rgb(color)}"
    x.pointsize opts.fetch(:pointsize)
    x.font opts.fetch(:font)
    x.weight opts.fetch(:weight)
    x.fill opts.fetch(:fill_color)
    x.gravity "Center"
    x.annotate(opts.fetch(:annotate_position), identity.letters)
    x << filename
  end

  if output == :file
    File.open(filename, "rb")
  else
    StringIO.new(File.binread(filename), "rb").tap do
      FileUtils.rm_f(filename)
    end
  end
end
generate_file(*args, **kwargs) click to toggle source
# File lib/letter_avatar_simple.rb, line 64
def self.generate_file(*args, **kwargs)
  kwargs[:output] = :file
  self.generate(*args, **kwargs)
end
generate_temp_filename(ext=".png") click to toggle source
# File lib/letter_avatar_simple.rb, line 74
def self.generate_temp_filename(ext=".png")
  filename = begin
    Dir::Tmpname.make_tmpname(["x", ext], nil)
  rescue NoMethodError
    require "securerandom"
    "#{SecureRandom.urlsafe_base64}#{ext}"
  end
  File.join(Dir.tmpdir, filename)
end
palettes() click to toggle source
# File lib/letter_avatar_simple.rb, line 17
def self.palettes
  @palettes
end
palettes=(h) click to toggle source
# File lib/letter_avatar_simple.rb, line 21
def self.palettes=(h)
  @palettes = h
end
to_rgb(color) click to toggle source
# File lib/letter_avatar_simple.rb, line 69
def self.to_rgb(color)
  r, g, b = color
  "rgb(#{r},#{g},#{b})"
end