创建新库时,应该在哪里放置自定义错误类?

问题描述

我正在创建我的第一个gem,并且正在努力寻找一个放置自定义错误类的地方。这就是我目前的宝石结构:

MyGem
|-lib
 /secrets
  - manager.rb
 secrets.rb

我在根文件secrets.rb添加自定义错误类。例如:

module Secrets
  VERSION = "0.1.0"

  class DateError < StandardError; end
end

因为我是Ruby的新手,这是我第一次创建Gem,所以不确定是否有放置这些宝石的正确位置。

解决方法

两种常见方法

对此确实没有硬性规定。但是,两个最明智的选择是:

  1. 您的gem的主库文件(例如lib/secrets)。该文件会由gem自动加载,这似乎是放置适用于整个gem的单行代码和样板的合理位置。
  2. 在gem的主库文件中所需的类文件中(例如lib/secrets/date_error.rb)。那是大多数必需的东西应该存在的地方,一致的命名约定使长期维护变得更容易。

Ruby非常灵活,没有什么可以阻止您将代码放置在源代码树中的任何位置。核心约束实际上是命名间隔(例如,您是否希望异常是Secrets::DateError或其他东西?)和代码维护,因此将类放入不相关的文件中,如lib/secrets/versions.rblib/secrets/deeply/nested/path/date_error.rb)似乎不理想。