Ich arbeite an einem Modul, das unter anderem der Klasse, in die man es einbindet, eine allgemeine "Finder"-Funktionalität hinzufügen wird. Das Problem: Aus Gründen der Bequemlichkeit und der Ästhetik möchte ich einige Funktionen hinzufügen außerhalb der Klasse, im gleichen Geltungsbereich wie die Klasse selbst.
Zum Beispiel:
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
Ich kann die Funktionen ausführen innerhalb diese Methoden, kein Problem. Und Fall 1 ( User.name('Bob')
) ist einfach. Die Fälle 2-4 erfordern jedoch die Möglichkeit, neue Klassen und Methoden außerhalb der User
. Die Module.included
Methode ermöglicht mir den Zugriff auf die Klasse, aber nicht auf den sie enthaltenden Bereich. Es gibt keine einfache Methode vom Typ "parent", die ich bei Class oder Module sehen kann. (Für Namespace, ich meine, nicht Superklasse noch verschachtelte Module).
Der beste Weg, den ich mir vorstellen kann, um dies zu tun ist mit einigen String-Parsing auf die Klasse der #name
um den Namespace zu verlassen und die Zeichenkette wieder in eine Konstante zu verwandeln. Aber das scheint ungeschickt, und da dies Ruby ist, habe ich das Gefühl, dass es einen eleganteren Weg geben sollte.
Hat jemand eine Idee? Oder bin ich einfach zu schlau für mein eigenes Wohl?