Расширения

Self в Ruby

сентября 8, 2012  |  Published in Ruby, Расширения, Уголок философа

Честно сказать, достали меня уже вопросом о том, что такое self. Особено странно, что некоторые люди начинают работать с Ruby on Rails не разобравшись с самим языком Ruby. Ну как так можно? А?! Если лень читать книгу на 600 страниц — есть статьи на RubyDev, они не полностью корректные так как я писал их достаточно давно, но в общем достаточно годные, как мне кажется. Если нет желания прочитать краткие статьи, которые я пытался написать более чем понятным новичку языком, то, я думаю, что программирование — это не ваше. Ну да ладно. Напишу отдельную статью о self, хотя то, что такое self много где упоминалось в статьях на RubyDev.

self — это ссылка на текущий объект.

У каждого метода должен быть приемник — на то он и метод, а не функция, а если приемник не указан, то подразумевается, что приемником является self.

Read the rest of this entry »

Tags: , , ,

Tips&Tricks — Безболезненное расширение классов ядра

июля 21, 2012  |  Published in Ruby, Tips&Tricks, Расширения

Говорят, что расширение классов ядра (monkey-patching) — это зло. Тут еще некоторые ведут споры касательно того, что считать monkey-patching’ом — добавление новых методов или переопределение старых, но мы обойдем этот спор стороной и сконцентрируемся на том, как это делать безболезненно.
Read the rest of this entry »

Tags: , , , ,

Tips&Tricks: Пользовательская конфигурация вашего кода (gem’а)

июля 21, 2012  |  Published in Ruby, Ruby Gems, Tips&Tricks, Расширения

Часто необходимо пользователям gem’ов позволить настраивать их на свой вкус. Как это сделать — об этом эта маленькая статья.

Добавление возможности конфигурирования делается очень просто, наиболее часто для этого используется специальный класс, но если конфигурация совсем простая, то можно обойтись Struct или хэшем. В примере ниже приведена реализация на основе класса Config, однако ее легко можно модифицировать так, чтобы использовался Struct или хэш. Очевидно, что вариант с классом конфигурации наиболее гибкий, а вариант с хэшем наиболее простой.

Read the rest of this entry »

Tags: , , ,

How to solve the «Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.» problem?

июля 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!

Tags: , ,

Пишем расширение на Си для Ruby, ч. 2

февраля 8, 2011  |  Published in Ruby, Расширения, Си и C++

ruby

Это вторая статья — перевод из двух оригинальных статей авторства , которые Василий любезно решил пожертвовать в архив 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 »

Tags: , ,

Пишем расширение на Си для Ruby, ч. 1

февраля 5, 2011  |  Published in Ruby, Основы, Расширения, Си и C++

rubyПишем расширение на Си для Ruby, ч. 1
Пишем расширение на Си для Ruby, ч. 2

Вчера на почтовый ящик мне пришло письмо от читателя блога RubyDev , к которому был приложен перевод понравившейся ему статьи авторства небезызвестного в Ruby сообществе (известного также под псевдонимом tenderlove). Большое спасибо Василию за приложенные усилия и за помощь!

А теперь собственно статья:

Мне нравится писать расширения для Ruby на C. В этом цикле статей мы разберемся, как это делать. Я раскрою такие темы, как создание рабочего окружения для написания расширения, TDD, отладку, взаимодействие со сборщиком мусора, кросс-компиляцию для windows и т.д.

К концу серии постов мы должны написать расширение, которое будет оберткой для libstree. libstree - это реализация суффиксного дерева на C.

В этой части мы подготовим все, что нам нужно для разработки, изучим шаблон обычного расширения на C и реализуем наш первый метод на C. Естественно, все это мы будем делать используя TDD и autotest.
Read the rest of this entry »

Tags: , , ,