Module: Where

Defined in:
lib/where_is.rb,
lib/where_is/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.are_instance_methods(klass, method_name) ⇒ Object



33
34
35
# File 'lib/where_is.rb', line 33

def are_instance_methods(klass, method_name)
  are_via_extractor(:method, klass, method_name)
end

.are_methods(klass, method_name) ⇒ Object



29
30
31
# File 'lib/where_is.rb', line 29

def are_methods(klass, method_name)
  are_via_extractor(:method, klass, method_name)
end

.is(klass, method = nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/where_is.rb', line 5

def is(klass, method = nil)
  if method
    begin
      Where.is_instance_method(klass, method)
    rescue NameError
      Where.is_method(klass, method)
    end
  else
    Where.is_class_primarily(klass)
  end
end

.is_class(klass) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/where_is.rb', line 37

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]}.map{|fc| [fc[:file], fc[:line]]}
end

.is_class_primarily(klass) ⇒ Object

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



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/where_is.rb', line 50

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

.is_instance_method(klass, method_name) ⇒ Object



25
26
27
# File 'lib/where_is.rb', line 25

def is_instance_method(klass, method_name)
  source_location(klass.instance_method(method_name))
end

.is_method(klass, method_name) ⇒ Object



21
22
23
# File 'lib/where_is.rb', line 21

def is_method(klass, method_name)
  source_location(klass.method(method_name))
end

.is_proc(proc) ⇒ Object



17
18
19
# File 'lib/where_is.rb', line 17

def is_proc(proc)
  source_location(proc)
end