mtrack 0.0.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c56fff84edc290d50cf54089be128d852f7cfc76
4
- data.tar.gz: d788599143e95cbdc6a9502efb90151959a89c79
3
+ metadata.gz: b7d5ea4aa7136ed160c80c7c6e466ad9bd1ac740
4
+ data.tar.gz: 550043786f96f7223b185eaf3fd127e9745116cb
5
5
  SHA512:
6
- metadata.gz: 58dbd4ecfb53098153e0bad97852c2dc39189378524a745b608e2cf4cc7fa6ac774cae170477f3a03d9be4a07455038b378c31783466ecf097a3e630c26aa728
7
- data.tar.gz: 66099b22080f61ccc56007faad78e65cd78c84e320a42803bbbd356965ae74e692fb5626d27096b84a2aa81774b4b7aabec20692590a2355c33b9b3adafed537
6
+ metadata.gz: bc1c526fe0e5936825f9756c9f4f5b8c7d4577c6c22b100796e01aaa32004c9c01694efde3d4dd5b0a7f8995f7bb77430bb16fa334021643f9b5a1a14f2a022b
7
+ data.tar.gz: d10f0fc4dcba69e9704d4806c3cdbc17b6cbae7dd9beb6ed9ff5b193f63e78ec24262cd10bc932c9ac47da5204a6a94d98094e9525da40a70608f9c7485cb246
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.2
1
+ 2.1.3
data/Gemfile CHANGED
@@ -2,15 +2,15 @@ source "https://rubygems.org"
2
2
  gemspec
3
3
 
4
4
  group :development do
5
- gem "byebug", "~> 3.4.0"
5
+ gem "byebug", "~> 3.5.1"
6
6
  gem "guard-rspec", "~> 4.3.1"
7
- gem "libnotify", "~> 0.8.3"
7
+ gem "libnotify", "~> 0.8.4"
8
8
  gem "pry", "~> 0.10.1"
9
9
  end
10
10
 
11
11
  group :development, :test do
12
- gem "codeclimate-test-reporter", "~> 0.4.0"
12
+ gem "codeclimate-test-reporter", "~> 0.4.1"
13
13
  gem "rake", "~> 10.3.2"
14
14
  gem "rspec", "~> 3.1.0"
15
- gem "simplecov", "~> 0.9.0"
15
+ gem "simplecov", "~> 0.9.1"
16
16
  end
