module DependencyGrapher::ParseClass

Public Instance Methods

call(klass) click to toggle source
# File lib/dependency_grapher/parse_class.rb, line 4
def call(klass)
  anon_class_pattern?(klass.inspect) ? parse_anon_class_name(klass.inspect) : klass.inspect
end

Private Instance Methods

anon_class_pattern?(name) click to toggle source
# File lib/dependency_grapher/parse_class.rb, line 23
def anon_class_pattern?(name)
  name.match(nested_anon_pattern) || name.match(anon_pattern)
end
anon_pattern() click to toggle source

#<Class:0x007fd550c04338> matches with groups: 1.Class 2.0x007fd550c04338

# File lib/dependency_grapher/parse_class.rb, line 19
def anon_pattern 
  /#<(Class|Module):([^>]*)>/
end
nested_anon_pattern() click to toggle source

#<#<Class:0x007fd550c04338>:0x007fd550c04450> matches with groups: 1.#<Class:0x007fd550c04338> 2.0x007fd550c04450

# File lib/dependency_grapher/parse_class.rb, line 12
def nested_anon_pattern 
  /#<(#<.*>):(.*)>/
end
parse_anon_class_name(name) click to toggle source

Given #<#<Class:0x007fd550c04338>:0x007fd550c04450>, returns string “0x007fd550c04338::0x007fd550c04450” using a recursive function

# File lib/dependency_grapher/parse_class.rb, line 29
def parse_anon_class_name(name)
  if match = name.match(nested_anon_pattern)
    parse_anon_class_name(match[1]) + "::#{match[2]}"
  elsif match = name.match(anon_pattern)
    match[2]
  else
    raise "Unrecognized format for Class or Module: #{name}."
  end
end