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