mtrack 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|