data/README.md CHANGED
@@ -4,13 +4,12 @@
4
4
  [![Build Status](http://img.shields.io/travis/gdeoliveira/mtrack.svg)][travis]
5
5
  [![Code Climate](http://img.shields.io/codeclimate/github/gdeoliveira/mtrack.svg)][codeclimate]
6
6
  [![Test Coverage](http://img.shields.io/codeclimate/coverage/github/gdeoliveira/mtrack.svg)][codeclimate]
7
- [![Dependency Status](https://gemnasium.com/gdeoliveira/mtrack.svg)][gemnasium]
7
+ [![Dependency Status](http://img.shields.io/gemnasium/gdeoliveira/mtrack.svg)][gemnasium]
8
8
  [![Inline docs](http://inch-ci.org/github/gdeoliveira/mtrack.svg?branch=master)][inch-ci]
9
9
 
10
10
  [gem]: https://rubygems.org/gems/mtrack
11
11
  [travis]: http://travis-ci.org/gdeoliveira/mtrack
12
12
  [codeclimate]: https://codeclimate.com/github/gdeoliveira/mtrack
13
- [gemnasium]: https://gemnasium.com/gdeoliveira/mtrack
14
13
  [gemnasium]: https://gemnasium.com/gdeoliveira/mtrack#development-dependencies
15
14
  [inch-ci]: http://inch-ci.org/github/gdeoliveira/mtrack
16
15
 
@@ -42,6 +41,8 @@ To track a group of methods within a Module (or a Class).
42
41
  require "mtrack"
43
42
 
44
43
  module Stooges
44
+ extend MTrack::Mixin
45
+
45
46
  def shemp; end
46
47
 
47
48
  track_methods do
@@ -60,6 +61,8 @@ Methods can be grouped using an optional name.
60
61
  require "mtrack"
61
62
 
62
63
  module Numbers
64
+ extend MTrack::Mixin
65
+
63
66
  def zero; end
64
67
 
65
68
  track_methods :integers do
@@ -109,6 +112,8 @@ abstraction for the state machine.
109
112
  require "mtrack"
110
113
 
111
114
  class SimpleStateMachine
115
+ extend MTrack::Mixin
116
+
112
117
  class << self
113
118
  private
114
119
 
data/lib/mtrack.rb CHANGED
@@ -1,4 +1,2 @@
1
- require "mtrack/module_mixin"
1
+ require "mtrack/mixin"
2
2
  require "mtrack/version"
3
-
4
- Module.send(:include, MTrack::ModuleMixin)
@@ -0,0 +1,182 @@
1
+ require "mtrack/state"
2
+
3
+ module MTrack
4
+ ##
5
+ # This module provides the #track_methods method to Classes or Modules that
6
+ # mix it in. It also enables the extended Class or Module to pass tracked
7
+ # methods to its subclasses and submodules.
8
+ module Mixin
9
+ class << self
10
+ private
11
+
12
+ ##
13
+ # call-seq:
14
+ # extended(submodule) => submodule
15
+ #
16
+ # Initializes a State variable on the Class or Module that extended Mixin.
17
+ #
18
+ # Returns passed +submodule+.
19
+ def extended(submodule)
20
+ submodule.instance_eval { @__mtrack__ ||= State.new }
21
+ submodule
22
+ end
23
+
24
+ ##
25
+ # call-seq:
26
+ # newly_defined_methods(mod, old_methods) => set
27
+ #
28
+ # Calculates the difference between +mod+'s currently defined public
29
+ # methods and +old_methods+.
30
+ #
31
+ # Returns a set with the result.
32
+ def newly_defined_methods(mod, old_methods)
33
+ (mod.public_instance_methods(false) - old_methods).map(&:to_sym).to_set
34
+ end
35
+
36
+ ##
37
+ # call-seq:
38
+ # save_tracked_methods(mod, group_name, tracked) => nil
39
+ #
40
+ # Saves +tracked+ methods for +mod+ under a +group_name+.
41
+ #
42
+ # Returns a +nil+ value.
43
+ def save_tracked_methods(mod, group_name, tracked)
44
+ mod.instance_variable_get(:@__mtrack__)[group_name].merge_tracked tracked unless tracked.empty?
45
+ nil
46
+ end
47
+
48
+ ##
49
+ # call-seq:
50
+ # track_methods_for(mod, group_name) => set
51
+ # track_methods_for(mod, group_name) {|| ... } => set
52
+ #
53
+ # Sets up an MTrack::State instance for +mod+.
54
+ #
55
+ # If a block is provided all the methods defined within the block will be
56
+ # tracked under the +group_name+ parameter.
57
+ #
58
+ # Returns a set containing the methods that were defined within the block.
59
+ def track_methods_for(mod, group_name, &b)
60
+ old_methods = mod.public_instance_methods false
61
+
62
+ begin
63
+ mod.module_eval &b if block_given?
64
+ ensure
65
+ tracked = newly_defined_methods(mod, old_methods)
66
+ save_tracked_methods(mod, group_name, tracked)
67
+ end
68
+
69
+ tracked
70
+ end
71
+ end
72
+
73
+ public
74
+
75
+ ##
76
+ # call-seq:
77
+ # tracked_methods(group_name = nil) => set
78
+ #
79
+ # Returns a set containing the currently tracked methods for a +group_name+.
80
+ #
81
+ # class C
82
+ # extend MTrack::Mixin
83
+ # track_methods :my_group do
84
+ # def method_1; end
85
+ # def method_2; end
86
+ # end
87
+ # end
88
+ #
89
+ # C.tracked_methods :my_group #=> #<Set: {:method_1, :method_2}>
90
+ def tracked_methods(group_name = nil)
91
+ @__mtrack__.tracked group_name
92
+ end
93
+
94
+ private
95
+
96
+ ##
97
+ # call-seq:
98
+ # included(submodule) => submodule
99
+ #
100
+ # Sets this state as a super-state of the +submodule+ (Class or Module) that
101
+ # has included the current Module.
102
+ #
103
+ # Returns passed +submodule+.
104
+ def included(submodule)
105
+ state = @__mtrack__
106
+ submodule.instance_eval do
107
+ extend Mixin
108
+ @__mtrack__.add_super_state state
109
+ end
110
+ submodule
111
+ end
112
+
113
+ ##
114
+ # call-seq:
115
+ # inherited(submodule) => submodule
116
+ #
117
+ # Sets this state as a super-state of the +submodule+ (Class) that has
118
+ # inherited from the current Class.
119
+ #
120
+ # Returns passed +submodule+.
121
+ alias_method :inherited, :included
122
+
123
+ ##
124
+ # call-seq:
125
+ # method_added(name) => name
126
+ #
127
+ # Allows method +name+ to be displayed on #tracked_methods once again after
128
+ # being disabled by a call to #method_undefined.
129
+ #
130
+ # Returns passed +name+.
131
+ def method_added(name)
132
+ @__mtrack__.delete_undefined name
133
+ end
134
+
135
+ ##
136
+ # call-seq:
137
+ # method_removed(name) => name
138
+ #
139
+ # Stops tracking method +name+ in the current Class or Module.
140
+ #
141
+ # Returns passed +name+.
142
+ def method_removed(name)
143
+ @__mtrack__.delete_tracked name
144
+ end
145
+
146
+ ##
147
+ # call-seq:
148
+ # method_undefined(name) => name
149
+ #
150
+ # Stops tracking method +name+ in the current Class or Module and prevents
151
+ # homonymous methods tracked in super-states from being displayed as
152
+ # #tracked_methods.
153
+ #
154
+ # Returns passed +name+.
155
+ def method_undefined(name)
156
+ @__mtrack__.delete_tracked name
157
+ @__mtrack__.add_undefined name
158
+ end
159
+
160
+ ##
161
+ # call-seq:
162
+ # track_methods(group_name = nil) => set
163
+ # track_methods(group_name = nil) {|| ... } => set
164
+ #
165
+ # If a block is provided all the methods defined within the block will be
166
+ # tracked under the optional +group_name+ parameter.
167
+ #
168
+ # Returns a set containing the methods that were defined within the block.
169
+ #
170
+ # class C
171
+ # extend MTrack::Mixin
172
+ # track_methods do
173
+ # def method_1; end
174
+ # track_methods(:inner_group_1) { def method_2; end }
175
+ # def method_3; end
176
+ # end
177
+ # end #=> #<Set: {:method_1, :method_2, :method_3}>
178
+ def track_methods(group_name = nil, &b)
179
+ Mixin.send(:track_methods_for, self, group_name, &b)
180
+ end
181
+ end
182
+ end
@@ -4,6 +4,7 @@
4
4
  # even through a hierarchy of inclusion and/or inheritance.
5
5
  #
6
6
  # module M
7
+ # extend MTrack::Mixin
7
8
  # track_methods { def method_1; end }
8
9
  # end
9
10
  #
@@ -20,5 +21,5 @@
20
21
  module MTrack
21
22
 
22
23
  # Current version of MTrack.
23
- VERSION = "0.0.6"
24
+ VERSION = "1.0.0"
24
25
  end
@@ -0,0 +1,405 @@
1
+ require "spec_helper"
2
+
3
+ METHOD_DEFINITION = proc {}
4
+
5
+ describe MTrack::Mixin do
6
+ describe "#track_methods" do
7
+ it "is added after extending #{described_class}" do
8
+ mod = ::Module.new
9
+ expect(mod.private_methods.map(&:to_sym)).not_to include(:track_methods)
10
+ mod.module_eval { extend MTrack::Mixin }
11
+ expect(mod.private_methods.map(&:to_sym)).to include(:track_methods)
12
+ end
13
+
14
+ context "no block given" do
15
+ it "returns an empty set" do
16
+ mod = ::Module.new.module_eval do
17
+ extend MTrack::Mixin
18
+ track_methods :group
19
+ end
20
+ expect(mod).to be_a(Set)
21
+ expect(mod).to be_empty
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "hierarchy" do
27
+ let(:base_module_1) do
28
+ Module.new.tap do |m|
29
+ m.module_eval do
30
+ extend MTrack::Mixin
31
+ define_method :unt_1, METHOD_DEFINITION
32
+ track_methods { define_method :meth, METHOD_DEFINITION }
33
+ track_methods :numbers do
34
+ track_methods(:odd) { define_method :one, METHOD_DEFINITION }
35
+ track_methods(:even) { define_method :two, METHOD_DEFINITION }
36
+ end
37
+ define_method :unt_2, METHOD_DEFINITION
38
+ end
39
+ end
40
+ end
41
+
42
+ let(:base_module_2) do
43
+ Module.new.tap do |m|
44
+ m.module_eval do
45
+ extend MTrack::Mixin
46
+ define_method :unt_2, METHOD_DEFINITION
47
+ track_methods { define_method :meth, METHOD_DEFINITION }
48
+ track_methods :numbers do
49
+ track_methods(:even) { define_method :two, METHOD_DEFINITION }
50
+ track_methods(:odd) { define_method :three, METHOD_DEFINITION }
51
+ end
52
+ define_method :unt_3, METHOD_DEFINITION
53
+ end
54
+ end
55
+ end
56
+
57
+ let(:base_module_3) do
58
+ Module.new.tap do |m|
59
+ m.module_eval do
60
+ extend MTrack::Mixin
61
+ define_method :unt_3, METHOD_DEFINITION
62
+ track_methods { define_method :meth, METHOD_DEFINITION }
63
+ track_methods :numbers do
64
+ track_methods(:odd) { define_method :three, METHOD_DEFINITION }
65
+ track_methods(:even) { define_method :four, METHOD_DEFINITION }
66
+ end
67
+ define_method :unt_4, METHOD_DEFINITION
68
+ end
69
+ end
70
+ end
71
+
72
+ let(:sub_module_1) do
73
+ bm_1 = base_module_1
74
+ bm_2 = base_module_2
75
+ Module.new.tap do |m|
76
+ m.module_eval do
77
+ include bm_1
78
+ define_method :unt_4, METHOD_DEFINITION
79
+ track_methods { define_method :meth, METHOD_DEFINITION }
80
+ track_methods :numbers do
81
+ track_methods(:even) { define_method :four, METHOD_DEFINITION }
82
+ track_methods(:odd) { define_method :five, METHOD_DEFINITION }
83
+ end
84
+ define_method :unt_5, METHOD_DEFINITION
85
+ include bm_2
86
+ end
87
+ end
88
+ end
89
+
90
+ let(:sub_module_2) do
91
+ bm_3 = base_module_3
92
+ Module.new.tap do |m|
93
+ m.module_eval do
94
+ extend MTrack::Mixin
95
+ define_method :unt_5, METHOD_DEFINITION
96
+ track_methods { define_method :meth, METHOD_DEFINITION }
97
+ include bm_3
98
+ track_methods :numbers do
99
+ track_methods(:odd) { define_method :five, METHOD_DEFINITION }
100
+ track_methods(:even) { define_method :six, METHOD_DEFINITION }
101
+ end
102
+ define_method :unt_6, METHOD_DEFINITION
103
+ end
104
+ end
105
+ end
106
+
107
+ let(:super_class) do
108
+ sm_1 = sub_module_1
109
+ Class.new.tap do |c|
110
+ c.class_eval do
111
+ include sm_1
112
+ define_method :unt_6, METHOD_DEFINITION
113
+ track_methods { define_method :meth, METHOD_DEFINITION }
114
+ track_methods :numbers do
115
+ track_methods(:even) { define_method :six, METHOD_DEFINITION }
116
+ track_methods(:odd) { define_method :seven, METHOD_DEFINITION }
117
+ end
118
+ define_method :unt_7, METHOD_DEFINITION
119
+ end
120
+ end
121
+ end
122
+
123
+ let(:sub_class) do
124
+ sm_2 = sub_module_2
125
+ sc = super_class
126
+ Class.new(sc).tap do |c|
127
+ c.class_eval do
128
+ define_method :unt_7, METHOD_DEFINITION
129
+ track_methods { define_method :meth, METHOD_DEFINITION }
130
+ track_methods :numbers do
131
+ track_methods(:odd) { define_method :seven, METHOD_DEFINITION }
132
+ track_methods(:even) { define_method :eight, METHOD_DEFINITION }
133
+ end
134
+ define_method :unt_8, METHOD_DEFINITION
135
+ include sm_2
136
+ end
137
+ end
138
+ end
139
+
140
+ context "base module 1" do
141
+ subject { base_module_1 }
142
+
143
+ it "tracks methods" do
144
+ expect(subject.tracked_methods).to match_array([:meth])
145
+ expect(subject.tracked_methods(:numbers)).to match_array([:one, :two])
146
+ expect(subject.tracked_methods(:odd)).to match_array([:one])
147
+ expect(subject.tracked_methods(:even)).to match_array([:two])
148
+ end
149
+
150
+ it "untracks removed methods" do
151
+ subject.module_eval { remove_method :meth }
152
+ expect(subject.tracked_methods).to be_empty
153
+ end
154
+
155
+ it "untracks undefined methods" do
156
+ subject.module_eval { undef_method :meth }
157
+ expect(subject.tracked_methods).to be_empty
158
+
159
+ subject.module_eval { define_method :meth, METHOD_DEFINITION }
160
+ expect(subject.tracked_methods).to be_empty
161
+ end
162
+ end
163
+
164
+ context "base module 2" do
165
+ subject { base_module_2 }
166
+
167
+ it "tracks methods" do
168
+ expect(subject.tracked_methods).to match_array([:meth])
169
+ expect(subject.tracked_methods(:numbers)).to match_array([:two, :three])
170
+ expect(subject.tracked_methods(:even)).to match_array([:two])
171
+ expect(subject.tracked_methods(:odd)).to match_array([:three])
172
+ end
173
+
174
+ it "untracks removed methods" do
175
+ subject.module_eval { remove_method :meth }
176
+ expect(subject.tracked_methods).to be_empty
177
+ end
178
+
179
+ it "untracks undefined methods" do
180
+ subject.module_eval { undef_method :meth }
181
+ expect(subject.tracked_methods).to be_empty
182
+
183
+ subject.module_eval { define_method :meth, METHOD_DEFINITION }
184
+ expect(subject.tracked_methods).to be_empty
185
+ end
186
+ end
187
+
188
+ context "base module 3" do
189
+ subject { base_module_3 }
190
+
191
+ it "tracks methods" do
192
+ expect(subject.tracked_methods).to match_array([:meth])
193
+ expect(subject.tracked_methods(:numbers)).to match_array([:three, :four])
194
+ expect(subject.tracked_methods(:odd)).to match_array([:three])
195
+ expect(subject.tracked_methods(:even)).to match_array([:four])
196
+ end
197
+
198
+ it "untracks removed methods" do
199
+ subject.module_eval { remove_method :meth }
200
+ expect(subject.tracked_methods).to be_empty
201
+ end
202
+
203
+ it "untracks undefined methods" do
204
+ subject.module_eval { undef_method :meth }
205
+ expect(subject.tracked_methods).to be_empty
206
+
207
+ subject.module_eval { define_method :meth, METHOD_DEFINITION }
208
+ expect(subject.tracked_methods).to be_empty
209
+ end
210
+ end
211
+
212
+ context "sub module 1" do
213
+ subject { sub_module_1 }
214
+
215
+ it "tracks methods" do
216
+ expect(subject.tracked_methods).to match_array([:meth])
217
+ expect(subject.tracked_methods(:numbers)).to match_array([:one, :two, :three, :four, :five])
218
+ expect(subject.tracked_methods(:odd)).to match_array([:one, :three, :five])
219
+ expect(subject.tracked_methods(:even)).to match_array([:two, :four])
220
+ end
221
+
222
+ it "untracks removed methods" do
223
+ subject.module_eval { remove_method :meth }
224
+ expect(subject.tracked_methods).to match_array([:meth])
225
+
226
+ base_module_1.module_eval { remove_method :meth }
227
+ expect(subject.tracked_methods).to match_array([:meth])
228
+
229
+ base_module_2.module_eval { remove_method :meth }
230
+ expect(subject.tracked_methods).to be_empty
231
+ end
232
+
233
+ it "untracks undefined methods" do
234
+ subject.module_eval { undef_method :meth }
235
+ expect(subject.tracked_methods).to be_empty
236
+
237
+ subject.module_eval { define_method :meth, METHOD_DEFINITION }
238
+ expect(subject.tracked_methods).to match_array([:meth])
239
+ end
240
+ end
241
+
242
+ context "sub module 2" do
243
+ subject { sub_module_2 }
244
+
245
+ it "tracks methods" do
246
+ expect(subject.tracked_methods).to match_array([:meth])
247
+ expect(subject.tracked_methods(:numbers)).to match_array([:three, :four, :five, :six])
248
+ expect(subject.tracked_methods(:odd)).to match_array([:three, :five])
249
+ expect(subject.tracked_methods(:even)).to match_array([:four, :six])
250
+ end
251
+
252
+ it "untracks removed methods" do
253
+ base_module_3.module_eval { remove_method :meth }
254
+ expect(subject.tracked_methods).to match_array([:meth])
255
+
256
+ subject.module_eval { remove_method :meth }
257
+ expect(subject.tracked_methods).to be_empty
258
+ end
259
+
260
+ it "untracks undefined methods" do
261
+ subject.module_eval { undef_method :meth }
262
+ expect(subject.tracked_methods).to be_empty
263
+
264
+ subject.module_eval { define_method :meth, METHOD_DEFINITION }
265
+ expect(subject.tracked_methods).to match_array([:meth])
266
+ end
267
+ end
268
+
269
+ context "super class" do
270
+ subject { super_class }
271
+
272
+ it "tracks methods" do
273
+ expect(subject.tracked_methods).to match_array([:meth])
274
+ expect(subject.tracked_methods(:numbers)).to match_array([:one, :two, :three, :four, :five, :six, :seven])
275
+ expect(subject.tracked_methods(:odd)).to match_array([:one, :three, :five, :seven])
276
+ expect(subject.tracked_methods(:even)).to match_array([:two, :four, :six])
277
+ end
278
+
279
+ it "untracks removed methods" do
280
+ subject.class_eval { remove_method :meth }
281
+ expect(subject.tracked_methods).to match_array([:meth])
282
+
283
+ sub_module_1.module_eval { remove_method :meth }
284
+ expect(subject.tracked_methods).to match_array([:meth])
285
+
286
+ base_module_2.module_eval { remove_method :meth }
287
+ expect(subject.tracked_methods).to match_array([:meth])
288
+
289
+ base_module_1.module_eval { remove_method :meth }
290
+ expect(subject.tracked_methods).to be_empty
291
+ end
292
+
293
+ it "untracks undefined methods" do
294
+ subject.module_eval { undef_method :meth }
295
+ expect(subject.tracked_methods).to be_empty
296
+
297
+ subject.module_eval { define_method :meth, METHOD_DEFINITION }
298
+ expect(subject.tracked_methods).to match_array([:meth])
299
+ end
300
+ end
301
+
302
+ context "sub class" do
303
+ subject { sub_class }
304
+
305
+ it "tracks methods" do
306
+ expect(subject.tracked_methods).to match_array([:meth])
307
+ expect(subject.tracked_methods(:numbers)).to match_array([:one, :two, :three, :four, :five, :six, :seven, :eight])
308
+ expect(subject.tracked_methods(:odd)).to match_array([:one, :three, :five, :seven])
309
+ expect(subject.tracked_methods(:even)).to match_array([:two, :four, :six, :eight])
310
+ end
311
+
312
+ it "untracks removed methods" do
313
+ base_module_1.module_eval { remove_method :meth }
314
+ expect(subject.tracked_methods).to match_array([:meth])
315
+
316
+ base_module_2.module_eval { remove_method :meth }
317
+ expect(subject.tracked_methods).to match_array([:meth])
318
+
319
+ base_module_3.module_eval { remove_method :meth }
320
+ expect(subject.tracked_methods).to match_array([:meth])
321
+
322
+ sub_module_1.module_eval { remove_method :meth }
323
+ expect(subject.tracked_methods).to match_array([:meth])
324
+
325
+ sub_module_2.module_eval { remove_method :meth }
326
+ expect(subject.tracked_methods).to match_array([:meth])
327
+
328
+ super_class.class_eval { remove_method :meth }
329
+ expect(subject.tracked_methods).to match_array([:meth])
330
+
331
+ subject.class_eval { remove_method :meth }
332
+ expect(subject.tracked_methods).to be_empty
333
+ end
334
+
335
+ it "untracks undefined methods" do
336
+ subject.module_eval { undef_method :meth }
337
+ expect(subject.tracked_methods).to be_empty
338
+
339
+ subject.module_eval { define_method :meth, METHOD_DEFINITION }
340
+ expect(subject.tracked_methods).to match_array([:meth])
341
+ end
342
+ end
343
+
344
+ context "partially defined" do
345
+ context "module" do
346
+ it "tracks methods" do
347
+ m = ::Module.new
348
+
349
+ expect do
350
+ m.module_eval do
351
+ extend MTrack::Mixin
352
+ track_methods do
353
+ define_method :meth_1, METHOD_DEFINITION
354
+ define_method :meth_2, METHOD_DEFINITION
355
+ raise "Unexpected error"
356
+ define_method :meth_3, METHOD_DEFINITION
357
+ define_method :meth_4, METHOD_DEFINITION
358
+ end
359
+ end
360
+ end.to raise_error(RuntimeError, "Unexpected error")
361
+
362
+ expect(m.public_instance_methods(false).map(&:to_sym)).to match_array([:meth_1, :meth_2])
363
+ expect(m.tracked_methods).to match_array([:meth_1, :meth_2])
364
+ end
365
+ end
366
+
367
+ context "class" do
368
+ it "tracks methods" do
369
+ c = ::Class.new
370
+
371
+ expect do
372
+ c.class_eval do
373
+ extend MTrack::Mixin
374
+ track_methods do
375
+ define_method :meth_1, METHOD_DEFINITION
376
+ define_method :meth_2, METHOD_DEFINITION
377
+ raise "Unexpected error"
378
+ define_method :meth_3, METHOD_DEFINITION
379
+ define_method :meth_4, METHOD_DEFINITION
380
+ end
381
+ end
382
+ end.to raise_error(RuntimeError, "Unexpected error")
383
+
384
+ expect(c.public_instance_methods(false).map(&:to_sym)).to match_array([:meth_1, :meth_2])
385
+ expect(c.tracked_methods).to match_array([:meth_1, :meth_2])
386
+ end
387
+ end
388
+ end
389
+
390
+ context "inclusion" do
391
+ it "adds #{described_class} to submodule" do
392
+ bm_1 = base_module_1
393
+ m = ::Module.new.module_eval { include bm_1 }
394
+ expect(m.tracked_methods).to match_array([:meth])
395
+ end
396
+ end
397
+
398
+ context "inheritance" do
399
+ it "adds #{described_class} to subclass" do
400
+ c = ::Class.new(super_class)
401
+ expect(c.tracked_methods).to match_array([:meth])
402
+ end
403
+ end
404
+ end
405
+ end
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: 0.0.6
4
+ version: 1.0.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-09-19 00:00:00.000000000 Z
11
+ date: 2014-10-03 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
@@ -28,14 +28,12 @@ files:
28
28
  - README.md
29
29
  - Rakefile
30
30
  - lib/mtrack.rb
31
- - lib/mtrack/core.rb
32
- - lib/mtrack/module_mixin.rb
31
+ - lib/mtrack/mixin.rb
33
32
  - lib/mtrack/state.rb
34
33
  - lib/mtrack/state/group.rb
35
34
  - lib/mtrack/version.rb
36
35
  - mtrack.gemspec
37
- - spec/lib/mtrack/core_spec.rb
38
- - spec/lib/mtrack/module_mixin_spec.rb
36
+ - spec/lib/mtrack/mixin_spec.rb
39
37
  - spec/lib/mtrack/state/group_spec.rb
40
38
  - spec/lib/mtrack/state_spec.rb
41
39
  - spec/lib/mtrack/version_spec.rb
@@ -62,13 +60,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
60
  version: '0'
63
61
  requirements: []
64
62
  rubyforge_project:
65
- rubygems_version: 2.4.1
63
+ rubygems_version: 2.4.2
66
64
  signing_key:
67
65
  specification_version: 4
68
66
  summary: Group and track methods on classes and modules.
69
67
  test_files:
70
- - spec/lib/mtrack/core_spec.rb
71
- - spec/lib/mtrack/module_mixin_spec.rb
68
+ - spec/lib/mtrack/mixin_spec.rb
72
69
  - spec/lib/mtrack/state/group_spec.rb
73
70
  - spec/lib/mtrack/state_spec.rb
74
71
  - spec/lib/mtrack/version_spec.rb
data/lib/mtrack/core.rb DELETED
@@ -1,111 +0,0 @@
1
- require "mtrack/state"
2
-
3
- module MTrack
4
-
5
- ##
6
- # Implements the core tracking functionality of the gem by extending those
7
- # Modules and Classes that use MTrack::ModuleMixin#track_methods. Additionally
8
- # it will extend Modules and Classes that include a Module that is tracking
9
- # methods and Classes that inherit from a Class that is tracking methods.
10
- module Core
11
- class << self
12
- private
13
-
14
- ##
15
- # call-seq:
16
- # extended(submodule) => submodule
17
- #
18
- # Initializes a State variable on the Class or Module that extended Core.
19
- #
20
- # Returns passed +submodule+.
21
- def extended(submodule)
22
- submodule.instance_eval { @__mtrack__ ||= State.new }
23
- submodule
24
- end
25
- end
26
-
27
- ##
28
- # call-seq:
29
- # tracked_methods(group_name = nil) => set
30
- #
31
- # Returns a set containing the currently tracked methods for a +group_name+.
32
- #
33
- # class C
34
- # track_methods :my_group do
35
- # def method_1; end
36
- # def method_2; end
37
- # end
38
- # end
39
- #
40
- # C.tracked_methods :my_group #=> #<Set: {:method_1, :method_2}>
41
- def tracked_methods(group_name = nil)
42
- @__mtrack__.tracked group_name
43
- end
44
-
45
- private
46
-
47
- ##
48
- # call-seq:
49
- # included(submodule) => submodule
50
- #
51
- # Sets this state as a super-state of the +submodule+ (Class or Module) that
52
- # has included the current Module.
53
- #
54
- # Returns passed +submodule+.
55
- def included(submodule)
56
- state = @__mtrack__
57
- submodule.instance_eval do
58
- extend Core
59
- @__mtrack__.add_super_state state
60
- end
61
- submodule
62
- end
63
-
64
- ##
65
- # call-seq:
66
- # inherited(submodule) => submodule
67
- #
68
- # Sets this state as a super-state of the +submodule+ (Class) that has
69
- # inherited from the current Class.
70
- #
71
- # Returns passed +submodule+.
72
- alias_method :inherited, :included
73
-
74
- ##
75
- # call-seq:
76
- # method_added(name) => name
77
- #
78
- # Allows method +name+ to be displayed on #tracked_methods once again after
79
- # being disabled by a call to #method_undefined.
80
- #
81
- # Returns passed +name+.
82
- def method_added(name)
83
- @__mtrack__.delete_undefined name
84
- end
85
-
86
- ##
87
- # call-seq:
88
- # method_removed(name) => name
89
- #
90
- # Stops tracking method +name+ in the current Class or Module.
91
- #
92
- # Returns passed +name+.
93
- def method_removed(name)
94
- @__mtrack__.delete_tracked name
95
- end
96
-
97
- ##
98
- # call-seq:
99
- # method_undefined(name) => name
100
- #
101
- # Stops tracking method +name+ in the current Class or Module and prevents
102
- # homonymous methods tracked in super-states from being displayed as
103
- # #tracked_methods.
104
- #
105
- # Returns passed +name+.
106
- def method_undefined(name)
107
- @__mtrack__.delete_tracked name
108
- @__mtrack__.add_undefined name
109
- end
110
- end
111
- end
@@ -1,90 +0,0 @@
1
- require "set"
2
-
3
- require "mtrack/core"
4
-
5
- module MTrack
6
-
7
- ##
8
- # Provides the #track_methods method to all Classes and Modules by being mixed
9
- # into the +Module+ class.
10
- module ModuleMixin
11
- class << self
12
- private
13
-
14
- ##
15
- # call-seq:
16
- # newly_defined_methods(mod, old_methods) => set
17
- #
18
- # Calculates the difference between +mod+'s currently defined public
19
- # methods and +old_methods+.
20
- #
21
- # Returns a set with the result.
22
- def newly_defined_methods(mod, old_methods)
23
- (mod.public_instance_methods(false) - old_methods).map(&:to_sym).to_set
24
- end
25
-
26
- ##
27
- # call-seq:
28
- # save_tracked_methods(mod, group_name, tracked) => nil
29
- #
30
- # Saves +tracked+ methods for +mod+ under a +group_name+.
31
- #
32
- # Returns a +nil+ value.
33
- def save_tracked_methods(mod, group_name, tracked)
34
- mod.instance_variable_get(:@__mtrack__)[group_name].merge_tracked tracked unless tracked.empty?
35
- nil
36
- end
37
-
38
- ##
39
- # call-seq:
40
- # track_methods_for(mod, group_name) => set
41
- # track_methods_for(mod, group_name) {|| ... } => set
42
- #
43
- # Sets up an MTrack::State instance for +mod+.
44
- #
45
- # If a block is provided all the methods defined within the block will be
46
- # tracked under the +group_name+ parameter.
47
- #
48
- # Returns a set containing the methods that were defined within the block.
49
- def track_methods_for(mod, group_name, &b)
50
- old_methods = mod.public_instance_methods false
51
-
52
- begin
53
- mod.module_eval &b if block_given?
54
- ensure
55
- tracked = newly_defined_methods(mod, old_methods)
56
- save_tracked_methods(mod, group_name, tracked)
57
- end
58
-
59
- tracked
60
- end
61
- end
62
-
63
- private
64
-
65
- ##
66
- # call-seq:
67
- # track_methods(group_name = nil) => set
68
- # track_methods(group_name = nil) {|| ... } => set
69
- #
70
- # Sets up an MTrack::State instance for this Class or Module and extends it
71
- # using MTrack::Core.
72
- #
73
- # If a block is provided all the methods defined within the block will be
74
- # tracked under the optional +group_name+ parameter.
75
- #
76
- # Returns a set containing the methods that were defined within the block.
77
- #
78
- # class C
79
- # track_methods do
80
- # def method_1; end
81
- # track_methods(:inner_group_1) { def method_2; end }
82
- # def method_3; end
83
- # end
84
- # end #=> #<Set: {:method_1, :method_2, :method_3}>
85
- def track_methods(group_name = nil, &b)
86
- extend Core
87
- ModuleMixin.send(:track_methods_for, self, group_name, &b)
88
- end
89
- end
90
- end
@@ -1,377 +0,0 @@
1
- require "spec_helper"
2
-
3
- METHOD_DEFINITION = proc {}
4
-
5
- describe MTrack::Core do
6
- let(:base_module_1) do
7
- Module.new.tap do |m|
8
- m.module_eval do
9
- define_method :unt_1, METHOD_DEFINITION
10
- track_methods { define_method :meth, METHOD_DEFINITION }
11
- track_methods :numbers do
12
- track_methods(:odd) { define_method :one, METHOD_DEFINITION }
13
- track_methods(:even) { define_method :two, METHOD_DEFINITION }
14
- end
15
- define_method :unt_2, METHOD_DEFINITION
16
- end
17
- end
18
- end
19
-
20
- let(:base_module_2) do
21
- Module.new.tap do |m|
22
- m.module_eval do
23
- define_method :unt_2, METHOD_DEFINITION
24
- track_methods { define_method :meth, METHOD_DEFINITION }
25
- track_methods :numbers do
26
- track_methods(:even) { define_method :two, METHOD_DEFINITION }
27
- track_methods(:odd) { define_method :three, METHOD_DEFINITION }
28
- end
29
- define_method :unt_3, METHOD_DEFINITION
30
- end
31
- end
32
- end
33
-
34
- let(:base_module_3) do
35
- Module.new.tap do |m|
36
- m.module_eval do
37
- define_method :unt_3, METHOD_DEFINITION
38
- track_methods { define_method :meth, METHOD_DEFINITION }
39
- track_methods :numbers do
40
- track_methods(:odd) { define_method :three, METHOD_DEFINITION }
41
- track_methods(:even) { define_method :four, METHOD_DEFINITION }
42
- end
43
- define_method :unt_4, METHOD_DEFINITION
44
- end
45
- end
46
- end
47
-
48
- let(:sub_module_1) do
49
- bm_1 = base_module_1
50
- bm_2 = base_module_2
51
- Module.new.tap do |m|
52
- m.module_eval do
53
- include bm_1
54
- define_method :unt_4, METHOD_DEFINITION
55
- track_methods { define_method :meth, METHOD_DEFINITION }
56
- track_methods :numbers do
57
- track_methods(:even) { define_method :four, METHOD_DEFINITION }
58
- track_methods(:odd) { define_method :five, METHOD_DEFINITION }
59
- end
60
- define_method :unt_5, METHOD_DEFINITION
61
- include bm_2
62
- end
63
- end
64
- end
65
-
66
- let(:sub_module_2) do
67
- bm_3 = base_module_3
68
- Module.new.tap do |m|
69
- m.module_eval do
70
- define_method :unt_5, METHOD_DEFINITION
71
- track_methods { define_method :meth, METHOD_DEFINITION }
72
- include bm_3
73
- track_methods :numbers do
74
- track_methods(:odd) { define_method :five, METHOD_DEFINITION }
75
- track_methods(:even) { define_method :six, METHOD_DEFINITION }
76
- end
77
- define_method :unt_6, METHOD_DEFINITION
78
- end
79
- end
80
- end
81
-
82
- let(:super_class) do
83
- sm_1 = sub_module_1
84
- Class.new.tap do |c|
85
- c.class_eval do
86
- include sm_1
87
- define_method :unt_6, METHOD_DEFINITION
88
- track_methods { define_method :meth, METHOD_DEFINITION }
89
- track_methods :numbers do
90
- track_methods(:even) { define_method :six, METHOD_DEFINITION }
91
- track_methods(:odd) { define_method :seven, METHOD_DEFINITION }
92
- end
93
- define_method :unt_7, METHOD_DEFINITION
94
- end
95
- end
96
- end
97
-
98
- let(:sub_class) do
99
- sm_2 = sub_module_2
100
- sc = super_class
101
- Class.new(sc).tap do |c|
102
- c.class_eval do
103
- define_method :unt_7, METHOD_DEFINITION
104
- track_methods { define_method :meth, METHOD_DEFINITION }
105
- track_methods :numbers do
106
- track_methods(:odd) { define_method :seven, METHOD_DEFINITION }
107
- track_methods(:even) { define_method :eight, METHOD_DEFINITION }
108
- end
109
- define_method :unt_8, METHOD_DEFINITION
110
- include sm_2
111
- end
112
- end
113
- end
114
-
115
- context "base module 1" do
116
- subject { base_module_1 }
117
-
118
- it "tracks methods" do
119
- expect(subject.tracked_methods).to match_array([:meth])
120
- expect(subject.tracked_methods(:numbers)).to match_array([:one, :two])
121
- expect(subject.tracked_methods(:odd)).to match_array([:one])
122
- expect(subject.tracked_methods(:even)).to match_array([:two])
123
- end
124
-
125
- it "untracks removed methods" do
126
- subject.module_eval { remove_method :meth }
127
- expect(subject.tracked_methods).to be_empty
128
- end
129
-
130
- it "untracks undefined methods" do
131
- subject.module_eval { undef_method :meth }
132
- expect(subject.tracked_methods).to be_empty
133
-
134
- subject.module_eval { define_method :meth, METHOD_DEFINITION }
135
- expect(subject.tracked_methods).to be_empty
136
- end
137
- end
138
-
139
- context "base module 2" do
140
- subject { base_module_2 }
141
-
142
- it "tracks methods" do
143
- expect(subject.tracked_methods).to match_array([:meth])
144
- expect(subject.tracked_methods(:numbers)).to match_array([:two, :three])
145
- expect(subject.tracked_methods(:even)).to match_array([:two])
146
- expect(subject.tracked_methods(:odd)).to match_array([:three])
147
- end
148
-
149
- it "untracks removed methods" do
150
- subject.module_eval { remove_method :meth }
151
- expect(subject.tracked_methods).to be_empty
152
- end
153
-
154
- it "untracks undefined methods" do
155
- subject.module_eval { undef_method :meth }
156
- expect(subject.tracked_methods).to be_empty
157
-
158
- subject.module_eval { define_method :meth, METHOD_DEFINITION }
159
- expect(subject.tracked_methods).to be_empty
160
- end
161
- end
162
-
163
- context "base module 3" do
164
- subject { base_module_3 }
165
-
166
- it "tracks methods" do
167
- expect(subject.tracked_methods).to match_array([:meth])
168
- expect(subject.tracked_methods(:numbers)).to match_array([:three, :four])
169
- expect(subject.tracked_methods(:odd)).to match_array([:three])
170
- expect(subject.tracked_methods(:even)).to match_array([:four])
171
- end
172
-
173
- it "untracks removed methods" do
174
- subject.module_eval { remove_method :meth }
175
- expect(subject.tracked_methods).to be_empty
176
- end
177
-
178
- it "untracks undefined methods" do
179
- subject.module_eval { undef_method :meth }
180
- expect(subject.tracked_methods).to be_empty
181
-
182
- subject.module_eval { define_method :meth, METHOD_DEFINITION }
183
- expect(subject.tracked_methods).to be_empty
184
- end
185
- end
186
-
187
- context "sub module 1" do
188
- subject { sub_module_1 }
189
-
190
- it "tracks methods" do
191
- expect(subject.tracked_methods).to match_array([:meth])
192
- expect(subject.tracked_methods(:numbers)).to match_array([:one, :two, :three, :four, :five])
193
- expect(subject.tracked_methods(:odd)).to match_array([:one, :three, :five])
194
- expect(subject.tracked_methods(:even)).to match_array([:two, :four])
195
- end
196
-
197
- it "untracks removed methods" do
198
- subject.module_eval { remove_method :meth }
199
- expect(subject.tracked_methods).to match_array([:meth])
200
-
201
- base_module_1.module_eval { remove_method :meth }
202
- expect(subject.tracked_methods).to match_array([:meth])
203
-
204
- base_module_2.module_eval { remove_method :meth }
205
- expect(subject.tracked_methods).to be_empty
206
- end
207
-
208
- it "untracks undefined methods" do
209
- subject.module_eval { undef_method :meth }
210
- expect(subject.tracked_methods).to be_empty
211
-
212
- subject.module_eval { define_method :meth, METHOD_DEFINITION }
213
- expect(subject.tracked_methods).to match_array([:meth])
214
- end
215
- end
216
-
217
- context "sub module 2" do
218
- subject { sub_module_2 }
219
-
220
- it "tracks methods" do
221
- expect(subject.tracked_methods).to match_array([:meth])
222
- expect(subject.tracked_methods(:numbers)).to match_array([:three, :four, :five, :six])
223
- expect(subject.tracked_methods(:odd)).to match_array([:three, :five])
224
- expect(subject.tracked_methods(:even)).to match_array([:four, :six])
225
- end
226
-
227
- it "untracks removed methods" do
228
- base_module_3.module_eval { remove_method :meth }
229
- expect(subject.tracked_methods).to match_array([:meth])
230
-
231
- subject.module_eval { remove_method :meth }
232
- expect(subject.tracked_methods).to be_empty
233
- end
234
-
235
- it "untracks undefined methods" do
236
- subject.module_eval { undef_method :meth }
237
- expect(subject.tracked_methods).to be_empty
238
-
239
- subject.module_eval { define_method :meth, METHOD_DEFINITION }
240
- expect(subject.tracked_methods).to match_array([:meth])
241
- end
242
- end
243
-
244
- context "super class" do
245
- subject { super_class }
246
-
247
- it "tracks methods" do
248
- expect(subject.tracked_methods).to match_array([:meth])
249
- expect(subject.tracked_methods(:numbers)).to match_array([:one, :two, :three, :four, :five, :six, :seven])
250
- expect(subject.tracked_methods(:odd)).to match_array([:one, :three, :five, :seven])
251
- expect(subject.tracked_methods(:even)).to match_array([:two, :four, :six])
252
- end
253
-
254
- it "untracks removed methods" do
255
- subject.class_eval { remove_method :meth }
256
- expect(subject.tracked_methods).to match_array([:meth])
257
-
258
- sub_module_1.module_eval { remove_method :meth }
259
- expect(subject.tracked_methods).to match_array([:meth])
260
-
261
- base_module_2.module_eval { remove_method :meth }
262
- expect(subject.tracked_methods).to match_array([:meth])
263
-
264
- base_module_1.module_eval { remove_method :meth }
265
- expect(subject.tracked_methods).to be_empty
266
- end
267
-
268
- it "untracks undefined methods" do
269
- subject.module_eval { undef_method :meth }
270
- expect(subject.tracked_methods).to be_empty
271
-
272
- subject.module_eval { define_method :meth, METHOD_DEFINITION }
273
- expect(subject.tracked_methods).to match_array([:meth])
274
- end
275
- end
276
-
277
- context "sub class" do
278
- subject { sub_class }
279
-
280
- it "tracks methods" do
281
- expect(subject.tracked_methods).to match_array([:meth])
282
- expect(subject.tracked_methods(:numbers)).to match_array([:one, :two, :three, :four, :five, :six, :seven, :eight])
283
- expect(subject.tracked_methods(:odd)).to match_array([:one, :three, :five, :seven])
284
- expect(subject.tracked_methods(:even)).to match_array([:two, :four, :six, :eight])
285
- end
286
-
287
- it "untracks removed methods" do
288
- base_module_1.module_eval { remove_method :meth }
289
- expect(subject.tracked_methods).to match_array([:meth])
290
-
291
- base_module_2.module_eval { remove_method :meth }
292
- expect(subject.tracked_methods).to match_array([:meth])
293
-
294
- base_module_3.module_eval { remove_method :meth }
295
- expect(subject.tracked_methods).to match_array([:meth])
296
-
297
- sub_module_1.module_eval { remove_method :meth }
298
- expect(subject.tracked_methods).to match_array([:meth])
299
-
300
- sub_module_2.module_eval { remove_method :meth }
301
- expect(subject.tracked_methods).to match_array([:meth])
302
-
303
- super_class.class_eval { remove_method :meth }
304
- expect(subject.tracked_methods).to match_array([:meth])
305
-
306
- subject.class_eval { remove_method :meth }
307
- expect(subject.tracked_methods).to be_empty
308
- end
309
-
310
- it "untracks undefined methods" do
311
- subject.module_eval { undef_method :meth }
312
- expect(subject.tracked_methods).to be_empty
313
-
314
- subject.module_eval { define_method :meth, METHOD_DEFINITION }
315
- expect(subject.tracked_methods).to match_array([:meth])
316
- end
317
- end
318
-
319
- context "partially defined" do
320
- context "module" do
321
- it "tracks methods" do
322
- m = ::Module.new
323
-
324
- expect do
325
- m.module_eval do
326
- track_methods do
327
- define_method :meth_1, METHOD_DEFINITION
328
- define_method :meth_2, METHOD_DEFINITION
329
- raise "Unexpected error"
330
- define_method :meth_3, METHOD_DEFINITION
331
- define_method :meth_4, METHOD_DEFINITION
332
- end
333
- end
334
- end.to raise_error(RuntimeError, "Unexpected error")
335
-
336
- expect(m.public_instance_methods(false).map(&:to_sym)).to match_array([:meth_1, :meth_2])
337
- expect(m.tracked_methods).to match_array([:meth_1, :meth_2])
338
- end
339
- end
340
-
341
- context "class" do
342
- it "tracks methods" do
343
- c = ::Class.new
344
-
345
- expect do
346
- c.class_eval do
347
- track_methods do
348
- define_method :meth_1, METHOD_DEFINITION
349
- define_method :meth_2, METHOD_DEFINITION
350
- raise "Unexpected error"
351
- define_method :meth_3, METHOD_DEFINITION
352
- define_method :meth_4, METHOD_DEFINITION
353
- end
354
- end
355
- end.to raise_error(RuntimeError, "Unexpected error")
356
-
357
- expect(c.public_instance_methods(false).map(&:to_sym)).to match_array([:meth_1, :meth_2])
358
- expect(c.tracked_methods).to match_array([:meth_1, :meth_2])
359
- end
360
- end
361
- end
362
-
363
- context "inclusion" do
364
- it "adds #{described_class} to submodule" do
365
- bm_1 = base_module_1
366
- m = ::Module.new.module_eval { include bm_1 }
367
- expect(m.tracked_methods).to match_array([:meth])
368
- end
369
- end
370
-
371
- context "inheritance" do
372
- it "adds #{described_class} to subclass" do
373
- c = ::Class.new(super_class)
374
- expect(c.tracked_methods).to match_array([:meth])
375
- end
376
- end
377
- end
@@ -1,13 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe MTrack::ModuleMixin do
4
- describe "#track_methods" do
5
- context "no block given" do
6
- it "returns an empty set" do
7
- ret_val = ::Module.new.module_eval { track_methods :group }
8
- expect(ret_val).to be_a(Set)
9
- expect(ret_val).to be_empty
10
- end
11
- end
12
- end
13
- end