сентября 8, 2012 | Published in Ruby, Расширения, Уголок философа
Честно сказать, достали меня уже вопросом о том, что такое self. Особено странно, что некоторые люди начинают работать с Ruby on Rails не разобравшись с самим языком Ruby. Ну как так можно? А?! Если лень читать книгу на 600 страниц — есть статьи на RubyDev, они не полностью корректные так как я писал их достаточно давно, но в общем достаточно годные, как мне кажется. Если нет желания прочитать краткие статьи, которые я пытался написать более чем понятным новичку языком, то, я думаю, что программирование — это не ваше. Ну да ладно. Напишу отдельную статью о self, хотя то, что такое self много где упоминалось в статьях на RubyDev.
self — это ссылка на текущий объект.
У каждого метода должен быть приемник — на то он и метод, а не функция, а если приемник не указан, то подразумевается, что приемником является self.
Read the rest of this entry »
июля 21, 2012 | Published in Ruby, Tips&Tricks, Расширения
Говорят, что расширение классов ядра (monkey-patching) — это зло. Тут еще некоторые ведут споры касательно того, что считать monkey-patching’ом — добавление новых методов или переопределение старых, но мы обойдем этот спор стороной и сконцентрируемся на том, как это делать безболезненно.
Read the rest of this entry »
июля 21, 2012 | Published in Ruby, Ruby Gems, Tips&Tricks, Расширения
Часто необходимо пользователям gem’ов позволить настраивать их на свой вкус. Как это сделать — об этом эта маленькая статья.
Добавление возможности конфигурирования делается очень просто, наиболее часто для этого используется специальный класс, но если конфигурация совсем простая, то можно обойтись Struct или хэшем. В примере ниже приведена реализация на основе класса Config, однако ее легко можно модифицировать так, чтобы использовался Struct или хэш. Очевидно, что вариант с классом конфигурации наиболее гибкий, а вариант с хэшем наиболее простой.
Read the rest of this entry »
июля 4, 2012 | Published in Ruby, Ruby Gems, Расширения
So, how to solve the «Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.» problem?
You can solve this problem by adding ‘—with-ruby-include‘ option to ‘gem install‘ command. Firstly, check your current Ruby interpreter version with this:
$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
Or this:
$ rvm current
ruby-1.9.3-p194@r326
Secondly, you should install ruby gem that you want to be installed with this:
$ gem install <ruby gem name> — —with-ruby-include=$rvm_path/src/<ruby version>
For me Ruby version is ruby-1.9.3-p194. Real example:
$ gem install ruby-debug19 — —with-ruby-include=$rvm_path/src/ruby-1.9.3-p194/
Thats all! Happy developing with Ruby, friends!
февраля 8, 2011 | Published in Ruby, Расширения, Си и C++
Это вторая статья — перевод из двух оригинальных статей авторства , которые Василий любезно решил пожертвовать в архив RubyDev.
Пишем расширение на Си для Ruby, ч. 1
Пишем расширение на Си для Ruby, ч. 2
Во второй части мы изменим наш extconf.rb для того, что бы он мог найти необходимые файлы в libstree. Затем создадим класс на Ruby, который будет оберткой над структурой реализованной на Си.
Готовое расширение можно скачать на .
Использование mkmf для поиска библиотек
Как говорилось в предыдущей части, extconf.rb используется для поиска библиотек, заголовочных файлов и проверки сведений о целевой системе перед установкой. Сейчас мы научим extconf.rb находить библиотеку libstree вместе с ее заголовочными файлами. Также мы дадим пользователям возможность указывать gem’у, где находится libstree.
Настройка mkmf с помощью dir_config
Первое, что нам следует сделать, это указать mkmf, где следует изначально искать libstree. Для этого мы будем использовать метод dir_config, который принимает 3 аргумента:
* произвольная строка (обычно это имя библиотеки, в нашем случае «stree»)
* список путей, по которым надо искать заголовочные файлы
* список путей, по которым надо искать файлы библиотеки
Read the rest of this entry »
февраля 5, 2011 | Published in Ruby, Основы, Расширения, Си и C++
Пишем расширение на Си для Ruby, ч. 1
Пишем расширение на Си для Ruby, ч. 2
Вчера на почтовый ящик мне пришло письмо от читателя блога RubyDev , к которому был приложен перевод понравившейся ему статьи авторства небезызвестного в Ruby сообществе (известного также под псевдонимом tenderlove). Большое спасибо Василию за приложенные усилия и за помощь!
А теперь собственно статья:
Мне нравится писать расширения для Ruby на C. В этом цикле статей мы разберемся, как это делать. Я раскрою такие темы, как создание рабочего окружения для написания расширения, TDD, отладку, взаимодействие со сборщиком мусора, кросс-компиляцию для windows и т.д.
К концу серии постов мы должны написать расширение, которое будет оберткой для libstree. libstree - это реализация суффиксного дерева на C.
В этой части мы подготовим все, что нам нужно для разработки, изучим шаблон обычного расширения на C и реализуем наш первый метод на C. Естественно, все это мы будем делать используя TDD и autotest.
Read the rest of this entry »