2017-01-27 3 views
0

Je suis l'auteur d'une gemme ruby ​​sym qui effectue un cryptage symétrique. En tant qu'élément de l'interface de ligne de commande, j'aimerais beaucoup pouvoir consommer les données à [de] crypter et écrire le résultat via un ensemble d'URI enfichable. Il me semble que nous utilisons déjà des URI de cette façon, par exemple file:// existe et est supporté par le module OpenURI. Cependant, ce que je voudrais, c'est une gemme qui non seulement comprenne un ensemble beaucoup plus large d'URI mais qui peut aussi lire/écrire et éventuellement supprimer des ressources définies via des URI.Existe-t-il une gemme qui fournit des actions de lecture/écriture/suppression pour une large gamme de schémas d'URI, tels que file: //, env: //, etc?

Cette fonctionnalité pourrait être si extrêmement utile parce que tout programme de Ruby qui lit et écrit les données peuvent soudainement remplacer File.read avec quelque chose de complètement générique:

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

ou

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

ou

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

Comme j'ai continué sur cette voie, j'ai des adresses URI candidates suivantes. Tous ne peuvent pas prendre en charge l'écriture ou la suppression de la ressource, mais tous peuvent lire les données.

URIs existants pris en charge par openURI:

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

suggérées les possibilités d'accès à des données locales et à distance:

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 

Et ainsi de suite.

Quelles sont les pensées des gens sur l'utilité de cette gemme (appelons-le SuperURI pour l'instant) qui fournirait des implémentations pour les protocoles URI non conventionnels?

Est-ce utile? Est-ce une idée horrible? Est-il intrinsèquement non sécurisé?

Les avis réfléchis de la communauté Ruby sont très appréciés.

Merci!

+1

Ceci est un peu ouvert pour le format Stack Overflow, c'est probablement un meilleur ajustement avec ['/r/programming'](http://reddit.com/r/programming), [Quora] (http: //quora.com) ou même une salle de discussion spécifique à Ruby. Bien que ce soit une idée intéressante, j'espère que toutes les opérations d'écriture sont entreprises uniquement avec une intention délibérée de la part de l'utilisateur et ne sont jamais faites d'une manière automagique qui pourrait conduire à de mauvaises surprises. – tadman

+0

@tadman Merci pour les pointeurs. Je me retrouve certainement beaucoup plus souvent que Quora ou Reddit - d'où mon premier choix était de le poster ici. –

+0

GitHub issue + annonce sur les médias sociaux comme une «demande de commentaires" n'est pas une mauvaise idée non plus. C'est un concept intéressant pour une bibliothèque. Je voudrais essayer de pivoter du nom "URI" qui implique un analyseur et vers quelque chose de plus "système de fichiers" orienté donc il est clair qu'il s'agit d'un mécanisme de lecture/écriture. – tadman

Répondre

1

La réponse simple est non, alors commencez à écrire.

Vous semblez avoir une bonne idée de ce que la gemme devrait faire et comment elle devrait se comporter. Comme vous avez déjà créé une gemme, je présume que vous avez les compétences nécessaires pour en créer une autre.

Je suggérerais qu'il existe déjà des gemmes (et des bibliothèques standard) qui gèrent des actions particulières (File pour le traitement de fichiers par exemple). Ainsi, la nouvelle gem devrait simplement analyser la chaîne d'entrée et transmettre le résultat à la bibliothèque/gemme existante pertinente. Je suggère également que plutôt que d'avoir parse('string').read vous utilisez simplement read('string').Il est peut-être bon d'essayer de soutenir les actions du CRUD; si:

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

Je viens ensemble some code montrant jeté comment je le ferais. N'hésitez pas à en abuser à volonté.

+0

Merci pour cela! La raison pour laquelle j'ai choisi 'parse' est la cohérence avec le module' URI' et ses intentions. Comme la plupart des implémentations concrètes de divers schémas d'URI sous-classe 'GenericURI', il était légitime de réutiliser leur API. –