Module: Minitest::Metz::Where

Defined in:
lib/minitest/metz/where.rb

Class Method Summary collapse

Class Method Details

.is_class(klass) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/minitest/metz/where.rb', line 5

def is_class(klass)
  methods = defined_methods(klass)
  file_groups = methods.group_by{|sl| sl[0]}
  file_counts = file_groups.map do |file, sls|
    lines = sls.map{|sl| sl[1]}
    count = lines.size
    line = lines.min
    {file: file, count: count, line: line}
  end
  file_counts.sort_by!{|fc| fc[:count]}
  source_locations = file_counts.map{|fc| [fc[:file], fc[:line]]}
  source_locations
end

.is_class_primarily(klass) ⇒ Object

Raises ArgumentError if klass does not have any Ruby methods defined in it.



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/minitest/metz/where.rb', line 20

def is_class_primarily(klass)
  source_locations = is_class(klass)
  if source_locations.empty?
    methods = defined_methods(klass)
    raise ArgumentError, (methods.empty? ?
                          "#{klass} has no methods" :
                          "#{klass} only has built-in methods (#{methods.size} in total)"
                         )
  end
  source_locations[0]
end