Module: Where
- Defined in:
- lib/where_is.rb,
lib/where_is/version.rb
Constant Summary collapse
- VERSION =
"0.1.0"
Class Method Summary collapse
- .are_instance_methods(klass, method_name) ⇒ Object
- .are_methods(klass, method_name) ⇒ Object
- .is(klass, method = nil) ⇒ Object
- .is_class(klass) ⇒ Object
-
.is_class_primarily(klass) ⇒ Object
Raises ArgumentError if klass does not have any Ruby methods defined in it.
- .is_instance_method(klass, method_name) ⇒ Object
- .is_method(klass, method_name) ⇒ Object
- .is_proc(proc) ⇒ Object
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 |