2017-01-27 3 views
0

Ich bin der Autor eines Rubin Juwel sym, die symmetrische Verschlüsselung durchführt.Gibt es ein Schmuckstück, das Lese-/Schreib-/Löschaktionen für eine Vielzahl von URI-Schemas bietet, z. B. file: //, env: // usw.?

Als Teil der Befehlszeilenschnittstelle würde ich sehr gerne in der Lage sein, die zu verschlüsselnden Daten zu verwenden und das Ergebnis über einen steckbaren Satz von URIs zu schreiben. Es scheint mir, dass wir bereits URIs auf diese Weise verwenden, zum Beispiel file:// existiert und von OpenURI Modul unterstützt wird.

Was ich jedoch möchte, ist ein Juwel, das nicht nur viel mehr URIs versteht, sondern auch Ressourcen, die über URIs definiert sind, lesen/schreiben und möglicherweise löschen kann.

könnte diese Funktionalität so enorm nützlich sein, weil jede Ruby-Programm, das Daten liest und schreibt plötzlich File.read mit etwas ganz generic ersetzen:

var_value = SuperURI.parse('env://BASH_VARIABLE_NAME')`.read 

oder

redis_op = SuperURI.write('redis://localhost:6379/1/OP,Arg1,Arg2') 

oder

contents = SuperURI.parse('scp://[email protected]/path/file').read 

Als ich auf diesem Weg weiter ging, habe ich tho der folgenden Kandidaten-URIs. Nicht alle können das Schreiben oder Löschen der Ressource unterstützen, aber alle können die Daten lesen.

Bestehende URIs von openURI unterstützt:

http[s]://[email protected]/path/file  
file://filename     
ftp[s]://[email protected]/path/file 
ldap://ldap.example.com/dc=example? 

Empfohlene Möglichkeiten für den Zugriff auf lokale und Remote-Daten:

string://value     
env://variable 
std[in|out]://       
shell://command     
keychain://item_name     
redis://127.0.0.1:6397/1/OP,arg1,arg2,... 
memcached://127.0.0.1:11211/OP,arg1,arg2 
scp://[email protected]/path/file   
postgresql://[email protected]/db/?sql=select%20now 

Und so weiter.

Was denken die Leute über die Nützlichkeit dieses Edelsteins (nennen wir es einfach SuperURI), der Implementierungen für die unkonventionellen URI-Protokolle bereitstellen würde?

Ist es nützlich? Ist es eine schreckliche Idee? Ist es von Natur aus unsicher?

Nachdenklich Meinungen aus der Ruby-Community werden sehr geschätzt.

Danke!

+1

Dies ist ein wenig offen für das Stack Overflow-Format, es ist wahrscheinlich besser mit ['/r/programming'](http://reddit.com/r/programming), [Quora] (http: //quora.com) oder sogar ein Ruby-spezifischer Chatroom. Obwohl das eine interessante Idee ist, würde ich hoffen, dass jegliche Schreiboperationen nur mit bewusster Absicht seitens des Benutzers ausgeführt werden und niemals in einer automatischen Weise erfolgen, die zu hässlichen Überraschungen führen könnte. – tadman

+0

@tadman Danke für die Hinweise. Ich finde mich auf SO viel häufiger als auf Quora oder Reddit - daher war meine erste Wahl, es hier zu posten. –

+0

GitHub Ausgabe + Ankündigung auf Social Media als "Request for Comments" ist auch keine schlechte Idee. Es ist ein interessantes Konzept für eine Bibliothek. Ich würde versuchen, von dem "URI" -Namen zu pivotieren, was einen Parser impliziert und hin zu etwas mehr "Dateisystem" orientiert, so dass es klar ist, dass dies ein Lese-/Schreibmechanismus ist. – tadman

Antwort

1

Die einfache Antwort ist nein, also fang an zu schreiben.

Sie scheinen eine gute Vorstellung davon zu haben, was der Edelstein tun soll und wie er sich verhalten soll. Da Sie bereits ein Juwel geschaffen haben, nehme ich an, dass Sie die notwendigen Fähigkeiten besitzen, um ein neues zu schaffen.

Ich würde vorschlagen, dass es bereits Edelsteine ​​(und Standardbibliotheken) gibt, die bestimmte Aktionen behandeln (File für die Dateiverarbeitung zum Beispiel). Das neue Juwel sollte also die Eingabe-Zeichenkette analysieren und das Ergebnis an die entsprechende vorhandene Bibliothek/den Edelstein übergeben.

Ich würde auch vorschlagen, dass statt parse('string').read Sie einfach read('string') verwenden.Es ist vielleicht gut zu versuchen, die CRUD-Aktionen zu unterstützen; so:

  • SuperURI.create('file://filename', data)
  • SuperURI.read('file://filename')
  • SuperURI.update('file://filename', data)
  • SuperURI.delete('file://filename')

Ich habe gerade zusammen some code zeigt geworfen, wie ich es tun würde. Fühlen Sie sich frei, es nach Belieben zu missbrauchen.

+0

Danke dafür! Der Grund, warum ich 'Parse 'gewählt habe, ist die Konsistenz mit dem' URI'-Modul und seinen Absichten. Da die meisten konkreten Implementierungen verschiedener URI-Schemata die Unterklasse 'GenericURI' ableiten, fühlte es sich richtig an, ihre API wiederzuverwenden. –

Verwandte Themen