Tips&Tricks: Установка gem’ов без генерации документации

сентября 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

И вы забудете о генерации документации навсегда!

Tags: , , ,

Tips&Tricks: Превращение строки в константу

сентября 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!

Вот и все! Удачи!

Tags: , , ,

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

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

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

Tags: , , , ,

Tips&Tricks — Проверка объявления переменной — массива и вставка нового элемента

июля 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]
Tags: , ,

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

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

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

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

Read the rest of this entry »

Tags: , , ,