Class: Glimmer::DSL::ExpressionHandler
- Inherits:
-
Object
- Object
- Glimmer::DSL::ExpressionHandler
- Defined in:
- lib/glimmer/dsl/expression_handler.rb
Overview
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
Instance Method Summary collapse
-
#handle(parent, keyword, *args, &block) ⇒ Object
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.
-
#initialize(expression) ⇒ ExpressionHandler
constructor
A new instance of ExpressionHandler.
-
#next=(next_expression_handler) ⇒ Object
Sets the next handler in the expression handler chain of responsibility.
Constructor Details
#initialize(expression) ⇒ ExpressionHandler
Returns a new instance of ExpressionHandler.
17 18 19 |
# File 'lib/glimmer/dsl/expression_handler.rb', line 17 def initialize(expression) @expression = expression end |
Instance Method Details
#handle(parent, keyword, *args, &block) ⇒ Object
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
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/glimmer/dsl/expression_handler.rb', line 25 def handle(parent, keyword, *args, &block) Glimmer::Config.logger&.debug "Attempting to handle #{keyword} with #{@expression.class.name.split(":").last}" if @expression.can_interpret?(parent, keyword, *args, &block) Glimmer::Config.logger&.debug "#{@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) = "Glimmer keyword #{keyword} with args #{args} cannot be handled" += " inside parent #{parent}" if parent += "! Check the validity of the code." # Glimmer::Config.logger&.error message raise InvalidKeywordError, end end |
#next=(next_expression_handler) ⇒ Object
Sets the next handler in the expression handler chain of responsibility
43 44 45 |
# File 'lib/glimmer/dsl/expression_handler.rb', line 43 def next=(next_expression_handler) @next_expression_handler = next_expression_handler end |