2017-01-27 4 views
0

Я являюсь автором рубинового драгоценного камня sym, который выполняет симметричное шифрование.Есть ли драгоценный камень, который обеспечивает операции чтения/записи/удаления для широкого спектра схем URI, таких как file: //, env: // и т. Д.?

Как часть интерфейса командной строки, мне очень хотелось бы иметь возможность использовать данные для шифрования [de] и записывать результат через сменный набор URI. Мне кажется, что мы уже используем URI таким образом, например file:// существует и поддерживается модулем OpenURI.

Однако, я бы хотел, чтобы это был жемчуг, который не только понимает гораздо более широкий набор URI, но также может читать/писать и, возможно, удалять ресурсы, определенные через URI.

Эта функция может быть настолько чрезвычайно полезно, потому что любая рубин программа, которая считывает и записывает данные могут внезапно заменить 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://[email protected]/path/file').read 

Поскольку я продолжал идти по этому пути, hught из следующих URI кандидатов. Не все из них могут поддерживать запись или удаление ресурса, но все они могут читать данные.

Существующие идентификаторы URI, поддерживаемые OpenURI:

http[s]://[email protected]/path/file  
file://filename     
ftp[s]://[email protected]/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://[email protected]/path/file   
postgresql://[email protected]/db/?sql=select%20now 

И так далее.

Каковы мысли людей о полезности этого драгоценного камня (давайте просто назовем его SuperURI), который обеспечит реализацию для нетрадиционных протоколов URI?

Полезно? Это ужасная идея? Это по своей сути небезопасно?

Вдумчивые мнения сообщества Ruby очень ценятся.

Спасибо!

+1

Это немного открытое для формата переполнения стека, возможно, это лучше подходит для ['/r/programming'](http://reddit.com/r/programming), [Quora] (http: //quora.com) или даже чат-комнату, специфичную для Ruby. Хотя это интересная идея, я надеюсь, что любые операции записи выполняются только с умышленным намерением со стороны пользователя и никогда не выполняются автоматическим способом, что может привести к уродливым сюрпризам. – tadman

+0

@tadman Спасибо за указатели. Я, безусловно, нахожусь на SO гораздо чаще, чем я нахожусь на Quora или Reddit, поэтому мой первый выбор состоял в том, чтобы опубликовать его здесь. –

+0

Вопрос GitHub + анонс в социальных сетях как «Запрос комментариев» - тоже неплохая идея. Это интересная концепция для библиотеки. Я бы попытался свернуть с названия «URI», что подразумевает синтаксический анализатор и нечто большее, чем «Файловая система», поэтому ясно, что это механизм чтения/записи. – tadman

ответ

1

Простой ответ нет, поэтому начните писать.

У вас, кажется, есть хорошее представление о том, что должен делать камень и как он должен себя вести. Поскольку вы уже создали драгоценный камень, я предполагаю, что у вас есть необходимые навыки, необходимые для создания другого.

Я бы предположил, что есть уже драгоценные камни (и стандартные библиотеки), которые обрабатывают конкретные действия (например, для обработки файлов, например, File). Таким образом, новый жемчуг должен просто анализировать входную строку и передавать результат на соответствующую существующую библиотеку/драгоценный камень.

Я бы также предположил, что вместо 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 показывая, как бы я это сделать. Не стесняйтесь злоупотреблять им по своему усмотрению.

+0

Спасибо за это! Причина, по которой я выбрал 'parse', - это согласованность с модулем URI и его намерениями. Поскольку большинство конкретных реализаций различных подпрограмм URI-подпрограмм «GenericURI», было решено повторно использовать их API. –

Смежные вопросы