class Dashdog::DSLContext

Public Class Methods

new() click to toggle source
# File lib/dashdog/dsl_context.rb, line 5
def initialize
  @boards = {'timeboards' => [], 'screenboards' => []}
  @templates = {}
  @context = Hashie::Mash.new()
end

Public Instance Methods

eval_dsl(dsl_file) click to toggle source
# File lib/dashdog/dsl_context.rb, line 11
def eval_dsl(dsl_file)
  @_dsl_file = dsl_file
  instance_eval(File.read(dsl_file), dsl_file)
  @boards
end

Private Instance Methods

context() click to toggle source
# File lib/dashdog/dsl_context.rb, line 23
def context
  @context
end
dslh_eval(block) click to toggle source
# File lib/dashdog/dsl_context.rb, line 51
    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
        EOS
      end

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

      Dslh.eval(allow_empty_args: true, scope_hook: scope_hook, scope_vars: scope_vars, &block)
    end
require(file) click to toggle source
# File lib/dashdog/dsl_context.rb, line 27
def require(file)
  boardfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@_dsl_file), file))

  if File.exist?(boardfile)
    instance_eval(File.read(boardfile), boardfile)
  elsif File.exist?(boardfile + '.rb')
    instance_eval(File.read(boardfile + '.rb'), boardfile + '.rb')
  else
    Kernel.require(file)
  end
end
screenboard(value = nil, &block) click to toggle source
# File lib/dashdog/dsl_context.rb, line 45
def screenboard(value = nil, &block)
  hash = dslh_eval(block)
  hash['board_title'] = value
  @boards['screenboards'] << hash
end
template(name, &block) click to toggle source
# File lib/dashdog/dsl_context.rb, line 19
def template(name, &block)
  @templates[name.to_s] = block
end
timeboard(value = nil, &block) click to toggle source
# File lib/dashdog/dsl_context.rb, line 39
def timeboard(value = nil, &block)
  hash = dslh_eval(block)
  hash['title'] = value
  @boards['timeboards'] << hash
end