Class: Sangi::AdditionEngine

Inherits:
Object
  • Object
show all
Defined in:
lib/sangi/engines/addition_engine.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ AdditionEngine

Returns a new instance of AdditionEngine.



3
4
5
# File 'lib/sangi/engines/addition_engine.rb', line 3

def initialize(config)
  @config = config
end

Instance Method Details

#build(abs_a:, abs_b:, result_sign:, display_a:, display_b:, expression:) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/sangi/engines/addition_engine.rb', line 7

def build(abs_a:, abs_b:, result_sign:, display_a:, display_b:, expression:)
  @rod_factory = RodFactory.new
  @result_value = result_sign * (abs_a + abs_b)
  place_count = [
    digit_count(abs_a),
    digit_count(abs_b),
    digit_count(@result_value.abs),
    1
  ].max
  @board = Board.from_numbers(
    a: display_a,
    b: display_b,
    work: 0,
    place_count: place_count,
    rod_factory: @rod_factory
  )
  @board.row(:work).sign = result_sign
  @builder = StepBuilder.new(
    config: @config,
    expression: expression,
    board: @board,
    result_value: @result_value,
    rod_factory: @rod_factory
  )

  push_setup_step
  max_operand_places(abs_a, abs_b).times do |place|
    add_digit_to_work(source: :a, place: place, digit: digit_of(abs_a, place))
    add_digit_to_work(source: :b, place: place, digit: digit_of(abs_b, place))
  end
  normalize_all_places
  push_finish_step
  @builder.steps
end