Class: GridGenerator::Skewb::SkewbGrid

Inherits:
Object
  • Object
show all
Defined in:
lib/grid_generator/skewb/skewb_grid.rb

Direct Known Subclasses

LeftGrid, RightGrid, TopGrid

Constant Summary collapse

COLOURS =
{
  fill: "#d0d0d0",
  stroke: "#404040"
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(x:, y:, units:, elements:) ⇒ SkewbGrid

Returns a new instance of SkewbGrid.



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 11

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, "squares must be array or string"
  end
end

Instance Attribute Details

#elementsObject (readonly)

Returns the value of attribute elements.



24
25
26
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 24

def elements
  @elements
end

#unitsObject (readonly)

Returns the value of attribute units.



24
25
26
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 24

def units
  @units
end

#xObject (readonly)

Returns the value of attribute x.



24
25
26
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 24

def x
  @x
end

#yObject (readonly)

Returns the value of attribute y.



24
25
26
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 24

def y
  @y
end

Instance Method Details

#base_shapeObject



59
60
61
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 59

def base_shape
  GridGenerator::Svg::Polygon.new(points: points, style: base_shape_style)
end

#base_shape_styleObject



55
56
57
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 55

def base_shape_style
  GridGenerator::Svg::Style.new(fill: COLOURS[:fill], stroke: COLOURS[:stroke])
end

#build_element(row_num, col_num, data) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 30

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

#element_shapesObject



47
48
49
50
51
52
53
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 47

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

#side_sizeObject



26
27
28
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 26

def side_size 
  elements.size - 1
end

#to_svgObject



63
64
65
66
67
68
69
70
71
# File 'lib/grid_generator/skewb/skewb_grid.rb', line 63

def to_svg
  output = base_shape.to_svg

  rows.each { |row| output += row.to_svg }
  columns.each { |col| output += col.to_svg }
  element_shapes.each { |element| output += element.to_svg if element } 

  output
end