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.
38 39 40 |
# File 'lib/glimmer/dsl/expression_handler.rb', line 38 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
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# 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) = "Glimmer keyword #{keyword} with args #{args} cannot be handled" += " inside parent #{parent}" if parent += "! Check the validity of the code." raise InvalidKeywordError, end end |
#next=(next_expression_handler) ⇒ Object
Sets the next handler in the expression handler chain of responsibility
63 64 65 |
# File 'lib/glimmer/dsl/expression_handler.rb', line 63 def next=(next_expression_handler) @next_expression_handler = next_expression_handler end |