Class: ActiveMocker::RubyParse

Inherits:
Object
  • Object
show all
Defined in:
lib/active_mocker/ruby_parse.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ RubyParse

Returns a new instance of RubyParse.



7
8
9
# File 'lib/active_mocker/ruby_parse.rb', line 7

def initialize(source)
  @source = source
end

Instance Attribute Details

#sourceObject (readonly)

Returns the value of attribute source.



5
6
7
# File 'lib/active_mocker/ruby_parse.rb', line 5

def source
  @source
end

Instance Method Details

#astObject



53
54
55
# File 'lib/active_mocker/ruby_parse.rb', line 53

def ast
  @ast ||= Parser::CurrentRuby.parse(source)
end

#change_class_name(class_name) ⇒ Object



28
29
30
31
32
33
# File 'lib/active_mocker/ruby_parse.rb', line 28

def change_class_name(class_name)
  reset_nodes
  nodes[0] = Parser::CurrentRuby.parse(class_name)
  new_ast = ast.updated(nil, nodes, nil)
  Unparser.unparse(new_ast)
end

#class_nameObject



15
16
17
# File 'lib/active_mocker/ruby_parse.rb', line 15

def class_name
  Unparser.unparse(find_class.to_a[0])
end

#find_classObject



48
49
50
51
# File 'lib/active_mocker/ruby_parse.rb', line 48

def find_class
  return ast if ast.try(:type) == :class
  ast.to_a.select {|n| n.try(:type) == :class}.first
end

#has_parent_class?Boolean

Returns:

  • (Boolean)


23
24
25
26
# File 'lib/active_mocker/ruby_parse.rb', line 23

def has_parent_class?
  return false if find_class.nil?
  find_class.to_a[1].try(:type) == :const
end

#is_class?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/active_mocker/ruby_parse.rb', line 11

def is_class?
  ast.type == :class
end

#modify_parent_class(parent_class) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/active_mocker/ruby_parse.rb', line 35

def modify_parent_class(parent_class)
  reset_nodes
  if has_parent_class?
    class_node = find_class.to_a.dup
    class_node[1] = Parser::CurrentRuby.parse(parent_class)
    new_ast = find_class.updated(nil, class_node, nil)
  else
    nodes[1] = nodes[0].updated(:const, [nil, parent_class.to_sym])
    new_ast = ast.updated(nil, nodes, nil)
  end
  Unparser.unparse(new_ast)
end

#nodesObject



57
58
59
# File 'lib/active_mocker/ruby_parse.rb', line 57

def nodes
  @nodes ||= ast.to_a.dup
end

#parent_class_nameObject



19
20
21
# File 'lib/active_mocker/ruby_parse.rb', line 19

def parent_class_name
  Unparser.unparse(find_class.to_a[1])
end

#reset_nodesObject



61
62
63
# File 'lib/active_mocker/ruby_parse.rb', line 61

def reset_nodes
  @nodes = nil
end