Class: Sangi::AdditionEngine
- Inherits:
-
Object
- Object
- Sangi::AdditionEngine
- Defined in:
- lib/sangi/engines/addition_engine.rb
Instance Method Summary collapse
- #build(abs_a:, abs_b:, result_sign:, display_a:, display_b:, expression:) ⇒ Object
-
#initialize(config) ⇒ AdditionEngine
constructor
A new instance of AdditionEngine.
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 |