super_module 1.4.0 → 1.4.1
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/CHANGELOG.md +4 -0
- data/README.md +2 -2
- data/VERSION +1 -1
- data/lib/super_module/v1.rb +9 -1
- data/lib/super_module/v1/module_body_method_call_recorder.rb +11 -1
- data/lib/super_module/v1/singleton_method_definition_store.rb +4 -1
- data/spec/lib/super_module_spec.rb +12 -6
- data/super_module.gemspec +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 192ef511f9395d9d90d7110a154602a4c62a47c5287cfaf9662456be09c84712
|
4
|
+
data.tar.gz: c4233e47af1355abff03878070f2916175aa1c399deb3a2e696b5fb18351dbef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1cd9c156c81762b287a4eb67b1b0b1bff5a27cd0325e3baef9b0fe2da7b77a3ecfb948c21ed99c295e6c020858c0c2c0a507dd8c9c232f80b6abc07b539cf17
|
7
|
+
data.tar.gz: 11973559c530a77b64f1d04bdd15964f73549f1b3a3f7fc93d694b503f35cfcacbdacbbf74602b2ea371b02d70137ab26b663756e7ab4d753bb19f0910df752f
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# <img src="https://raw.githubusercontent.com/AndyObtiva/super_module/master/SuperModule.jpg" alt="SuperModule" align="left" height="50" /> SuperModule 1.
|
1
|
+
# <img src="https://raw.githubusercontent.com/AndyObtiva/super_module/master/SuperModule.jpg" alt="SuperModule" align="left" height="50" /> SuperModule 1.4.0
|
2
2
|
[](http://badge.fury.io/rb/super_module)
|
3
3
|
[](https://travis-ci.org/AndyObtiva/super_module)
|
4
4
|
[](https://coveralls.io/r/AndyObtiva/super_module?branch=master)
|
@@ -104,7 +104,7 @@ In other words, [SuperModule](https://rubygems.org/gems/super_module) furthers R
|
|
104
104
|
|
105
105
|
<b>Using [Bundler](http://bundler.io/)</b>
|
106
106
|
|
107
|
-
Add the following to Gemfile: <pre>gem 'super_module', '1.4.
|
107
|
+
Add the following to Gemfile: <pre>gem 'super_module', '1.4.1'</pre>
|
108
108
|
|
109
109
|
And run the following command: <pre>bundle</pre>
|
110
110
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.1
|
data/lib/super_module/v1.rb
CHANGED
@@ -28,7 +28,15 @@ module SuperModule
|
|
28
28
|
def included(base)
|
29
29
|
__define_super_module_singleton_methods(base)
|
30
30
|
__invoke_module_body_method_calls(base)
|
31
|
-
super_module_included.each
|
31
|
+
super_module_included.each do |block|
|
32
|
+
self.__inside_super_module_included = true
|
33
|
+
base.__inside_super_module_included = true
|
34
|
+
block.binding.receiver.__inside_super_module_included = true
|
35
|
+
block.call(base)
|
36
|
+
block.binding.receiver.__inside_super_module_included = false
|
37
|
+
base.__inside_super_module_included = false
|
38
|
+
self.__inside_super_module_included = false
|
39
|
+
end
|
32
40
|
if base.ancestors.include?(SuperModule) && !base.is_a?(Class)
|
33
41
|
super_module_included.reverse.each do |block|
|
34
42
|
base.super_module_included.unshift(block)
|
@@ -5,6 +5,8 @@ module SuperModule
|
|
5
5
|
@__super_module_singleton_methods_excluded_from_call_recording ||= [
|
6
6
|
:__record_method_call,
|
7
7
|
:__method_signature,
|
8
|
+
:__inside_super_module_included?,
|
9
|
+
:__inside_super_module_included=,
|
8
10
|
]
|
9
11
|
end
|
10
12
|
|
@@ -17,10 +19,18 @@ module SuperModule
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def __record_method_call(method_name, *args, &block)
|
20
|
-
return if self.is_a?(Class)
|
22
|
+
return if self.is_a?(Class) || __inside_super_module_included?
|
21
23
|
__module_body_method_calls << [method_name, args, block]
|
22
24
|
end
|
23
25
|
|
26
|
+
def __inside_super_module_included?
|
27
|
+
@__inside_super_module_included
|
28
|
+
end
|
29
|
+
|
30
|
+
def __inside_super_module_included=(value)
|
31
|
+
@__inside_super_module_included = !!value
|
32
|
+
end
|
33
|
+
|
24
34
|
def __all_module_body_method_calls_in_definition_order
|
25
35
|
ancestor_module_body_method_calls = included_super_modules.map(&:__module_body_method_calls).flatten(1)
|
26
36
|
all_module_body_method_calls = __module_body_method_calls + ancestor_module_body_method_calls
|
@@ -54,11 +54,12 @@ module SuperModule
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def __singleton_method_definition_regex(method_name)
|
57
|
+
method_name = Regexp.escape(method_name.to_s)
|
57
58
|
/(public|protected|private)?(send)?[ \t(:"']*def(ine_method)?[ \t,:"']+(self\.)?#{method_name}\)?[ \tdo{(|]*([^\n)|;]*)?[ \t)|;]*/m
|
58
59
|
end
|
59
60
|
|
60
61
|
def __singleton_method_args(method_name, method_body)
|
61
|
-
|
62
|
+
method_body.match(__singleton_method_definition_regex(method_name)).to_a[5]
|
62
63
|
end
|
63
64
|
|
64
65
|
def __singleton_method_access_level(method_name)
|
@@ -106,6 +107,8 @@ module SuperModule
|
|
106
107
|
base.extend(SuperModule::V1::ModuleBodyMethodCallRecorder) unless base.is_a?(SuperModule::V1::ModuleBodyMethodCallRecorder)
|
107
108
|
base.singleton_method_added(:__method_signature)
|
108
109
|
base.singleton_method_added(:__record_method_call)
|
110
|
+
base.singleton_method_added(:__inside_super_module_included?)
|
111
|
+
base.singleton_method_added(:__inside_super_module_included=)
|
109
112
|
end
|
110
113
|
end
|
111
114
|
end
|
@@ -19,12 +19,6 @@ end
|
|
19
19
|
module V1::SummarizedActiveModel
|
20
20
|
include SuperModule
|
21
21
|
|
22
|
-
super_module_included do |klass|
|
23
|
-
if klass.name.split(/::/).last.start_with?('Fake')
|
24
|
-
klass.extend(FakeClassMethods1)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
22
|
module FakeClassMethods1
|
29
23
|
def fake_summary
|
30
24
|
'This is a fake summary.'
|
@@ -43,7 +37,19 @@ module V1::SummarizedActiveModel
|
|
43
37
|
def summary
|
44
38
|
validations.flatten.map(&:to_s).join("/")
|
45
39
|
end
|
40
|
+
|
41
|
+
def only_call_in_super_module_included
|
42
|
+
raise 'Error' unless self == ::V1::SummarizedActiveModel
|
43
|
+
end
|
46
44
|
end
|
45
|
+
|
46
|
+
super_module_included do |klass|
|
47
|
+
if klass.name.split(/::/).last.start_with?('Fake')
|
48
|
+
klass.extend(FakeClassMethods1)
|
49
|
+
end
|
50
|
+
only_call_in_super_module_included # should not get recorded for submodules/subclasses
|
51
|
+
end
|
52
|
+
|
47
53
|
end
|
48
54
|
|
49
55
|
module V1::ExtraSummarizedActiveModel
|
data/super_module.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: super_module 1.4.
|
5
|
+
# stub: super_module 1.4.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "super_module".freeze
|
9
|
-
s.version = "1.4.
|
9
|
+
s.version = "1.4.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Andy Maleh".freeze]
|
14
|
-
s.date = "2020-04-
|
14
|
+
s.date = "2020-04-23"
|
15
15
|
s.description = "SuperModule allows defining class methods and method invocations the same way a super class does without using def included(base). This also succeeds ActiveSupport::Concern by offering lighter syntax".freeze
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"CHANGELOG.md",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: super_module
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: method_source
|