module Formatron::Util::DSL

utilities for generating DSL classes

Public Instance Methods

dsl_array(symbol) click to toggle source

rubocop:enable Metrics/MethodLength

# File lib/formatron/util/dsl.rb, line 74
def dsl_array(symbol)
  iv = "@#{symbol}"
  define_method symbol do |value = nil|
    array = instance_variable_get(iv)
    if array.nil?
      array = []
      instance_variable_set iv, array
    end
    array.push value unless value.nil?
    array
  end
end
dsl_block(symbol, cls, &params_block) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/formatron/util/dsl.rb, line 30
def dsl_block(symbol, cls, &params_block)
  iv = "@#{symbol}"
  define_method symbol do |&block|
    value = instance_variable_get(iv)
    if value.nil?
      params = {}
      params = instance_eval(
        &params_block
      ) unless params_block.nil?
      value = self.class.const_get(cls).new(**params)
      instance_variable_set iv, value
    end
    block.call value unless block.nil?
    instance_variable_get iv
  end
end
dsl_block_array(symbol, cls) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/formatron/util/dsl.rb, line 88
def dsl_block_array(symbol, cls)
  iv = "@#{symbol}"
  define_method symbol do |&block|
    array = instance_variable_get(iv)
    if array.nil?
      array = []
      instance_variable_set iv, array
    end
    unless block.nil?
      value = self.class.const_get(cls).new
      array.push value
      block.call value
    end
    array
  end
end
dsl_hash(symbol, cls, &params_block) click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/formatron/util/dsl.rb, line 49
def dsl_hash(symbol, cls, &params_block)
  iv = "@#{symbol}"
  define_method symbol do |dsl_key = nil, &block|
    hash = instance_variable_get(iv)
    if hash.nil?
      hash = {}
      instance_variable_set iv, hash
    end
    unless dsl_key.nil?
      params = {}
      params = instance_exec(
        dsl_key, &params_block
      ) unless params_block.nil?
      value = self.class.const_get(cls).new(
        dsl_key,
        **params
      )
      hash[dsl_key] = value
      block.call value unless block.nil?
    end
    hash
  end
end
dsl_initialize_block(&block) click to toggle source
# File lib/formatron/util/dsl.rb, line 5
def dsl_initialize_block(&block)
  define_method :initialize do |**params|
    instance_exec(**params, &block) unless block.nil?
  end
end
dsl_initialize_hash(&block) click to toggle source
# File lib/formatron/util/dsl.rb, line 11
def dsl_initialize_hash(&block)
  define_method :initialize do |dsl_key, **params|
    instance_exec(
      dsl_key,
      **params,
      &block
    ) unless block.nil?
  end
end
dsl_property(symbol) click to toggle source
# File lib/formatron/util/dsl.rb, line 21
def dsl_property(symbol)
  iv = "@#{symbol}"
  define_method symbol do |value = nil|
    instance_variable_set iv, value unless value.nil?
    instance_variable_get iv
  end
end