Skip to content

Latest commit

 

History

History
117 lines (87 loc) · 3.46 KB

003-ruby-dsl-configus.md

File metadata and controls

117 lines (87 loc) · 3.46 KB

Это первая часть

вторая часть

Цель

Научиться писать DSL, создать gem.

Прочитать перед тем как начать

Теория

Что нужно сделать

  1. согдать каркас gem
  2. написать библиотеку

Как это выглядит

# :development показывает, что стоим конфиг для development окружения 
Configus.build :development do
  env :production do
    email '[email protected]'
    house 'White House'
    some_proc -> { 1 + 1 }
  end

  env :development do
    email '[email protected]'
    email '[email protected]' # переопределяем ключ
  end
end

Configus.config.email #=> '[email protected]'

Что читать в процессе

Создание гема

Метапрограммирование

Интерфейс

  • Configus.build
  • Configus.config

Архитектура

#lib/configus.rb
module Configus
  class << self
    def build(env, &block)
      @config = Builder.build env, &block
    end
    
    def config
      @config
    end
  end
end

#lib/configus/proxy.rb
module Configus
  class Proxy < BasicObject
    # some code
    
    def method_missing(key, value)
      # код ниже только для примера
      
      # в BasicObject нет метода p, по этому так=)
      Kernel.p key
      Kernel.p value
    end
  end
end
Configus::Proxy.new.instance_exec do 
  some_method "some value" # напечатает на экран :some_method "some value"
end
  • контекст исполнения для method_missing: Configus::Proxy < BasicObject
  • Configus.config возвращает экземпляр Configus::Config

Требования

  • использовать rspec
  • использовать TDD

Книги

Благодарности

Мокевнину Кириллу за написание оригинального configus и объяснение как он устроен. Ссылку осознанно не привожу, что бы не подсматривали ;)