我正在开发一个模块,除其他外,它将向您将其混入的类添加一些通用的“查找器”类型功能。问题:出于方便和美观的原因,我想在类之外包含一些功能,与类本身在同一范围内。
例如:
class User
include MyMagicMixin
end
# Should automagically enable:
User.name('Bob') # Returns first user named Bob
Users.name('Bob') # Returns ALL users named Bob
User(5) # Returns the user with an ID of 5
Users # Returns all users
我可以在这些方法中完成功能,没问题。案例 1 ( User.name('Bob')
) 很简单。然而,案例 2-4 需要能够在User
. 该Module.included
方法使我可以访问该类,但不能访问其包含范围。我在 Class 或 Module 上看不到简单的“父”类型方法。(对于命名空间,我的意思是,不是超类也不是嵌套模块。)
我能想到的最好方法是对类进行一些字符串解析#name
以打破其命名空间,然后将字符串转换回常量。但这似乎很笨拙,鉴于这是 Ruby,我觉得应该有一种更优雅的方式。
有人有想法吗?或者我只是为了自己的利益太聪明了?