Sha256: c7396bdb1fad97323e3960a7e65553ee586d7125ceb78d4ec02f7779f69bf069

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

require_relative '../face_parser'
require_relative './top_element_factory'

module GridGenerator
  module CurvyCopter 
    class TopGrid
      def initialize(x:, y:, units: , elements: )
        @x, @y = x, y
        @units = units
        @elements = case elements
                    when String
                      FaceParser.new(elements).parse
                    when Array
                      elements
                    else
                      raise ArgumentError, "elements must be array or string"
                    end
      end

      attr_reader :x, :y, :units, :elements

      def to_svg
        output = ''

        element_shapes.each { |element| output += element.to_svg if element }

        output
      end

      private

      def build_element(row_num, col_num, data)
        if data
          TopElementFactory.new(
            grid_x: x,
            grid_y: y,
            row_num: row_num,
            col_num: col_num,
            units: units,
            colour: data[:colour],
            opacity: data[:opacity]
          ).build
        else
          nil
        end
      end

      def element_shapes
        elements.each_with_index.map do |row, row_num|
          row.each_with_index.map do |col, col_num|
            build_element(row_num, col_num, col)
          end
        end.flatten.compact
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grid_generator-0.4.0 lib/grid_generator/curvy_copter/top_grid.rb