是否有一个gem为广泛的URI方案提供读/写/删除操作,例如file://,env://等?

时间:2017-01-27 04:51:10

标签: ruby-on-rails ruby rubygems uri open-uri

我是执行对称加密的ruby gem sym的作者。

作为命令行界面的一部分,我非常希望能够将数据用于[de]加密,并通过可插入的URI集将结果写出来。在我看来,我们已经以这种方式使用URI,例如file://存在并且OpenURI模块支持。

但是,我想要的是一个gem,它不仅可以理解更广泛的URI集,还可以读/写并可能删除通过URI定义的资源。

此功能可能非常有用,因为任何读取和写入数据的ruby程序都可以突然替换File.read,完全是通用的:

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

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

contents = SuperURI.parse('scp://user@host/path/file').read

当我继续这条道路时,我想到了以下候选URI。 并非所有人都支持写入或删除资源,但所有这些都可以读取数据。

OpenURI支持的现有URI:

http[s]://user@host/path/file    
file://filename                  
ftp[s]://user@host/path/file
ldap://ldap.example.com/dc=example?

建议访问本地和远程数据的可能方法:

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://user@host/path/file        
postgresql://user@host/db/?sql=select%20now

等等。

人们对这个gem的有用性的看法是什么(我们现在只称它为SuperURI),这将提供非传统URI协议的实现?

有用吗?这是一个可怕的想法吗?这本身就不安全吗?

非常感谢来自Ruby社区的深思熟虑的意见。

谢谢!

1 个答案:

答案 0 :(得分:1)

简单的答案是否定的,所以开始写作。

您似乎很清楚宝石应该做什么以及它应该如何表现。由于您已经创建了一个gem,我认为您拥有创建另一个所需的必要技能。

我建议已经有gems(和标准库)处理特定的操作(例如File用于文件处理)。所以新的gem应该只解析输入字符串并将结果传递给相关的现有库/ gem。

我还建议您使用parse('string').read而不是read('string')。尝试支持CRUD操作可能会很好;这样:

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

我刚刚把some code放在一起,展示了我是怎么做到的。随意滥用它。