class Ahnnotate::Facet::Models::Processor

Public Instance Methods

call(content) click to toggle source
# File lib/ahnnotate/facet/models/processor.rb, line 5
def call(content)
  sexp = Parser::CurrentRuby.parse(content)

  @current_class = ModuleNode.new(nil)
  @classes = [@current_class]

  process(sexp)

  @classes.reject { |klass| klass.class_name == "" }
end
on_class(node) click to toggle source
Calls superclass method
# File lib/ahnnotate/facet/models/processor.rb, line 16
def on_class(node)
  @current_class = module_node_create(node, parent: @current_class)
  @classes.push(@current_class)

  super

  @current_class = @current_class.parent
end
Also aliased as: on_module
on_def(_) click to toggle source

ignore instance method definitions since method definition bodies can't contain class declarations

# File lib/ahnnotate/facet/models/processor.rb, line 48
def on_def(_)
end
on_defs(_) click to toggle source

ignore class method definitions since method definition bodies can't contain class declarations

# File lib/ahnnotate/facet/models/processor.rb, line 53
def on_defs(_)
end
on_module(node)
Alias for: on_class
on_send(node) click to toggle source
# File lib/ahnnotate/facet/models/processor.rb, line 27
def on_send(node)
  receiver, method_name, assigned_node = *node

  if receiver == s(:self) && method_name == :table_name=
    table_name = assigned_node.children.last
    @current_class.table_name = table_name
  end

  if receiver == s(:self) && method_name == :abstract_class=
    abstract_class =
      if assigned_node.type == :true
        true
      else
        false
      end
    @current_class.abstract_class = abstract_class
  end
end

Private Instance Methods

module_node_create(node, parent:) click to toggle source
# File lib/ahnnotate/facet/models/processor.rb, line 58
def module_node_create(node, parent:)
  class_node, superclass_node, _body_node = *node

  if node.type == :module
    superclass_node = nil
  end

  class_name = resolve_class_name(class_node)
  superclass_name = resolve_class_name(superclass_node)

  classlike = ModuleNode.new(class_name.to_s)
  classlike.claimed_superclass = superclass_name.to_s
  classlike.module_parent = parent

  classlike
end
resolve_class_name(node) click to toggle source
# File lib/ahnnotate/facet/models/processor.rb, line 75
def resolve_class_name(node)
  outer, name = *node

  if outer.nil?
    name
  else
    "#{resolve_class_name(outer)}::#{name}"
  end
end
s(type, *children) click to toggle source
# File lib/ahnnotate/facet/models/processor.rb, line 85
def s(type, *children)
  AST::Node.new(type, children)
end