mtrack 1.0.2 → 1.1.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/Gemfile +1 -1
- data/Guardfile +4 -2
- data/lib/mtrack/extension.rb +48 -0
- data/lib/mtrack/mixin.rb +20 -12
- data/lib/mtrack/version.rb +1 -1
- data/spec/{lib/.rubocop.yml → .rubocop.yml} +1 -1
- data/spec/lib/mtrack/mixin_spec.rb +40 -2
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4d96deb7df700e5f8bfa2ba688be09d7aa1073a
|
4
|
+
data.tar.gz: 927dded6ddd652b48bb95d59e4ea7971dbd084ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81679f5a7f76711e69250c4009ec6a752f9e90325db75d969c8ce967105294e754bdbef5feae328d554ffc03f259457f63da9a2540b0046a9838bfa1e40a3dd8
|
7
|
+
data.tar.gz: 6dd4234f6fe0efda95ea980dbaa903fe7a02963231815a0a25c9d9a53d935f1ceaae86b5b248e8aabfe346f6d6c6f48641e09d141ef4ea269830045b21e201dc
|
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -5,6 +5,8 @@ guard :rspec, :cmd => "rspec -fd" do
|
|
5
5
|
end
|
6
6
|
|
7
7
|
guard :rubocop do
|
8
|
-
watch(
|
9
|
-
watch(
|
8
|
+
watch(/^.+\.rb$/)
|
9
|
+
watch(/^(?:.+\/)?\.rubocop\.yml$/) {|m| File.dirname(m[0]) }
|
10
|
+
watch(/^(?:.+\/)?.+\.gemspec$/)
|
11
|
+
watch(/^(?:.+\/)?(?:Gem|Rake)file$/)
|
10
12
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module MTrack
|
2
|
+
##
|
3
|
+
# This module is extended by Mixin and all custom extensions of Mixin. You should not extend this module directly,
|
4
|
+
# instead simply include Mixin into your custom extension:
|
5
|
+
#
|
6
|
+
# module MyExtension
|
7
|
+
# include MTrack::Mixin
|
8
|
+
# # Define custom methods here.
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
# module M
|
12
|
+
# extend MyExtension
|
13
|
+
# # You can use MTrack's and MyExtension's methods here.
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# If you're overriding the +extended+ or +included+ methods in your custom extension always make sure to call +super+,
|
17
|
+
# so MTrack can be properly initialized.
|
18
|
+
module Extension
|
19
|
+
private
|
20
|
+
|
21
|
+
##
|
22
|
+
# call-seq:
|
23
|
+
# extended(submodule) => submodule
|
24
|
+
#
|
25
|
+
# Initializes a State variable on the Class or Module that extended Mixin.
|
26
|
+
#
|
27
|
+
# Returns passed +submodule+.
|
28
|
+
def extended(submodule)
|
29
|
+
super
|
30
|
+
submodule.instance_eval { @__mtrack__ ||= State.new }
|
31
|
+
submodule
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# call-seq:
|
36
|
+
# included(submodule) => submodule
|
37
|
+
#
|
38
|
+
# Initializes +submodule+ as a custom extension of Mixin. The new custom extension +submodule+ can then be extended
|
39
|
+
# by a Class or Module just like Mixin, or included further to generate other, more specific custom extensions.
|
40
|
+
#
|
41
|
+
# Returns passed +submodule+.
|
42
|
+
def included(submodule)
|
43
|
+
super
|
44
|
+
submodule.instance_eval { extend Extension }
|
45
|
+
submodule
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/mtrack/mixin.rb
CHANGED
@@ -1,23 +1,29 @@
|
|
1
|
+
require "mtrack/extension"
|
1
2
|
require "mtrack/state"
|
2
3
|
|
3
4
|
module MTrack
|
4
5
|
##
|
5
6
|
# This module provides the #track_methods method to Classes or Modules that
|
6
|
-
#
|
7
|
+
# extend it. It also enables the extended Class or Module to pass tracked
|
7
8
|
# methods to its subclasses and submodules.
|
8
9
|
module Mixin
|
10
|
+
extend Extension
|
11
|
+
|
9
12
|
class << self
|
10
13
|
private
|
11
14
|
|
12
15
|
##
|
13
16
|
# call-seq:
|
14
|
-
#
|
17
|
+
# init_heir(submodule, state) => submodule
|
15
18
|
#
|
16
|
-
#
|
19
|
+
# Sets +state+ as the super-state of +submodule+ (Class or Module).
|
17
20
|
#
|
18
21
|
# Returns passed +submodule+.
|
19
|
-
def
|
20
|
-
submodule.instance_eval
|
22
|
+
def init_heir(submodule, state)
|
23
|
+
submodule.instance_eval do
|
24
|
+
extend Mixin
|
25
|
+
@__mtrack__.add_super_state state
|
26
|
+
end
|
21
27
|
submodule
|
22
28
|
end
|
23
29
|
|
@@ -102,12 +108,8 @@ module MTrack
|
|
102
108
|
#
|
103
109
|
# Returns passed +submodule+.
|
104
110
|
def included(submodule)
|
105
|
-
|
106
|
-
|
107
|
-
extend Mixin
|
108
|
-
@__mtrack__.add_super_state state
|
109
|
-
end
|
110
|
-
submodule
|
111
|
+
super
|
112
|
+
Mixin.send(:init_heir, submodule, @__mtrack__)
|
111
113
|
end
|
112
114
|
|
113
115
|
##
|
@@ -118,7 +120,10 @@ module MTrack
|
|
118
120
|
# inherited from the current Class.
|
119
121
|
#
|
120
122
|
# Returns passed +submodule+.
|
121
|
-
|
123
|
+
def inherited(submodule)
|
124
|
+
super
|
125
|
+
Mixin.send(:init_heir, submodule, @__mtrack__)
|
126
|
+
end
|
122
127
|
|
123
128
|
##
|
124
129
|
# call-seq:
|
@@ -129,6 +134,7 @@ module MTrack
|
|
129
134
|
#
|
130
135
|
# Returns passed +name+.
|
131
136
|
def method_added(name)
|
137
|
+
super
|
132
138
|
@__mtrack__.delete_undefined name
|
133
139
|
end
|
134
140
|
|
@@ -140,6 +146,7 @@ module MTrack
|
|
140
146
|
#
|
141
147
|
# Returns passed +name+.
|
142
148
|
def method_removed(name)
|
149
|
+
super
|
143
150
|
@__mtrack__.delete_tracked name
|
144
151
|
end
|
145
152
|
|
@@ -153,6 +160,7 @@ module MTrack
|
|
153
160
|
#
|
154
161
|
# Returns passed +name+.
|
155
162
|
def method_undefined(name)
|
163
|
+
super
|
156
164
|
@__mtrack__.delete_tracked name
|
157
165
|
@__mtrack__.add_undefined name
|
158
166
|
end
|
data/lib/mtrack/version.rb
CHANGED
@@ -24,10 +24,39 @@ describe MTrack::Mixin do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
describe "hierarchy" do
|
27
|
+
let(:base_extension_1) do
|
28
|
+
Module.new.tap do |m|
|
29
|
+
m.module_eval do
|
30
|
+
include MTrack::Mixin
|
31
|
+
define_method :base_extension_1_meth, METHOD_DEFINITION
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
let(:base_extension_2) do
|
37
|
+
Module.new.tap do |m|
|
38
|
+
m.module_eval do
|
39
|
+
include MTrack::Mixin
|
40
|
+
define_method :base_extension_2_meth, METHOD_DEFINITION
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
let(:sub_extension) do
|
46
|
+
be = base_extension_1
|
47
|
+
Module.new.tap do |m|
|
48
|
+
m.module_eval do
|
49
|
+
include be
|
50
|
+
define_method :sub_extension_meth, METHOD_DEFINITION
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
27
55
|
let(:base_module_1) do
|
56
|
+
ext = sub_extension
|
28
57
|
Module.new.tap do |m|
|
29
58
|
m.module_eval do
|
30
|
-
extend
|
59
|
+
extend ext
|
31
60
|
define_method :unt_1, METHOD_DEFINITION
|
32
61
|
track_methods { define_method :meth, METHOD_DEFINITION }
|
33
62
|
track_methods :numbers do
|
@@ -40,9 +69,10 @@ describe MTrack::Mixin do
|
|
40
69
|
end
|
41
70
|
|
42
71
|
let(:base_module_2) do
|
72
|
+
ext = base_extension_2
|
43
73
|
Module.new.tap do |m|
|
44
74
|
m.module_eval do
|
45
|
-
extend
|
75
|
+
extend ext
|
46
76
|
define_method :unt_2, METHOD_DEFINITION
|
47
77
|
track_methods { define_method :meth, METHOD_DEFINITION }
|
48
78
|
track_methods :numbers do
|
@@ -159,6 +189,10 @@ describe MTrack::Mixin do
|
|
159
189
|
subject.module_eval { define_method :meth, METHOD_DEFINITION }
|
160
190
|
expect(subject.tracked_methods).to be_empty
|
161
191
|
end
|
192
|
+
|
193
|
+
it "has custom extensions as ancestors" do
|
194
|
+
expect(subject.singleton_methods.map(&:to_sym)).to include(:base_extension_1_meth, :sub_extension_meth)
|
195
|
+
end
|
162
196
|
end
|
163
197
|
|
164
198
|
context "base module 2" do
|
@@ -183,6 +217,10 @@ describe MTrack::Mixin do
|
|
183
217
|
subject.module_eval { define_method :meth, METHOD_DEFINITION }
|
184
218
|
expect(subject.tracked_methods).to be_empty
|
185
219
|
end
|
220
|
+
|
221
|
+
it "has custom extensions as ancestors" do
|
222
|
+
expect(subject.singleton_methods.map(&:to_sym)).to include(:base_extension_2_meth)
|
223
|
+
end
|
186
224
|
end
|
187
225
|
|
188
226
|
context "base module 3" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mtrack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel de Oliveira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: MTrack extends the functionality of modules and classes and enables them
|
14
14
|
to define public methods within groups. These methods can then be queried back even
|
@@ -29,12 +29,13 @@ files:
|
|
29
29
|
- README.md
|
30
30
|
- Rakefile
|
31
31
|
- lib/mtrack.rb
|
32
|
+
- lib/mtrack/extension.rb
|
32
33
|
- lib/mtrack/mixin.rb
|
33
34
|
- lib/mtrack/state.rb
|
34
35
|
- lib/mtrack/state/group.rb
|
35
36
|
- lib/mtrack/version.rb
|
36
37
|
- mtrack.gemspec
|
37
|
-
- spec
|
38
|
+
- spec/.rubocop.yml
|
38
39
|
- spec/lib/mtrack/mixin_spec.rb
|
39
40
|
- spec/lib/mtrack/state/group_spec.rb
|
40
41
|
- spec/lib/mtrack/state_spec.rb
|
@@ -67,7 +68,7 @@ signing_key:
|
|
67
68
|
specification_version: 4
|
68
69
|
summary: Group and track methods on classes and modules.
|
69
70
|
test_files:
|
70
|
-
- spec
|
71
|
+
- spec/.rubocop.yml
|
71
72
|
- spec/lib/mtrack/mixin_spec.rb
|
72
73
|
- spec/lib/mtrack/state/group_spec.rb
|
73
74
|
- spec/lib/mtrack/state_spec.rb
|