Class: Glimmer::DSL::StaticExpression

Inherits:
Expression
  • Object
show all
Defined in:
lib/glimmer/dsl/static_expression.rb

Overview

Represents a StaticExpression for expressions where the keyword does not vary dynamically. These static keywords are then predefined as methods in Glimmer instead of needing method_missing

StaticExpression subclasses may optionally implement ‘#can_interpret?` (not needed if it only checks for keyword)

StaticExpression subclasses must define ‘#interpret`.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Expression

#add_content, #interpret, #textual?, #widget?

Class Method Details

.inherited(base) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/glimmer/dsl/static_expression.rb', line 16

def self.inherited(base)
  keyword = base.name.split(/::/).last.sub(/Expression$/, '').underscore
  static_expression = base.new
  Glimmer.define_method(keyword) do |*args, &block|
    parent = Glimmer::DSL::Engine.current_parent
    if !static_expression.can_interpret?(parent, keyword, *args, &block)
      raise Error, "Invalid use of Glimmer keyword #{keyword} with args #{args} under parent #{parent}"
    else
      Glimmer.logger&.debug "#{base.name} will handle expression keyword #{keyword}"
      static_expression.interpret(parent, keyword, *args, &block).tap do |ui_object|
        Glimmer::DSL::Engine.add_content(ui_object, static_expression, &block) unless block.nil?
      end
    end
  end
end

Instance Method Details

#can_interpret?(parent, keyword, *args, &block) ⇒ Boolean

Subclasses may optionally implement

Returns:

  • (Boolean)


33
34
35
# File 'lib/glimmer/dsl/static_expression.rb', line 33

def can_interpret?(parent, keyword, *args, &block)
  true
end