super_module 1.1.1 → 1.2.0
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.
- checksums.yaml +4 -4
- data/README.md +34 -87
- data/VERSION +1 -1
- data/examples/reddit-readers/banister/foo.rb +1 -2
- data/lib/super_module.rb +41 -26
- data/lib/super_module/v1.rb +37 -0
- data/lib/super_module/v1/module_body_method_call_recorder.rb +42 -0
- data/lib/super_module/v1/singleton_method_definition_store.rb +106 -0
- data/spec/lib/super_module_spec.rb +159 -145
- data/spec/support/baz.rb +1 -3
- data/spec/support/v1.rb +6 -0
- data/spec/support/v1/bar.rb +51 -0
- data/spec/support/v1/baz.rb +28 -0
- data/spec/support/v1/fake_active_model.rb +16 -0
- data/spec/support/v1/foo.rb +87 -0
- data/spec/support/v2.rb +6 -0
- data/spec/support/v2/bar.rb +52 -0
- data/spec/support/v2/baz.rb +27 -0
- data/spec/support/v2/fake_active_model.rb +14 -0
- data/spec/support/v2/foo.rb +87 -0
- data/spec/support/v2_alt.rb +6 -0
- data/spec/support/v2_alt/bar.rb +52 -0
- data/spec/support/v2_alt/baz.rb +27 -0
- data/spec/support/v2_alt/fake_active_model.rb +14 -0
- data/spec/support/v2_alt/foo.rb +87 -0
- data/super_module.gemspec +21 -6
- metadata +20 -5
- data/lib/super_module/module_body_method_call_recorder.rb +0 -40
- data/lib/super_module/singleton_method_definition_store.rb +0 -102
- data/spec/support/support.rb +0 -4
@@ -0,0 +1,16 @@
|
|
1
|
+
# Uses CRLF for line breaks to provide a test case for having SuperModule work with it
|
2
|
+
# This is done to test support for Windows Ruby files, which usually use CRLF for line breaks
|
3
|
+
module Support::V1::FakeActiveModel
|
4
|
+
|
5
|
+
include SuperModule
|
6
|
+
|
7
|
+
def self.validates(attribute, options)
|
8
|
+
validations << [attribute, options]
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.validations
|
12
|
+
@validations ||= []
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Support::V1::Foo
|
2
|
+
include SuperModule
|
3
|
+
include Support::V1::FakeActiveModel
|
4
|
+
validates 'foo', {:presence => true}
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def foo_class_self
|
8
|
+
'self.foo_class_self'
|
9
|
+
end
|
10
|
+
|
11
|
+
def foo_class_self_define_method; 'self.foo_class_self_define_method'; end
|
12
|
+
|
13
|
+
def foo_private_declaration_follow_up
|
14
|
+
'self.foo_private_declaration_follow_up'
|
15
|
+
end
|
16
|
+
private :foo_private_declaration_follow_up
|
17
|
+
|
18
|
+
def foo_protected_declaration_follow_up
|
19
|
+
'self.foo_protected_declaration_follow_up'
|
20
|
+
end
|
21
|
+
protected :foo_protected_declaration_follow_up
|
22
|
+
|
23
|
+
private
|
24
|
+
def foo_private
|
25
|
+
'self.foo_private'
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def foo_protected
|
30
|
+
'self.foo_protected'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.meh
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.foo
|
40
|
+
'self.foo'
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.foo_one_line; 'self.foo_one_line'; end
|
44
|
+
|
45
|
+
def self.foo_single_param(param1)
|
46
|
+
"self.foo(#{param1})"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.foo_multi_params(param1, param2, param3)
|
50
|
+
"self.foo(#{param1},#{param2},#{param3})"
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.foo_block(&formatter)
|
54
|
+
formatter.call('self.foo')
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.foo_single_param_block(param1, &formatter)
|
58
|
+
formatter.call('self.foo', param1)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.foo_multi_params_block(param1, param2, param3, &formatter)
|
62
|
+
formatter.call('self.foo', param1, param2, param3)
|
63
|
+
end
|
64
|
+
|
65
|
+
public
|
66
|
+
|
67
|
+
def self.empty
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.empty_one_empty_line
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.empty_with_comment
|
75
|
+
# no op
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.empty_one_line_definition; end
|
79
|
+
|
80
|
+
def self.empty_one_line_definition_with_spaces; end
|
81
|
+
|
82
|
+
def foo
|
83
|
+
'foo'
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
data/spec/support/v2.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Support::V2
|
4
|
+
super_module :Bar do
|
5
|
+
include Foo
|
6
|
+
include Comparable
|
7
|
+
validates 'bar', {:presence => true}
|
8
|
+
attr_reader :created_at
|
9
|
+
|
10
|
+
# Defines singleton methods via class << self to provide as a test case for SuperModule
|
11
|
+
class << self
|
12
|
+
include Forwardable
|
13
|
+
|
14
|
+
def barrable
|
15
|
+
@barrable
|
16
|
+
end
|
17
|
+
|
18
|
+
def barrable=(value)
|
19
|
+
@barrable = value
|
20
|
+
end
|
21
|
+
|
22
|
+
def make_barrable
|
23
|
+
self.barrable = true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
make_barrable
|
28
|
+
def_delegators :@bar, :length
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@bar = bar
|
32
|
+
@created_at = Time.now.to_f
|
33
|
+
end
|
34
|
+
|
35
|
+
def bar
|
36
|
+
'bar'
|
37
|
+
end
|
38
|
+
|
39
|
+
# Defines singleton method via a form of eval (class_eval) to provide as a test case for SuperModule
|
40
|
+
class_eval do
|
41
|
+
def self.bar
|
42
|
+
'self.bar'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def <=>(other)
|
47
|
+
created_at <=> other.created_at
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
super_module 'Support::V2::Baz' do
|
2
|
+
include Support::V2::Bar
|
3
|
+
make_barrable
|
4
|
+
validates 'baz', {:presence => true}
|
5
|
+
attr_reader :baz_factor
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def baz
|
9
|
+
'self.baz'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(baz_factor)
|
14
|
+
super()
|
15
|
+
@baz_factor = baz_factor
|
16
|
+
end
|
17
|
+
|
18
|
+
def baz
|
19
|
+
'baz'
|
20
|
+
end
|
21
|
+
|
22
|
+
def <=>(other)
|
23
|
+
baz_factor <=> other.baz_factor
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Uses CRLF for line breaks to provide a test case for having SuperModule work with it
|
2
|
+
# This is done to test support for Windows Ruby files, which usually use CRLF for line breaks
|
3
|
+
super_module 'Support::V2::FakeActiveModel' do
|
4
|
+
|
5
|
+
def self.validates(attribute, options)
|
6
|
+
validations << [attribute, options]
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.validations
|
10
|
+
@validations ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Support
|
2
|
+
super_module 'V2::Foo' do
|
3
|
+
include V2::FakeActiveModel
|
4
|
+
validates 'foo', {:presence => true}
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def foo_class_self
|
8
|
+
'self.foo_class_self'
|
9
|
+
end
|
10
|
+
|
11
|
+
def foo_class_self_define_method; 'self.foo_class_self_define_method'; end
|
12
|
+
|
13
|
+
def foo_private_declaration_follow_up
|
14
|
+
'self.foo_private_declaration_follow_up'
|
15
|
+
end
|
16
|
+
private :foo_private_declaration_follow_up
|
17
|
+
|
18
|
+
def foo_protected_declaration_follow_up
|
19
|
+
'self.foo_protected_declaration_follow_up'
|
20
|
+
end
|
21
|
+
protected :foo_protected_declaration_follow_up
|
22
|
+
|
23
|
+
private
|
24
|
+
def foo_private
|
25
|
+
'self.foo_private'
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def foo_protected
|
30
|
+
'self.foo_protected'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.meh
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.foo
|
40
|
+
'self.foo'
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.foo_one_line; 'self.foo_one_line'; end
|
44
|
+
|
45
|
+
def self.foo_single_param(param1)
|
46
|
+
"self.foo(#{param1})"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.foo_multi_params(param1, param2, param3)
|
50
|
+
"self.foo(#{param1},#{param2},#{param3})"
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.foo_block(&formatter)
|
54
|
+
formatter.call('self.foo')
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.foo_single_param_block(param1, &formatter)
|
58
|
+
formatter.call('self.foo', param1)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.foo_multi_params_block(param1, param2, param3, &formatter)
|
62
|
+
formatter.call('self.foo', param1, param2, param3)
|
63
|
+
end
|
64
|
+
|
65
|
+
public
|
66
|
+
|
67
|
+
def self.empty
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.empty_one_empty_line
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.empty_with_comment
|
75
|
+
# no op
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.empty_one_line_definition; end
|
79
|
+
|
80
|
+
def self.empty_one_line_definition_with_spaces; end
|
81
|
+
|
82
|
+
def foo
|
83
|
+
'foo'
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
module Support::V2Alt
|
2
|
+
end
|
3
|
+
require File.join(File.dirname(__FILE__), 'v2_alt', 'fake_active_model')
|
4
|
+
require File.join(File.dirname(__FILE__), 'v2_alt', 'foo')
|
5
|
+
require File.join(File.dirname(__FILE__), 'v2_alt', 'bar')
|
6
|
+
require File.join(File.dirname(__FILE__), 'v2_alt', 'baz')
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Support::V2Alt
|
4
|
+
Bar = super_module do
|
5
|
+
include Foo
|
6
|
+
include Comparable
|
7
|
+
validates 'bar', {:presence => true}
|
8
|
+
attr_reader :created_at
|
9
|
+
|
10
|
+
# Defines singleton methods via class << self to provide as a test case for SuperModule
|
11
|
+
class << self
|
12
|
+
include Forwardable
|
13
|
+
|
14
|
+
def barrable
|
15
|
+
@barrable
|
16
|
+
end
|
17
|
+
|
18
|
+
def barrable=(value)
|
19
|
+
@barrable = value
|
20
|
+
end
|
21
|
+
|
22
|
+
def make_barrable
|
23
|
+
self.barrable = true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
make_barrable
|
28
|
+
def_delegators :@bar, :length
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@bar = bar
|
32
|
+
@created_at = Time.now.to_f
|
33
|
+
end
|
34
|
+
|
35
|
+
def bar
|
36
|
+
'bar'
|
37
|
+
end
|
38
|
+
|
39
|
+
# Defines singleton method via a form of eval (class_eval) to provide as a test case for SuperModule
|
40
|
+
class_eval do
|
41
|
+
def self.bar
|
42
|
+
'self.bar'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def <=>(other)
|
47
|
+
created_at <=> other.created_at
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Support::V2Alt::Baz = super_module do
|
2
|
+
include Support::V2::Bar
|
3
|
+
make_barrable
|
4
|
+
validates 'baz', {:presence => true}
|
5
|
+
attr_reader :baz_factor
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def baz
|
9
|
+
'self.baz'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(baz_factor)
|
14
|
+
super()
|
15
|
+
@baz_factor = baz_factor
|
16
|
+
end
|
17
|
+
|
18
|
+
def baz
|
19
|
+
'baz'
|
20
|
+
end
|
21
|
+
|
22
|
+
def <=>(other)
|
23
|
+
baz_factor <=> other.baz_factor
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Uses CRLF for line breaks to provide a test case for having SuperModule work with it
|
2
|
+
# This is done to test support for Windows Ruby files, which usually use CRLF for line breaks
|
3
|
+
Support::V2Alt::FakeActiveModel = super_module do
|
4
|
+
|
5
|
+
def self.validates(attribute, options)
|
6
|
+
validations << [attribute, options]
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.validations
|
10
|
+
@validations ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Support
|
2
|
+
V2Alt::Foo = super_module do
|
3
|
+
include V2::FakeActiveModel
|
4
|
+
validates 'foo', {:presence => true}
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def foo_class_self
|
8
|
+
'self.foo_class_self'
|
9
|
+
end
|
10
|
+
|
11
|
+
def foo_class_self_define_method; 'self.foo_class_self_define_method'; end
|
12
|
+
|
13
|
+
def foo_private_declaration_follow_up
|
14
|
+
'self.foo_private_declaration_follow_up'
|
15
|
+
end
|
16
|
+
private :foo_private_declaration_follow_up
|
17
|
+
|
18
|
+
def foo_protected_declaration_follow_up
|
19
|
+
'self.foo_protected_declaration_follow_up'
|
20
|
+
end
|
21
|
+
protected :foo_protected_declaration_follow_up
|
22
|
+
|
23
|
+
private
|
24
|
+
def foo_private
|
25
|
+
'self.foo_private'
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def foo_protected
|
30
|
+
'self.foo_protected'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.meh
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.foo
|
40
|
+
'self.foo'
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.foo_one_line; 'self.foo_one_line'; end
|
44
|
+
|
45
|
+
def self.foo_single_param(param1)
|
46
|
+
"self.foo(#{param1})"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.foo_multi_params(param1, param2, param3)
|
50
|
+
"self.foo(#{param1},#{param2},#{param3})"
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.foo_block(&formatter)
|
54
|
+
formatter.call('self.foo')
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.foo_single_param_block(param1, &formatter)
|
58
|
+
formatter.call('self.foo', param1)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.foo_multi_params_block(param1, param2, param3, &formatter)
|
62
|
+
formatter.call('self.foo', param1, param2, param3)
|
63
|
+
end
|
64
|
+
|
65
|
+
public
|
66
|
+
|
67
|
+
def self.empty
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.empty_one_empty_line
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.empty_with_comment
|
75
|
+
# no op
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.empty_one_line_definition; end
|
79
|
+
|
80
|
+
def self.empty_one_line_definition_with_spaces; end
|
81
|
+
|
82
|
+
def foo
|
83
|
+
'foo'
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|