Sha256: 2eedb603831f241eaf3e3cf98591ea6cc7ffa0b7d3950ca30eee620a55f6ff3f

Contents?: true

Size: 915 Bytes

Versions: 14

Compression:

Stored size: 915 Bytes

Contents

require 'reek/source/ast_node'
require 'reek/source/sexp_node'
require 'reek/source/sexp_extensions'

module Reek
  module Source
    # Maps AST node types to sublasses of AstNode extended with the relevant
    # utility modules.
    class AstNodeClassMap
      def initialize
        @klass_map = {}
      end

      def klass_for(type)
        @klass_map[type] ||=
          begin
            klass = Class.new(AstNode)
            klass.send :include, extension_map[type] if extension_map[type]
            klass.send :include, SexpNode
          end
      end

      def extension_map
        @extension_map ||=
          begin
            assoc = SexpExtensions.constants.map do |const|
              [
                const.to_s.sub(/Node$/, '').downcase.to_sym,
                SexpExtensions.const_get(const)
              ]
            end
            Hash[assoc]
          end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
reek-2.0.4 lib/reek/source/ast_node_class_map.rb
reek-2.0.3 lib/reek/source/ast_node_class_map.rb
reek-2.0.2 lib/reek/source/ast_node_class_map.rb
reek-2.0.1 lib/reek/source/ast_node_class_map.rb
reek-2.0.0 lib/reek/source/ast_node_class_map.rb
reek-1.6.6 lib/reek/source/ast_node_class_map.rb
reek-1.6.5 lib/reek/source/ast_node_class_map.rb
reek-1.6.4 lib/reek/source/ast_node_class_map.rb
reek-1.6.3 lib/reek/source/ast_node_class_map.rb
reek-1.6.2 lib/reek/source/ast_node_class_map.rb
reek-1.6.1 lib/reek/source/ast_node_class_map.rb
reek-1.6.0 lib/reek/source/ast_node_class_map.rb
reek-1.5.1 lib/reek/source/ast_node_class_map.rb
reek-1.5.0 lib/reek/source/ast_node_class_map.rb