первые указывают сколько раз будет вызван метод : once, exactly, at_least, at_most, и any_number_of_times и это только для моков!!!

вторые что передаем и что ожидаем with, and_return

плохой пример так как методы калькулятора нет смысла макать, и проверка вызова метода раз или 2 показана плоха:(

require 'rspec'
require_relative '../lib/calculator'

RSpec.describe Calculator do
  let(:calculator) { Calculator.new }

  describe '#add' do
    it 'adds two numbers' do
      expect(calculator.add(2, 3)).to eq(5)
    end
    it 'add runs once' do
      allow(calculator).to receive(:add).with(2, 3).and_return(5)
      # настраивает мок-объект calculator так, чтобы метод add возвращал значение 5 при вызове с аргументами 2 и 3
      expect(calculator).to receive(:add).once
      # настраивает ожидание, что метод add будет вызван ровно один раз.
      calculator.add(2, 3)
      # вызываем метод add
    end
    it 'add runs two' do
      allow(calculator).to receive(:add).with(2, 3).and_return(5)
      #  настраивает мок-объект calculator так, чтобы метод add возвращал значение 5 при вызове с аргументами 2 и 3
      expect(calculator).to receive(:add).exactly(2).times
      # настраивает ожидание, что метод add будет вызван 2 раза
      calculator.add(2, 3)
      calculator.add(2, 3)
      # вызываем метод add 2 раза
    end

  end
end

остальные примеры сделаем на анализе ключевой ставки https://www.cbr.ru/hd_base/KeyRate/

код