сентября 5, 2012 | Published in Ruby Gems, Tips&Tricks
Зачем?
Все мы знаем, что при установке gem’ов часто генерация документации занимает куда больше времени, чем сама установка gem’а, при этом никто не пользуется оффлайновой документацией. Зачем открывать новую вкладку и запускать gem server, если вся документация доступна онлайн? Если вы не пользуетесь оффлайн документацией, то зачем засорять ею жесткий диск и тратить время на ожидание ее генерации при установке gem’ов?
Для отключения генерации документации с командой gem install используют флаги —no-rdoc и —no-ri, например, так:
$ gem install rails —no-rdoc —no-ri
Однако есть вариант получше — использовать файл .gemrc в вашей home/ директории.
Просто добавьте в него следующую строку:
gem: —no-rdoc —no-ri
И вы забудете о генерации документации навсегда!
сентября 3, 2012 | Published in Ruby, Tips&Tricks
Недавно в статье о Переменных и константах в Ruby я упомянул о том, что из строки можно получить константу используя Kernel.const_get, на что получил в комментариях целых два замечания. Первое касалось того, что следует использовать Object.const_get, вместо Kernel.const_get, а второе касалось того, что нужно учитывать неймспейсы, а потому получение констант из строки несколько сложнее реализовать. Та статья была о другом, потому, я решил добавить отдельную статью в Tips & Tricks о том, как правильно получать из строки константу.
Код выполняющий это действие я решил поместить в метод #constantize, метод называется так же, как аналогичный метод в Rails, и создать для него псевдоним #to_const. Собственно вот его код:
class String
def constantize
constants = self.split("::")
main = Object.const_get(constants.shift)
constants.inject(main) { |full, nested| full = full.const_get(nested) }
end
alias :to_const :constantize
end
Пример работы:
module SuperExtensions
module MySuperExtension
class Extension
def self.hello
puts "Hello!"
end
end
end
end
klass = "SuperExtensions::MySuperExtension::Extension".to_const
klass #=> SuperExtensions::MySuperExtension::Extension
klass.hello # Hello!
Вот и все! Удачи!
июля 21, 2012 | Published in Ruby, Tips&Tricks, Расширения
Говорят, что расширение классов ядра (monkey-patching) — это зло. Тут еще некоторые ведут споры касательно того, что считать monkey-patching’ом — добавление новых методов или переопределение старых, но мы обойдем этот спор стороной и сконцентрируемся на том, как это делать безболезненно.
Read the rest of this entry »
июля 21, 2012 | Published in Ruby, Tips&Tricks
Вам наверное знаком такой код:
a ||= []
a << elem
Так вот, вместо нее можно использовать:
a = [1,2,3,4,5]
b = nil
a = Array.new([*a, 6])
b = Array.new([*b, 1])
a # => [1, 2, 3, 4, 5, 6]
b # => [1]
UPD Предложение от Михаила Дитерле в комментариях:
a = [*a, 6]
b = [*b, 1]
июля 21, 2012 | Published in Ruby, Ruby Gems, Tips&Tricks, Расширения
Часто необходимо пользователям gem’ов позволить настраивать их на свой вкус. Как это сделать — об этом эта маленькая статья.
Добавление возможности конфигурирования делается очень просто, наиболее часто для этого используется специальный класс, но если конфигурация совсем простая, то можно обойтись Struct или хэшем. В примере ниже приведена реализация на основе класса Config, однако ее легко можно модифицировать так, чтобы использовался Struct или хэш. Очевидно, что вариант с классом конфигурации наиболее гибкий, а вариант с хэшем наиболее простой.
Read the rest of this entry »