Sha256: 1711a1e2c4e5c13d2424349865870d686da58e343d8f786f15f5fe88eec7de9e

Contents?: true

Size: 889 Bytes

Versions: 3

Compression:

Stored size: 889 Bytes

Contents

module AQL
  class Node
    # Abstract base class for literal nodes
    class Literal < self
      REGISTRY = {}

      # Register handler
      #
      # @param [Class] klass
      #
      # @return [undefined]
      #
      # @api private
      #
      def self.handle(klass)
        REGISTRY[klass]=self
      end
      private_class_method :handle

      # Build literal handler
      #
      # @param [Object] object
      #
      # @return [Node::Literal]
      #
      # @api private
      #
      def self.build(object)
        klass = object.class
        handler = REGISTRY.fetch(klass) do
          raise "No support for literal #{klass}"
        end
        handler.construct(object)
      end

      # Construct object
      #
      # @return [Node::Literal]
      #
      # @api private
      #
      def self.construct(*args)
        new(*args)
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aql-0.0.3 lib/aql/node/literal.rb
aql-0.0.2 lib/aql/node/literal.rb
aql-0.0.1 lib/aql/node/literal.rb