class Catlass::DSLContext

Public Class Methods

new() click to toggle source
# File lib/catlass/dsl_context.rb, line 5
def initialize
  @jobs = []
  @templates = {}
  @context = Hashie::Mash.new()
end

Public Instance Methods

context() click to toggle source
# File lib/catlass/dsl_context.rb, line 31
def context
  @context
end
dslh_eval(block) click to toggle source
# File lib/catlass/dsl_context.rb, line 47
    def dslh_eval(block)
      scope_hook = proc do |scope|
        scope.instance_eval(<<-'EOS')
          def include_template(template_name, context = {})
            tmplt = @templates[template_name.to_s]

            unless tmplt
              raise "Template '#{template_name}' is not defined"
            end

            context_orig = @context
            @context = @context.merge(context)
            instance_eval(&tmplt)
            @context = context_orig
          end

          def context
            @context
          end

          def __dsl(&block)
            @__hash__ = JSON.generate(Dslh::ScopeBlock.nest(binding, 'block'))
          end

          def __script(str)
            str.split(/\R/)
          end

          def __script_file(file)
            File.read(file).split(/\R/)
          end
        EOS
      end

      scope_vars = {templates: @templates, context: @context}

      Dslh.eval(allow_empty_args: true, scope_hook: scope_hook, scope_vars: scope_vars, &block)
    end
eval_dsl(dsl_file) click to toggle source
# File lib/catlass/dsl_context.rb, line 11
def eval_dsl(dsl_file)
  @_dsl_file = dsl_file
  instance_eval(File.read(dsl_file), dsl_file)
  @jobs
end
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/catlass/dsl_context.rb, line 17
def method_missing(method_name, *args, &block)
  if [:Job].include?(method_name)
    hash = dslh_eval(block)
    hash['attributes']['name'] = args[0]
    @jobs << hash
  else
    super
  end
end
require(file) click to toggle source
# File lib/catlass/dsl_context.rb, line 35
def require(file)
  jobfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@_dsl_file), file))

  if File.exist?(jobfile)
    instance_eval(File.read(jobfile), jobfile)
  elsif File.exist?(jobfile + '.rb')
    instance_eval(File.read(jobfile + '.rb'), jobfile + '.rb')
  else
    Kernel.require(file)
  end
end
template(name, &block) click to toggle source
# File lib/catlass/dsl_context.rb, line 27
def template(name, &block)
  @templates[name.to_s] = block
end