class Alki::Dsls::Dsl

Public Class Methods

dsl_info() click to toggle source
# File lib/alki/dsls/dsl.rb, line 28
def self.dsl_info
  {
    requires: [['alki/dsls/class',:before]],
    methods: [
      :dsl_method,
      [:init,:dsl_init],
      [:finish,:dsl_finish],
      :require_dsl,
      :helper,
      :helper_module
    ],
    init: :init,
    finish: :finish
  }
end
helpers() click to toggle source
# File lib/alki/dsls/dsl.rb, line 24
def self.helpers
  [Helpers]
end

Public Instance Methods

dsl_finish(&blk) click to toggle source
# File lib/alki/dsls/dsl.rb, line 64
def dsl_finish(&blk)
  add_method :_dsl_finish, private: true, &blk
  @info[:finish] = :_dsl_finish
end
dsl_init(&blk) click to toggle source
# File lib/alki/dsls/dsl.rb, line 59
def dsl_init(&blk)
  add_method :_dsl_init, private: true, &blk
  @info[:init] = :_dsl_init
end
dsl_method(name, &blk) click to toggle source
# File lib/alki/dsls/dsl.rb, line 53
def dsl_method(name, &blk)
  method_name = name.to_sym
  add_method method_name, private: true, &blk
  @info[:methods] << [name.to_sym,method_name]
end
finish() click to toggle source
# File lib/alki/dsls/dsl.rb, line 86
def finish
  set_super_class 'alki/dsl/base'
  create_as_module(subclass: 'Helpers')

  add_class_method :helpers do
    [self::Helpers]
  end
  info = @info.freeze
  add_class_method :dsl_info do
    info
  end

  add_method(:require_dsl,private: true) do |dsl,order=:before|
    dsl_class = Alki.load dsl
    dsl_class.helpers.each do |helper|
      self.singleton_class.send :include, helper
    end
    @evaluator.update requires: [[dsl,order]]
  end
end
helper(name,&blk) click to toggle source
# File lib/alki/dsls/dsl.rb, line 78
def helper(name,&blk)
  add_helper name, &blk
end
helper_module(mod) click to toggle source
# File lib/alki/dsls/dsl.rb, line 82
def helper_module(mod)
  add_helper_module mod
end
init() click to toggle source
# File lib/alki/dsls/dsl.rb, line 44
def init
  @info = {
    methods: [],
    requires: []
  }
  @helper_modules = []
  @helpers = {}
end
require_dsl(dsl, order=:before) click to toggle source
# File lib/alki/dsls/dsl.rb, line 69
def require_dsl(dsl, order=:before)
  dsl_class = Alki.load dsl
  @info[:requires] << [dsl,order]
  dsl_class.helpers.each do |helper|
    add_module helper
    add_helper_module helper
  end
end