module Dieses::Application::Mixins::Lines::InstanceMethods

Public Instance Methods

lines(unit: Undefined, multiple: Undefined) click to toggle source
# File lib/dieses/application/mixins/lines.rb, line 26
def lines(unit: Undefined, multiple: Undefined)
  step_lines(param)

  unit     = Undefined.default(unit, param.unit)
  multiple = Undefined.default(multiple, param.multiple || param.hlines&.map(&:step)&.sum)

  draw_hlines unit: unit, multiple: multiple
  draw_vlines unit: unit, multiple: multiple
  draw_clines unit: unit, multiple: multiple
end

Private Instance Methods

draw_clines(unit:, multiple:) click to toggle source
# File lib/dieses/application/mixins/lines.rb, line 80
def draw_clines(unit:, multiple:) # rubocop:disable Metrics/MethodLength
  return unless param.clines

  param = self.param

  draw unit: unit, multiple: multiple do
    repeat do
      param.clines.each do |slant|
        repeat do
          cline(*slant.tags, angle: slant.angle, style: slant.style)
          cross
        end
      end
    end
  end
end
draw_hlines(unit:, multiple:) click to toggle source
# File lib/dieses/application/mixins/lines.rb, line 50
def draw_hlines(unit:, multiple:)
  return unless param.hlines

  param = self.param

  draw unit: unit, multiple: multiple do
    repeat do
      param.hlines.each do |line|
        hline(*line.tags, style: line.style)
        down line.step
      end
    end
  end
end
draw_vlines(unit:, multiple:) click to toggle source
# File lib/dieses/application/mixins/lines.rb, line 65
def draw_vlines(unit:, multiple:)
  return unless param.vlines

  param = self.param

  draw unit: unit, multiple: multiple do
    repeat do
      param.vlines.each do |line|
        vline(*line.tags, style: line.style)
        right line.step
      end
    end
  end
end
step_lines(param) click to toggle source
# File lib/dieses/application/mixins/lines.rb, line 39
def step_lines(param)
  [*param.hlines, *param.vlines].compact.each do |line|
    line.step = case line.after
                when Proc                then param.instance_exec(&line.after)
                when Numeric             then line.after
                when Undefined, NilClass then 1
                else                          raise ArgumentError, "Wrong type for after: #{line.after.class}"
                end
  end
end