Class: DefaultAvatarGenerator::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/default_avatar_generator/generator.rb

Overview

The Generator class is responsible for creating avatar images with customizable backgrounds, foregrounds, and text layers.

Constant Summary collapse

AVAILABLE_BACKGROUNDS =
%w[
  gradient-2h
  gradient-3h
  gradient-backslash
  gradient-slash
  gradient-lr
  gradient-tb
  solid
].freeze
AVAILABLE_FOREGROUNDS =
%w[
  head1-solid
  head2
  head3
].freeze
AVAILABLE_TEXT =

NOTE: ‘base’ doesn’t work because libvips doesn’t support dominant-baseline in SVG. Can move back once gitlab.gnome.org/GNOME/librsvg/-/merge_requests/1072 makes it way into the latest version.

%w[
  hack
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Generator

Returns a new instance of Generator.



30
31
32
# File 'lib/default_avatar_generator/generator.rb', line 30

def initialize(options = {})
  @options = options
end

Instance Method Details

#background_paramsObject



58
59
60
61
62
63
64
65
66
67
# File 'lib/default_avatar_generator/generator.rb', line 58

def background_params
  {
    color1: Colors.select_solid_color,
    color2: Colors.select_solid_color,
    color3: Colors.select_solid_color,
    color4: Colors.select_solid_color,
    color5: Colors.select_solid_color,
    color6: Colors.select_solid_color
  }
end

#foreground_paramsObject



73
74
75
76
77
78
79
80
# File 'lib/default_avatar_generator/generator.rb', line 73

def foreground_params
  @foreground_color_name = Colors.available_colors.sample
  @foreground_shade = Colors.contrast_shades.sample
  {
    color: Colors.get(@foreground_color_name, @foreground_shade),
    transformation: ForegroundLayer.select_transform
  }
end

#generateObject

rubocop:disable Metrics/AbcSize



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/default_avatar_generator/generator.rb', line 34

def generate # rubocop:disable Metrics/AbcSize
  # Create layers with dynamic parameters
  layers = [
    BackgroundLayer.new(
      select_background,
      background_params.merge(@options[:background] || {})
    ),
    ForegroundLayer.new(
      select_foreground,
      foreground_params.merge(@options[:foreground] || {})
    ),
    TextLayer.new(
      select_text,
      text_params.merge(@options[:text] || {})
    )
  ]

  Composer.new(layers).compose
end

#select_backgroundObject



54
55
56
# File 'lib/default_avatar_generator/generator.rb', line 54

def select_background
  AVAILABLE_BACKGROUNDS.sample
end

#select_foregroundObject



69
70
71
# File 'lib/default_avatar_generator/generator.rb', line 69

def select_foreground
  AVAILABLE_FOREGROUNDS.sample
end

#select_textObject



82
83
84
# File 'lib/default_avatar_generator/generator.rb', line 82

def select_text
  AVAILABLE_TEXT.sample
end

#text_paramsObject



86
87
88
89
90
91
# File 'lib/default_avatar_generator/generator.rb', line 86

def text_params
  {
    color: Colors.get(@foreground_color_name, Colors.opposite_shade(@foreground_shade))
    # character: ('A'..'Z').to_a.sample
  }
end