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

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

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

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

module MyGem
  @config = Config.new

  def self.config
    if block_given?
      # если блок передан, то вызываем его и передаем в него объект конфигурации
      yield @config
    else
      # если блок не передан - просто возвращаем объект конфигурации
      return @config
    end
  end

  # Модуль MyGem::Password - пример использования конфига
  module Password
    def self.encrypt
      puts "Encrypted with #{MyGem.config.algorithm}."
    end
  end

  def self.show_config
    @config.show_config
  end

  # класс конфигурации
  class Config
    attr_accessor :salt_size, :pepper, :algorithm

    def initialize
      # значения параметров конфигурации по умолчанию
      @salt_size = 32
      @pepper = "&5:L4g$f7T@m<79IgA"
      @algorithm = :bcrypt
    end

    def show_config
      puts <<-CONFIG
        Salt size: #{salt_size}
        Pepper: #{pepper}
        Algorithm: #{algorithm}
      CONFIG
    end
  end
end

Пример использования:

# пользовательская настройка
MyGem.config do |config|
  config.salt_size = 64
  config.algorithm = "md5"
end

# демонстрация настроек:
MyGem.show_config
# Salt size: 64
# Pepper: &5:L4g$f7T@m<79IgA
# Algorithm: md5

# в действии:
MyGem::Password.encrypt
# Encrypted with md5.

Как видите все очень просто!

Tags: , , ,

Responses

  1. says:

    сентября 13, 2012 at 12:33 (#)

    А можно поподробнее :(
    Сделал файл app/controllers/countmin/count_min.rb куда закинул код из первого блока.
    сделал файл config/initializers/count_min.rb — сюда вот это:
    MyGem.config do |config|
    config.salt_size = 64
    config.algorithm = «md5″
    end

    Во вью делаю: MyGem.show_config (в контроллере тож делал). выдается ошибка, что данный модуль не знает такой метод. ЧТо я делаю не так?

  2. says:

    сентября 13, 2012 at 13:09 (#)

    Разобрался) затупил)

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.