Создать объект Error для Stripe::Error (Ruby on rails)

Я могу создавать стандартные ошибки, как показано ниже...

StandardError.new("No such customer: invalid-id")

Однако я хотел бы знать, как создавать определенные ошибки, в частности ошибки Stripe...

https://stripe.com/docs/api/errors/handling https://github.com/stripe/stripe-ruby/blob/382ae0b45d848304f7c1739696f33458c86bee4f/lib/stripe/errors.rb#L99

Stripe::RateLimitError
Stripe::InvalidRequestError
Stripe::AuthenticationError
Stripe::InvalidRequestError
Stripe::StripeError

Каков наилучший способ создать эти ошибки? Который я использую для перехода к моей фиктивной библиотеке API. Я нашел это...

https://github.com/stripe/stripe-ruby/blob/master/test/stripe/errors_test.rb

Я пробовал... Stripe::InvalidRequestError.new('this is a test') , но получаю ArgumentError (неправильное количество аргументов (указано 1, ожидается 2)).

Каков обязательный второй аргумент?


person user2012677    schedule 16.07.2019    source источник


Ответы (1)


Последние определения методов Stripe Errors можно найти здесь: https://github.com/stripe/stripe-ruby/blob/ec91de6849f34d8d6701a6e91a1b2ee0d50c21ea/lib/stripe/errors.rb

Вот определение метода для Stripe::InvalidRequestError

class InvalidRequestError < StripeError
  attr_accessor :param

  def initialize(message, param, http_status: nil, http_body: nil,
                 json_body: nil, http_headers: nil, code: nil)
    super(message, http_status: http_status, http_body: http_body,
                   json_body: json_body, http_headers: http_headers,
                   code: code)
    @param = param
  end
end

Итак, отвечая на ваш вопрос, вторым аргументом является аргумент param. Как правило, это, кажется, представляет полосатый ресурс.

Например, если бы я хотел создать InvalidRequestError, пытаясь сделать что-то, связанное с классом Stripe::Plan, я бы использовал следующий код:

Stripe::InvalidRequestError.new('No such plan: test_plan', 'plan')

Надеюсь, это поможет!

person ethaning    schedule 16.07.2019
comment
Вы можете поднять его, сделав какой-то недопустимый запрос, например. retrieve или delete несуществующий объект. Вы также можете принудительно поднять его, написав raise Stripe::InvalidRequestError.new('No such plan: test_plan', 'plan') - person ethaning; 16.07.2019
comment
Как я могу поднять его вручную? Без неверного запроса? - person user2012677; 16.07.2019
comment
просто немного отредактировал свой пост после того, как вы оставили последний комментарий :) - person ethaning; 16.07.2019