Sha256: 87f30502bfec063c2fd2d524d9bc3d7c04e22254e39171b91437767a6c998df7

Contents?: true

Size: 1.48 KB

Versions: 8

Compression:

Stored size: 1.48 KB

Contents

require 'glimmer/error'
require 'glimmer/swt/widget_proxy'
require 'glimmer/ui/custom_widget'

module Glimmer
  module DSL
    # 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 StaticExpression < Expression
      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

      # Subclasses may optionally implement
      def can_interpret?(parent, keyword, *args, &block)
        true
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
glimmer-0.5.11 lib/glimmer/dsl/static_expression.rb
glimmer-0.5.10 lib/glimmer/dsl/static_expression.rb
glimmer-0.5.9 lib/glimmer/dsl/static_expression.rb
glimmer-0.5.8 lib/glimmer/dsl/static_expression.rb
glimmer-0.5.7 lib/glimmer/dsl/static_expression.rb
glimmer-0.5.6 lib/glimmer/dsl/static_expression.rb
glimmer-0.5.5 lib/glimmer/dsl/static_expression.rb
glimmer-0.5.4 lib/glimmer/dsl/static_expression.rb