Class: WhoAmI::Walker

Inherits:
AST::Processor
  • Object
show all
Defined in:
lib/who_am_i/walker.rb

Instance Method Summary collapse

Constructor Details

#initializeWalker

Returns a new instance of Walker.



3
4
5
6
# File 'lib/who_am_i/walker.rb', line 3

def initialize
  @current_class = ExtractedClass.new(nil)
  @classes = [@current_class]
end

Instance Method Details

#classes(sexp) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/who_am_i/walker.rb', line 17

def classes(sexp)
  @current_class = ExtractedClass.new(nil)
  @classes = [@current_class]

  process(sexp)

  @classes.reject { |klass| klass.class_name == "" }
end

#handler_missing(node) ⇒ Object



56
57
58
# File 'lib/who_am_i/walker.rb', line 56

def handler_missing(node)
  process_children(node)
end

#on_class(node) ⇒ Object Also known as: on_module



26
27
28
29
30
31
32
33
# File 'lib/who_am_i/walker.rb', line 26

def on_class(node)
  @current_class = classlike_create(node, outerclass: @current_class)
  @classes.push(@current_class)

  process_children(node)

  @current_class = @current_class.outerclass
end

#on_def(_) ⇒ Object

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



62
63
# File 'lib/who_am_i/walker.rb', line 62

def on_def(_)
end

#on_defs(_) ⇒ Object

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



67
68
# File 'lib/who_am_i/walker.rb', line 67

def on_defs(_)
end

#on_send(node) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/who_am_i/walker.rb', line 37

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

#read(file) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/who_am_i/walker.rb', line 8

def read(file)
  content = File.read(file)
  sexp = Parser::CurrentRuby.parse(content)

  classes(sexp).each do |klass|
    klass.model_filepath = file
  end
end