method_lister 0.3.2
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.markdown +208 -0
- data/lib/method_lister/color_display.rb +77 -0
- data/lib/method_lister/find_result.rb +50 -0
- data/lib/method_lister/finder.rb +113 -0
- data/lib/method_lister/ruby_ext.rb +24 -0
- data/lib/method_lister/simple_display.rb +55 -0
- data/lib/method_lister.rb +7 -0
- data/spec/color_display_spec.rb +37 -0
- data/spec/find_result_spec.rb +161 -0
- data/spec/finder_spec.rb +146 -0
- data/spec/helpers/matchers/list_methods.rb +42 -0
- data/spec/helpers/object_mother/find_result.rb +3 -0
- data/spec/helpers/object_mother/find_scenario.rb +45 -0
- data/spec/rcov.opts +6 -0
- data/spec/ruby_ext_spec.rb +55 -0
- data/spec/scenarios/class_with_inheritance.rb +17 -0
- data/spec/scenarios/class_with_inheritance_and_modules.rb +25 -0
- data/spec/scenarios/eigenclass.rb +18 -0
- data/spec/scenarios/eigenclass_with_modules.rb +26 -0
- data/spec/scenarios/filters_results_without_methods.rb +20 -0
- data/spec/scenarios/mixed_visibility_methods.rb +39 -0
- data/spec/scenarios/object_without_eigenclass.rb +4 -0
- data/spec/scenarios/overloaded_methods.rb +35 -0
- data/spec/scenarios/overloaded_methods_with_modules_mixed_in.rb +26 -0
- data/spec/scenarios/private_methods.rb +14 -0
- data/spec/scenarios/single_class.rb +11 -0
- data/spec/scenarios/single_class_with_module_mixed_in.rb +19 -0
- data/spec/simple_display_spec.rb +38 -0
- data/spec/spec.opts +7 -0
- data/spec/spec_helper.rb +14 -0
- metadata +100 -0
@@ -0,0 +1,161 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
2
|
+
|
3
|
+
describe MethodLister::FindResult do
|
4
|
+
before do
|
5
|
+
names = %w{foo bar baz}
|
6
|
+
@public = names.map {|m| "public_#{m}"}
|
7
|
+
@protected = names.map {|m| "protected_#{m}"}
|
8
|
+
@private = names.map {|m| "private_#{m}"}
|
9
|
+
@all = @public + @protected + @private
|
10
|
+
|
11
|
+
@object = Object.new
|
12
|
+
@empty_result = MethodLister::FindResult.new(@object)
|
13
|
+
@only_public = MethodLister::FindResult.new(@object,
|
14
|
+
:public => @public)
|
15
|
+
@only_protected = MethodLister::FindResult.new(@object,
|
16
|
+
:protected => @protected)
|
17
|
+
@only_private = MethodLister::FindResult.new(@object,
|
18
|
+
:private => @private)
|
19
|
+
@mixed_result = MethodLister::FindResult.new(@object,
|
20
|
+
:public => @public,
|
21
|
+
:protected => @protected,
|
22
|
+
:private => @private)
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#object" do
|
26
|
+
it "works even if object is nil" do
|
27
|
+
result = MethodLister::FindResult.new(nil, :public => @public)
|
28
|
+
result.object.should be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "knows its associated object" do
|
32
|
+
@empty_result.object.should == @object
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#methods" do
|
37
|
+
it "knows all its methods" do
|
38
|
+
@empty_result.methods(:all).should be_empty
|
39
|
+
@only_public.methods(:all).should == @public.sort
|
40
|
+
@only_protected.methods(:all).should == @protected.sort
|
41
|
+
@only_private.methods(:all).should == @private.sort
|
42
|
+
@mixed_result.methods(:all).should == @all.sort
|
43
|
+
end
|
44
|
+
|
45
|
+
it "knows its public methods" do
|
46
|
+
@empty_result.methods(:public).should be_empty
|
47
|
+
@only_public.methods(:public).should == @public.sort
|
48
|
+
@only_protected.methods(:public).should be_empty
|
49
|
+
@only_private.methods(:public).should be_empty
|
50
|
+
@mixed_result.methods(:public).should == @public.sort
|
51
|
+
end
|
52
|
+
|
53
|
+
it "knows its protected methods" do
|
54
|
+
@empty_result.methods(:protected).should be_empty
|
55
|
+
@only_public.methods(:protected).should be_empty
|
56
|
+
@only_protected.methods(:protected).should == @protected.sort
|
57
|
+
@only_private.methods(:protected).should be_empty
|
58
|
+
@mixed_result.methods(:protected).should == @protected.sort
|
59
|
+
end
|
60
|
+
|
61
|
+
it "knows its private methods" do
|
62
|
+
@empty_result.methods(:private).should be_empty
|
63
|
+
@only_public.methods(:private).should be_empty
|
64
|
+
@only_protected.methods(:private).should be_empty
|
65
|
+
@only_private.methods(:private).should == @private.sort
|
66
|
+
@mixed_result.methods(:private).should == @private.sort
|
67
|
+
end
|
68
|
+
|
69
|
+
it "raises an exception if given an unknown visibility" do
|
70
|
+
lambda do
|
71
|
+
@empty_result.methods(:foobar)
|
72
|
+
end.should raise_error(ArgumentError)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#has_methods?" do
|
77
|
+
it "knows if it has methods of any visibility" do
|
78
|
+
@empty_result.should_not have_methods
|
79
|
+
@only_public.should have_methods
|
80
|
+
@only_protected.should have_methods
|
81
|
+
@only_private.should have_methods
|
82
|
+
@mixed_result.should have_methods
|
83
|
+
end
|
84
|
+
|
85
|
+
it "knows if it has methods of visibility :all" do
|
86
|
+
@empty_result.should_not have_methods(:all)
|
87
|
+
@only_public.should have_methods(:all)
|
88
|
+
@only_protected.should have_methods(:all)
|
89
|
+
@only_private.should have_methods(:all)
|
90
|
+
@mixed_result.should have_methods(:all)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "knows if it has methods of visibility :public" do
|
94
|
+
@empty_result.should_not have_methods(:public)
|
95
|
+
@only_public.should have_methods(:public)
|
96
|
+
@only_protected.should_not have_methods(:public)
|
97
|
+
@only_private.should_not have_methods(:public)
|
98
|
+
@mixed_result.should have_methods(:public)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "knows if it has methods of visibility :protected" do
|
102
|
+
@empty_result.should_not have_methods(:protected)
|
103
|
+
@only_public.should_not have_methods(:protected)
|
104
|
+
@only_protected.should have_methods(:protected)
|
105
|
+
@only_private.should_not have_methods(:protected)
|
106
|
+
@mixed_result.should have_methods(:protected)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "knows if it has methods of visibility :private" do
|
110
|
+
@empty_result.should_not have_methods(:private)
|
111
|
+
@only_public.should_not have_methods(:private)
|
112
|
+
@only_protected.should_not have_methods(:private)
|
113
|
+
@only_private.should have_methods(:private)
|
114
|
+
@mixed_result.should have_methods(:private)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#narrow_to_methods_matching!" do
|
119
|
+
it "removes all methods not matching the given regex" do
|
120
|
+
rx = /foo/
|
121
|
+
@mixed_result.methods(:all).select {|meth| meth !~ rx}.should_not be_empty
|
122
|
+
@mixed_result.narrow_to_methods_matching!(rx)
|
123
|
+
@mixed_result.methods(:all).select {|meth| meth !~ rx}.should be_empty
|
124
|
+
end
|
125
|
+
|
126
|
+
it "never removes method_missing" do
|
127
|
+
@private << "method_missing"
|
128
|
+
rx = /foo/
|
129
|
+
@mixed_result.methods(:all).select {|meth| meth !~ rx}.should_not be_empty
|
130
|
+
@mixed_result.narrow_to_methods_matching!(rx)
|
131
|
+
@mixed_result.methods(:all).select {|meth| meth !~ rx}.should be_include("method_missing")
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "#==" do
|
136
|
+
it "is equal if both have the same methods and object" do
|
137
|
+
@mixed_result.should == MethodLister::FindResult.new(
|
138
|
+
@mixed_result.object,
|
139
|
+
:public => @mixed_result.methods(:public),
|
140
|
+
:protected => @mixed_result.methods(:protected),
|
141
|
+
:private => @mixed_result.methods(:private)
|
142
|
+
)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "is not equal if both have same methods but different objects" do
|
146
|
+
@mixed_result.should_not == MethodLister::FindResult.new(
|
147
|
+
Object.new,
|
148
|
+
:public => @mixed_result.methods(:public),
|
149
|
+
:protected => @mixed_result.methods(:protected),
|
150
|
+
:private => @mixed_result.methods(:private)
|
151
|
+
)
|
152
|
+
end
|
153
|
+
|
154
|
+
it "is not equal if both have the same object but different methods" do
|
155
|
+
@mixed_result.should_not == MethodLister::FindResult.new(
|
156
|
+
@mixed_result.object,
|
157
|
+
:public => ["something_else"]
|
158
|
+
)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
data/spec/finder_spec.rb
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
2
|
+
|
3
|
+
describe MethodLister::Finder do
|
4
|
+
before do
|
5
|
+
@finder = MethodLister::Finder.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#find_all" do
|
9
|
+
before do
|
10
|
+
class UltraKlass; def method_ultra; end; end
|
11
|
+
class SuperKlass < UltraKlass; end
|
12
|
+
class Klass < SuperKlass; def method_klass; end; end
|
13
|
+
@object = Klass.new
|
14
|
+
end
|
15
|
+
|
16
|
+
after do
|
17
|
+
Object.send(:remove_const, :Klass)
|
18
|
+
Object.send(:remove_const, :SuperKlass)
|
19
|
+
Object.send(:remove_const, :UltraKlass)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not filter results which have no methods" do
|
23
|
+
@finder.find_all(@object).should list_methods([
|
24
|
+
result(@object, :public => []),
|
25
|
+
result(Klass, :public => ["method_klass"]),
|
26
|
+
result(SuperKlass, :public => []),
|
27
|
+
result(UltraKlass, :public => ["method_ultra"])
|
28
|
+
])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#ls" do
|
33
|
+
it "should have more than one scenario" do
|
34
|
+
all_find_scenarios.should_not be_empty
|
35
|
+
end
|
36
|
+
|
37
|
+
all_find_scenarios.each do |scenario|
|
38
|
+
it "finds method according to scenario #{scenario.name}" do
|
39
|
+
scenario.setup!
|
40
|
+
@finder.ls(scenario.object).should list_methods(scenario.expected)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "auxillary methods" do
|
46
|
+
before do
|
47
|
+
@object = Object.new
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "with results" do
|
51
|
+
before do
|
52
|
+
stub(@finder).ls(@object) do
|
53
|
+
[
|
54
|
+
result(@object, :public => ["bar", "foo", "foo2"]),
|
55
|
+
result(Object, :public => ["foo", "foo3", "qux"]),
|
56
|
+
result(Kernel, :public => ["baz"]),
|
57
|
+
]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#grep" do
|
62
|
+
it "narrows down the find results based on the given regex" do
|
63
|
+
@finder.grep(/foo/, @object).should == [
|
64
|
+
result(@object, :public => ["foo", "foo2"]),
|
65
|
+
result(Object, :public => ["foo", "foo3"])
|
66
|
+
]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#which" do
|
71
|
+
it "attempts to regex escape the method name passed in" do
|
72
|
+
mock(Regexp).escape("foo").twice
|
73
|
+
@finder.which("foo", @object)
|
74
|
+
@finder.which(:foo, @object)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns the classes and objects hold the method" do
|
78
|
+
@finder.which("foo", @object).should == [
|
79
|
+
result(@object, :public => ["foo"]),
|
80
|
+
result(Object, :public => ["foo"])
|
81
|
+
]
|
82
|
+
|
83
|
+
@finder.which("foo3", @object).should == [
|
84
|
+
result(Object, :public => ["foo3"])
|
85
|
+
]
|
86
|
+
end
|
87
|
+
|
88
|
+
it "works correctly with symbols" do
|
89
|
+
@finder.which(:foo, @object).should == [
|
90
|
+
result(@object, :public => ["foo"]),
|
91
|
+
result(Object, :public => ["foo"])
|
92
|
+
]
|
93
|
+
|
94
|
+
@finder.which(:foo3, @object).should == [
|
95
|
+
result(Object, :public => ["foo3"])
|
96
|
+
]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "without results" do
|
102
|
+
before do
|
103
|
+
stub(@finder).ls(@object) { Array.new }
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#grep" do
|
107
|
+
it "returns the empty list if nothing can be found" do
|
108
|
+
@finder.grep(/I_MATCH_NOTHING/, @object).should == []
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "#which" do
|
113
|
+
it "returns the empty list if nothing can be found" do
|
114
|
+
@finder.which("I_MATCH_NOTHING", @object).should == []
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "with results containing method_missing" do
|
120
|
+
before do
|
121
|
+
stub(@finder).ls(@object) do
|
122
|
+
[
|
123
|
+
result(Array, :public => ["sort1", "sort2"]),
|
124
|
+
result(Object, :public => ["method_missing", "sort3"])
|
125
|
+
]
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "#grep" do
|
130
|
+
it "returns method_missing its list of results if found" do
|
131
|
+
@finder.grep(/I_MATCH_NOTHING/, @object).should == [
|
132
|
+
result(Object, :public => ["method_missing"]),
|
133
|
+
]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "#which" do
|
138
|
+
it "returns method_missing its list of results if found" do
|
139
|
+
@finder.which("I_MATCH_NOTHING", @object).should == [
|
140
|
+
result(Object, :public => ["method_missing"]),
|
141
|
+
]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module MethodListerMatchers
|
2
|
+
def list_methods(method_list)
|
3
|
+
ListMethods.new(method_list)
|
4
|
+
end
|
5
|
+
|
6
|
+
class ListMethods
|
7
|
+
def initialize(expected)
|
8
|
+
@expected = expected
|
9
|
+
end
|
10
|
+
|
11
|
+
def matches?(target)
|
12
|
+
@target = target.slice(0, @expected.length) # Trim extras from Rspec, Ruby, etc.
|
13
|
+
@target == @expected
|
14
|
+
end
|
15
|
+
|
16
|
+
def failure_message
|
17
|
+
str, n = "", 0
|
18
|
+
@expected.zip(@target).each do |expected, got|
|
19
|
+
if expected != got
|
20
|
+
str += <<-MESSAGE
|
21
|
+
Expected[#{n}]:
|
22
|
+
#{expected.inspect}
|
23
|
+
Got[#{n}]:
|
24
|
+
#{got.inspect}
|
25
|
+
MESSAGE
|
26
|
+
end
|
27
|
+
n += 1
|
28
|
+
end
|
29
|
+
str
|
30
|
+
end
|
31
|
+
|
32
|
+
def negative_failure_message
|
33
|
+
"Did not expect these findings: #{@expected.inspect}"
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def render_find_results(results)
|
39
|
+
results.map {|result| " #{result.inspect}" }.join("\n")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
def all_find_scenarios
|
2
|
+
FindScenario.load_all
|
3
|
+
end
|
4
|
+
|
5
|
+
class FindScenario
|
6
|
+
attr_reader :name, :object, :expected
|
7
|
+
|
8
|
+
def initialize(filename)
|
9
|
+
@filename = filename
|
10
|
+
@name = File.basename(@filename).gsub(/\.rb$/, "")
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup!
|
14
|
+
FindScenarioNameSpace.reset!
|
15
|
+
load @filename
|
16
|
+
@object = FindScenarioNameSpace.object
|
17
|
+
@expected = FindScenarioNameSpace.expected
|
18
|
+
end
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def load_all
|
22
|
+
Dir["#{scenario_dir}/*.rb"].map {|file| new(file)}
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def scenario_dir
|
28
|
+
File.expand_path(File.dirname(__FILE__) + "/../../scenarios")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module FindScenarioNameSpace
|
34
|
+
class << self
|
35
|
+
attr_reader :object, :expected
|
36
|
+
|
37
|
+
def reset!
|
38
|
+
constants.each do |constant|
|
39
|
+
remove_const(constant)
|
40
|
+
end
|
41
|
+
@object = nil
|
42
|
+
@expected = nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/spec/rcov.opts
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
2
|
+
|
3
|
+
describe "Method Lister Ruby Extensions" do
|
4
|
+
describe Kernel do
|
5
|
+
before do
|
6
|
+
mock.instance_of(MethodLister::ColorDisplay).display(:mcguffin, anything) { nil }
|
7
|
+
@finder_class_double = mock.instance_of(MethodLister::Finder)
|
8
|
+
@object = Object.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#ls" do
|
12
|
+
before do
|
13
|
+
@finder_class_double.ls(@object) { :mcguffin }
|
14
|
+
end
|
15
|
+
|
16
|
+
it "works correctly with the ls command" do
|
17
|
+
@object.ls
|
18
|
+
end
|
19
|
+
|
20
|
+
it "works correctly with the mls command" do
|
21
|
+
@object.mls
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#grep" do
|
26
|
+
before do
|
27
|
+
@rx = /object_id/
|
28
|
+
@finder_class_double.grep(@rx, @object) { :mcguffin }
|
29
|
+
end
|
30
|
+
|
31
|
+
it "works correctly with the grep command" do
|
32
|
+
@object.grep @rx
|
33
|
+
end
|
34
|
+
|
35
|
+
it "works correctly with the mgrep command" do
|
36
|
+
@object.mgrep @rx
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#which" do
|
41
|
+
before do
|
42
|
+
@method = :object_id
|
43
|
+
@finder_class_double.which(@method, @object) { :mcguffin }
|
44
|
+
end
|
45
|
+
|
46
|
+
it "works correctly with the which command" do
|
47
|
+
@object.which @method
|
48
|
+
end
|
49
|
+
|
50
|
+
it "works correctly with the mwhich command" do
|
51
|
+
@object.mwhich @method
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
class SuperKlass
|
3
|
+
def method_from_superclass
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class Klass < SuperKlass
|
8
|
+
def method_from_class
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
@object = Klass.new
|
13
|
+
@expected = [
|
14
|
+
result(Klass, :public => ["method_from_class"]),
|
15
|
+
result(SuperKlass, :public => ["method_from_superclass"])
|
16
|
+
]
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
module MyModule
|
3
|
+
def method_from_module
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class SuperKlass
|
8
|
+
def method_from_superclass
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Klass < SuperKlass
|
13
|
+
include MyModule
|
14
|
+
|
15
|
+
def method_from_class
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
@object = Klass.new
|
20
|
+
@expected = [
|
21
|
+
result(Klass, :public => ["method_from_class"]),
|
22
|
+
result(MyModule, :public => ["method_from_module"]),
|
23
|
+
result(SuperKlass, :public => ["method_from_superclass"])
|
24
|
+
]
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
class Klass
|
3
|
+
def method_from_class
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
@object = Klass.new
|
8
|
+
|
9
|
+
class << @object
|
10
|
+
def method_from_eigenclass
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
@expected = [
|
15
|
+
result(@object, :public => ["method_from_eigenclass"]),
|
16
|
+
result(Klass, :public => ["method_from_class"]),
|
17
|
+
]
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
module MyModule
|
3
|
+
def method_from_module
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class Klass
|
8
|
+
def method_from_class
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
@object = Klass.new
|
13
|
+
|
14
|
+
class << @object
|
15
|
+
include MyModule
|
16
|
+
|
17
|
+
def method_from_eigenclass
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
@expected = [
|
22
|
+
result(@object, :public => ["method_from_eigenclass"]),
|
23
|
+
result(MyModule, :public => ["method_from_module"]),
|
24
|
+
result(Klass, :public => ["method_from_class"]),
|
25
|
+
]
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
class UltraKlass
|
3
|
+
def method_from_ultraclass
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
class SuperKlass < UltraKlass
|
8
|
+
end
|
9
|
+
|
10
|
+
class Klass < SuperKlass
|
11
|
+
def method_from_klass
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
@object = Klass.new
|
16
|
+
@expected = [
|
17
|
+
result(Klass, :public => ["method_from_klass"]),
|
18
|
+
result(UltraKlass, :public => ["method_from_ultraclass"]),
|
19
|
+
]
|
20
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
module MyModule
|
3
|
+
public; def module_public; end; def common_public; end
|
4
|
+
protected; def module_protected; end; def common_protected; end
|
5
|
+
private; def module_private; end; def common_private; end
|
6
|
+
end
|
7
|
+
|
8
|
+
class Klass
|
9
|
+
public; def klass_public; end; def common_public; end
|
10
|
+
protected; def klass_protected; end; def common_protected; end
|
11
|
+
private; def klass_private; end; def common_private; end
|
12
|
+
end
|
13
|
+
|
14
|
+
@object = Klass.new
|
15
|
+
|
16
|
+
class << @object
|
17
|
+
include MyModule
|
18
|
+
|
19
|
+
public; def eigen_public; end; def common_public; end
|
20
|
+
protected; def eigen_protected; end; def common_protected; end
|
21
|
+
private; def eigen_private; end; def common_private; end
|
22
|
+
end
|
23
|
+
|
24
|
+
@expected = [
|
25
|
+
# The commented out lines is the desired result, but can't make it work.
|
26
|
+
# result(@object, :public => ["eigen_public", "common_public" ],
|
27
|
+
# :protected => ["eigen_protected", "common_protected"],
|
28
|
+
# :private => ["eigen_private", "common_private" ]),
|
29
|
+
result(@object, :public => ["eigen_public"],
|
30
|
+
:protected => ["eigen_protected"],
|
31
|
+
:private => ["eigen_private"]),
|
32
|
+
result(MyModule, :public => ["module_public", "common_public" ],
|
33
|
+
:protected => ["module_protected", "common_protected"],
|
34
|
+
:private => ["module_private", "common_private" ]),
|
35
|
+
result(Klass, :public => ["klass_public", "common_public" ],
|
36
|
+
:protected => ["klass_protected", "common_protected"],
|
37
|
+
:private => ["klass_private", "common_private" ])
|
38
|
+
]
|
39
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
class K1;
|
3
|
+
def method_k1; end;
|
4
|
+
def common_method; end;
|
5
|
+
end
|
6
|
+
|
7
|
+
class K2 < K1;
|
8
|
+
def method_k2; end;
|
9
|
+
def common_method; end;
|
10
|
+
end
|
11
|
+
|
12
|
+
class K3 < K2;
|
13
|
+
def method_k3; end;
|
14
|
+
def common_method; end;
|
15
|
+
end
|
16
|
+
|
17
|
+
class K4 < K3;
|
18
|
+
def method_k4; end;
|
19
|
+
def common_method; end;
|
20
|
+
end
|
21
|
+
|
22
|
+
class K5 < K4;
|
23
|
+
def method_k5; end;
|
24
|
+
def common_method; end;
|
25
|
+
end
|
26
|
+
|
27
|
+
@object = K5.new
|
28
|
+
@expected = [
|
29
|
+
result(K5, :public => ["common_method", "method_k5"]),
|
30
|
+
result(K4, :public => ["common_method", "method_k4"]),
|
31
|
+
result(K3, :public => ["common_method", "method_k3"]),
|
32
|
+
result(K2, :public => ["common_method", "method_k2"]),
|
33
|
+
result(K1, :public => ["common_method", "method_k1"])
|
34
|
+
]
|
35
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module FindScenarioNameSpace
|
2
|
+
module M1; def method_m1; end; end
|
3
|
+
module M2; def method_m2; end; end
|
4
|
+
module M3; def method_m3; end; end
|
5
|
+
module M4; def method_m4; end; end
|
6
|
+
module M5; def method_m5; end; end
|
7
|
+
class K1; include M1; def method_k1; end; end
|
8
|
+
class K2 < K1; include M2; def method_k2; end; end
|
9
|
+
class K3 < K2; include M3; def method_k3; end; end
|
10
|
+
class K4 < K3; include M4; def method_k4; end; end
|
11
|
+
class K5 < K4; include M5; def method_k5; end; end
|
12
|
+
|
13
|
+
@object = K5.new
|
14
|
+
@expected = [
|
15
|
+
result(K5, :public => ["method_k5"]),
|
16
|
+
result(M5, :public => ["method_m5"]),
|
17
|
+
result(K4, :public => ["method_k4"]),
|
18
|
+
result(M4, :public => ["method_m4"]),
|
19
|
+
result(K3, :public => ["method_k3"]),
|
20
|
+
result(M3, :public => ["method_m3"]),
|
21
|
+
result(K2, :public => ["method_k2"]),
|
22
|
+
result(M2, :public => ["method_m2"]),
|
23
|
+
result(K1, :public => ["method_k1"]),
|
24
|
+
result(M1, :public => ["method_m1"]),
|
25
|
+
]
|
26
|
+
end
|