method_locator 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # Method Locator
1
+ # method_locator
2
2
 
3
- Method Locator is a Ruby gem that allows you to easily determine the method lookup path of a particular
3
+ method_locator is a Ruby gem that allows you to easily determine the method lookup path of a particular
4
4
  object / class / module, as well as find all places (represented as UnboundMethod instances) where
5
5
  a callable method is defined on an object. This is very useful in an environment such as Rails where
6
6
  you are unsure where a method may be defined or overridden. Note that by default, Ruby tends to hide
@@ -8,15 +8,20 @@ singleton classes when you invoke Module#ancestors. The new Object#method_lookup
8
8
  these singleton classes and will return them, so that you get a true representation of how Ruby
9
9
  performs lookups for methods.
10
10
 
11
+ This library will make more sense if you understand Ruby's object model and method lookup path.
12
+ A great explanation of this can be found in the following article by Andrea Singh: [Ruby's Eigenclasses Demystified](http://blog.madebydna.com/all/code/2011/06/24/eigenclasses-demystified.html)
13
+
11
14
  ## Installation
12
15
 
13
- Method Locator is available as a RubyGem:
16
+ method_locator is available as a Ruby gem:
14
17
 
15
18
  gem install method_locator
16
19
 
17
20
  ## Examples
18
21
 
19
22
  ```ruby
23
+ require 'method_locator'
24
+
20
25
  module M1
21
26
  def foo
22
27
  puts "foo from M1"
@@ -2,9 +2,7 @@ require "method_locator/version"
2
2
 
3
3
  # MethodLocator finds all method definitions in an object instance, class, or
4
4
  # module ancestor chain. This code will make more sense if you understand Ruby's
5
- # object model and method lookup path. A great explanation of this can be found in:
6
- # "Ruby's Eigenclasses Demystified" - http://blog.madebydna.com/all/code/2011/06/24/eigenclasses-demystified.html
7
-
5
+ # object model and method lookup path. See README for more information.
8
6
  module MethodLocator
9
7
  def methods_for(meth)
10
8
  method_lookup_path.each_with_object([]) do |clazz, matches|
@@ -17,7 +15,7 @@ module MethodLocator
17
15
  insert_modules_into(lookup_path)
18
16
  end
19
17
 
20
- def class_only_ancestors
18
+ def only_class_ancestors
21
19
  ancestors.grep(Class)
22
20
  end
23
21
 
@@ -28,11 +26,13 @@ module MethodLocator
28
26
  end
29
27
 
30
28
  def nonclass_lookup_path
31
- self.class.class_only_ancestors.unshift(singleton_class)
29
+ # not only non-classes have singleton classes, for example integers
30
+ sclass = singleton_class rescue nil
31
+ self.class.only_class_ancestors.unshift(sclass).compact
32
32
  end
33
33
 
34
34
  def class_lookup_path
35
- class_only_ancestors.map(&:singleton_class) + Class.class_only_ancestors
35
+ only_class_ancestors.map(&:singleton_class) + Class.only_class_ancestors
36
36
  end
37
37
 
38
38
  def insert_modules_into(lookup_path)
@@ -1,3 +1,3 @@
1
1
  module MethodLocator
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
9
9
  s.authors = ["Ryan LeCompte"]
10
10
  s.email = ["lecompte@gmail.com"]
11
11
  s.homepage = "http://github.com/ryanlecompte/method_locator"
12
- s.summary = %q{Method Locator provides a way to traverse an object's method lookup path to find all places where a method may be defined.}
13
- s.description = %q{Method Locator provides a way to traverse an object's method lookup path to find all places where a method may be defined.}
12
+ s.summary = %q{method_locator provides a way to traverse an object's method lookup path to find all places where a method may be defined.}
13
+ s.description = %q{method_locator provides a way to traverse an object's method lookup path to find all places where a method may be defined.}
14
14
 
15
15
  s.rubyforge_project = "method_locator"
16
16
 
@@ -26,6 +26,10 @@ describe MethodLocator do
26
26
  it "returns proper methods for modules" do
27
27
  M4.methods_for(:hello).map(&:owner).should == [M4.singleton_class]
28
28
  end
29
+
30
+ it "returns proper methods for objects without a singleton class" do
31
+ 5.methods_for(:+).should == [Fixnum.instance_method(:+)]
32
+ end
29
33
  end
30
34
 
31
35
  describe "#method_lookup_path" do
@@ -67,6 +71,10 @@ describe MethodLocator do
67
71
  Kernel,
68
72
  BasicObject]
69
73
  end
74
+
75
+ it "returns proper path for objects without a singleton class" do
76
+ 5.method_lookup_path.should == 5.class.ancestors
77
+ end
70
78
  end
71
79
 
72
80
  def method_lookup_path_for(obj)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_locator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-21 00:00:00.000000000Z
12
+ date: 2011-10-13 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70185155876540 !ruby/object:Gem::Requirement
16
+ requirement: &70150932623800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,8 +21,8 @@ dependencies:
21
21
  version: 2.5.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70185155876540
25
- description: Method Locator provides a way to traverse an object's method lookup path
24
+ version_requirements: *70150932623800
25
+ description: method_locator provides a way to traverse an object's method lookup path
26
26
  to find all places where a method may be defined.
27
27
  email:
28
28
  - lecompte@gmail.com
@@ -63,7 +63,7 @@ rubyforge_project: method_locator
63
63
  rubygems_version: 1.8.10
64
64
  signing_key:
65
65
  specification_version: 3
66
- summary: Method Locator provides a way to traverse an object's method lookup path
66
+ summary: method_locator provides a way to traverse an object's method lookup path
67
67
  to find all places where a method may be defined.
68
68
  test_files:
69
69
  - spec/method_locator/method_locator_spec.rb