Ищете способ легко реализовать File / IO-подобный класс в Ruby - PullRequest
3 голосов
/ 13 февраля 2012

Я бы хотел реализовать файловый класс в Ruby (1.9), но не хочу повторно реализовывать или декорировать каждый отдельный метод, предлагаемый классами StringIO и IO.Есть ли модуль, который я могу включить, чтобы помочь мне с этим?Я хотел бы предложить метод read() и получить метод readLines() (который затем использует read()) бесплатно.

Это было бы похоже на то, как модуль Comparable добавляет операторы <, <=, ==, >= и >, пока реализовано <=>.Я ищу что-то подобное для файлов.

Если я правильно помню, Java и / или Apache Commons работают следующим образом: в основном есть только один или два метода, а все остальные используют их для чтения / записи.

Я реализую оболочку для записываемых объектов File и StringIO, которая прозрачно обновляет дайджест SHA256 при каждой записи.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Поскольку вы уже говорите, что реализуете "классы-оболочки", я бы рекомендовал использовать Pattern Decorator .

Ruby предоставляет вам несколько способов его реализации, он прост и позволяет вам именно то, что вы хотите: если, например, реализовать шаблон с использованием method_missing, вы бы реализовали только те методы записи, которые необходимы для вычисления дайджеста. В реализации делегируйте запись в оформленный объект, а также обновите экземпляр SHA256 Digest с записанной строкой.

2 голосов
/ 14 февраля 2012

Если вы не хотите наследовать от IO, то вы, вероятно, захотите использовать методы в ядре, в частности open , gets и его реализации readline или readlines.

Вы отбрасываете много предварительно написанного кода, который был отлажен.Лично я бы подкласс IO и псевдоним процедур типа «чтение» и «запись» к некоторому безопасному имени, затем создать новые версии, которые делают запись, вызвав оригинал, а затем обновить SHA256.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...