class Mosaiq::Image

Main class to create a Mosaiq Image

Attributes

canvas[R]

Public Class Methods

new(width:, height:, palette: Palette.black_and_white) click to toggle source
# File lib/mosaiq/image.rb, line 10
def initialize(width:, height:, palette: Palette.black_and_white)
  @width = read_positive_integer(width: width)
  @height = read_positive_integer(height: height)
  @palette = read_palette(palette)

  build_canvas
end

Public Instance Methods

svg() click to toggle source
# File lib/mosaiq/image.rb, line 18
def svg
  Mosaiq::Svg.new(@canvas)
end

Private Instance Methods

build_canvas() click to toggle source
# File lib/mosaiq/image.rb, line 24
def build_canvas
  total = @width * @height
  all_tiles = Array.new(total).map { @palette.sample }
  @canvas = all_tiles.each_slice(@width).collect(&:itself)
end
read_palette(palette) click to toggle source
# File lib/mosaiq/image.rb, line 38
def read_palette(palette)
  return palette unless palette.empty?

  raise Mosaiq::InvalidPaletteArgument
end
read_positive_integer(args = {}) click to toggle source
# File lib/mosaiq/image.rb, line 30
def read_positive_integer(args = {})
  key, value = args.first
  integer_value = value.to_i
  return integer_value if integer_value.positive?

  raise Mosaiq::InvalidDimensionArgument.new(key, value)
end