Sha256: 677448c89d684f0e5ba118286fcacb8a871a2c7730792612360b7fc8f7022c47

Contents?: true

Size: 1.38 KB

Versions: 8

Compression:

Stored size: 1.38 KB

Contents

module Rbexy
  module Nodes
    class AbstractNode
      PrecompileRequired = Class.new(StandardError)

      attr_reader :compile_context

      def precompile
        [self]
      end

      def compile
        raise PrecompileRequired, "#{self.class.name} must be precompiled first"
      end

      def inject_compile_context(context)
        @compile_context = context
        children.each { |c| c.inject_compile_context(context) } if respond_to?(:children)
        members.each { |c| c.inject_compile_context(context) } if respond_to?(:members)
      end

      def transform!
        return unless ast_transformer
        ast_transformer.transform(self, compile_context)
        children.each(&:transform!) if respond_to?(:children)
        members.each(&:transform!) if respond_to?(:members)
      end

      private

      def ast_transformer
        compile_context.ast_transformer
      end

      def compact(nodes)
        compacted = []
        curr_raw = nil

        nodes.each do |node|
          if node.is_a?(Newline) && curr_raw
            curr_raw.merge(Raw.new("\n"))
          elsif node.is_a?(Raw)
            if !curr_raw
              curr_raw ||= Raw.new("")
              compacted << curr_raw
            end
            curr_raw.merge(node)
          else
            curr_raw = nil
            compacted << node
          end
        end

        compacted
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rbexy-2.0.0.beta8 lib/rbexy/nodes/abstract_node.rb
rbexy-2.0.0.beta7 lib/rbexy/nodes/abstract_node.rb
rbexy-2.0.0.beta6 lib/rbexy/nodes/abstract_node.rb
rbexy-2.0.0.beta5 lib/rbexy/nodes/abstract_node.rb
rbexy-2.0.0.beta4 lib/rbexy/nodes/abstract_node.rb
rbexy-2.0.0.beta3 lib/rbexy/nodes/abstract_node.rb
rbexy-2.0.0.beta2 lib/rbexy/nodes/abstract_node.rb
rbexy-2.0.0.beta1 lib/rbexy/nodes/abstract_node.rb