Ruby: Как мне найти информативные сообщения об ошибках из моего драгоценного камня, используя caller_locations? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть ruby гем, который предоставляет различные методы DSL. Я хотел бы дать информативные предупреждающие сообщения пользователям моего драгоценного камня, в частности, метод DSL в моем драгоценном камне, который они вызвали, файл и строку их кода и некоторый другой контекст.

Например:

# client_code.rb
foo :bar # foo is my DSL method

выведет предупреждение для stderr с:

[WARN] Unexpected option :bar to DSL method 'foo' at client_code.rb:2

Я мог бы представить, что в моем методе foo я буду работать с caller_locations, но получу чистое решение для этого ускользает от меня, не сравнивая системные пути и прочее.

1 Ответ

0 голосов
/ 11 марта 2020

Хорошо, записывая этот вопрос, я нашел изящное решение этого вопроса: Kernel#warn. У него есть опция uplevel, которая позволяет вам делать то, что я ищу. Так что в моем примере я бы сделал что-то вроде:

def foo(opts)
  warn("Unexpected option :bar to DSL method #{__callee__}", uplevel: 1) if unexpected?(opts)
end

https://ruby-doc.org/core-2.7.0/Kernel.html#method -i-warn

...