class Glimmer::DSL::ExpressionHandler

Expression handler for a Glimmer DSL specific expression

Follows the Chain of Responsibility Design Pattern

Handlers are configured in Glimmer::DSL in the right order to attempt handling Glimmer DSL interpretation calls

Each handler knows the next handler in the chain of responsibility.

If it handles successfully, it returns. Otherwise, it forwards to the next handler in the chain of responsibility

Public Class Methods

new(expression) click to toggle source
# File lib/glimmer/dsl/expression_handler.rb, line 38
def initialize(expression)
  @expression = expression
end

Public Instance Methods

handle(parent, keyword, *args, &block) click to toggle source

Handles interpretation of Glimmer DSL expression if expression supports it If it succeeds, it returns the correct Glimmer DSL expression object Otherwise, it forwards to the next handler configured via ‘#next=` method If there is no handler next, then it raises an error

# File lib/glimmer/dsl/expression_handler.rb, line 46
def handle(parent, keyword, *args, &block)
  Glimmer::Config.logger.info {"Attempting to handle #{keyword} with #{@expression.class.name.split(":").last}"}
  if @expression.can_interpret?(parent, keyword, *args, &block)
    Glimmer::Config.logger.info {"#{@expression.class.name} will handle expression keyword #{keyword}"}
    return @expression
  elsif @next_expression_handler
    return @next_expression_handler.handle(parent, keyword, *args, &block)
  else
    # TODO see if we need a better response here (e.g. dev mode error raising vs production mode silent failure)
    message = "Glimmer keyword #{keyword} with args #{args} cannot be handled"
    message += " inside parent #{parent}" if parent
    message += "! Check the validity of the code."
    raise InvalidKeywordError, message
  end
end
next=(next_expression_handler) click to toggle source

Sets the next handler in the expression handler chain of responsibility

# File lib/glimmer/dsl/expression_handler.rb, line 63
def next=(next_expression_handler)
  @next_expression_handler = next_expression_handler
end