mtrack 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0bfca617210cbd6c56886b4eb185dc4fd6953204
4
- data.tar.gz: d3af2f661de85f44e958ec5090515b40c032bd44
3
+ metadata.gz: a37d3a4f84c29d88e6e624fe0e011b5b2c22355e
4
+ data.tar.gz: 46ac0e28e8b2098ba8c2fe4407360364f70891fb
5
5
  SHA512:
6
- metadata.gz: a186ed9e60cd1dec8355f127ae9b5b19000804726b169b0e23baa49c5a2e4610dfd6d13d0a2abe676c5bd4ec375dbe2f5487b448cc5468a7490b6a72d3d7e49a
7
- data.tar.gz: 57a5be4b178c3215f3ea0d58cb4632be748be4b2cc2453193aff60b5c53890090af23154f28f4b964309e467eadea1eb29bace8319df13c5011deeb9499aedc3
6
+ metadata.gz: 5fd6379634adcb84748ae9f1be5d6a4ca108ba9f798677f8e86da330466ecaab6990f6ad3c2032bd20921a90b8146f2857eaabc17b3702df72cdaf49a35fa7a9
7
+ data.tar.gz: d831966d9765c6b61c50e9faece76b8b1e02ee16e21f3890a9a200a0f91079e16533239c8a29471671735e16fbada3ddf97965774dbbcf479ae22b1852d4886f
@@ -8,6 +8,15 @@ module MTrack
8
8
  # it will extend Modules and Classes that include a Module that is tracking
9
9
  # methods and Classes that inherit from a Class that is tracking methods.
10
10
  module Core
11
+ class << self
12
+ private
13
+
14
+ ##
15
+ # Initializes a State variable on the Class or Module that extended Core.
16
+ def extended(submodule)
17
+ submodule.instance_eval { @__mtrack__ ||= State.new }
18
+ end
19
+ end
11
20
 
12
21
  ##
13
22
  # call-seq:
@@ -35,22 +44,15 @@ module MTrack
35
44
  def included(submodule)
36
45
  state = @__mtrack__
37
46
  submodule.instance_eval do
38
- if @__mtrack__.nil?
39
- @__mtrack__ = State.new(state)
40
- extend Core
41
- else
42
- @__mtrack__.add_super_state state
43
- end
47
+ extend Core
48
+ @__mtrack__.add_super_state state
44
49
  end
45
50
  end
46
51
 
47
52
  ##
48
53
  # Sets this state as a super-state of the Class that has inherited from the
49
54
  # current Class.
50
- def inherited(subclass)
51
- state = @__mtrack__
52
- subclass.instance_eval { @__mtrack__ = State.new(state) }
53
- end
55
+ alias_method :inherited, :included
54
56
 
55
57
  ##
56
58
  # Allows method +name+ to be displayed on #tracked_methods once again after
@@ -73,26 +75,5 @@ module MTrack
73
75
  @__mtrack__.delete_tracked name
74
76
  @__mtrack__.add_undefined name
75
77
  end
76
-
77
- ##
78
- # call-seq:
79
- # track_methods_with_block(group_name) {|| ... } => set
80
- #
81
- # All the methods defined within the block will be tracked under the
82
- # +group_name+ parameter.
83
- #
84
- # Returns a set containing the methods that were defined within the block.
85
- def track_methods_with_block(group_name, &b)
86
- old_methods = public_instance_methods(false)
87
-
88
- begin
89
- module_eval(&b)
90
- ensure
91
- tracked = (public_instance_methods(false) - old_methods).map(&:to_sym).to_set
92
- @__mtrack__[group_name].merge_tracked tracked unless tracked.empty?
93
- end
94
-
95
- tracked
96
- end
97
78
  end
98
79
  end
@@ -1,7 +1,6 @@
1
1
  require "set"
2
2
 
3
3
  require "mtrack/core"
4
- require "mtrack/state"
5
4
 
6
5
  module MTrack
7
6
 
@@ -9,6 +8,55 @@ module MTrack
9
8
  # Provides the #track_methods method to all Classes and Modules by being mixed
10
9
  # into the +Module+ class.
11
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)
29
+ #
30
+ # Saves +tracked+ methods for +mod+ under a +group_name+.
31
+ def save_tracked_methods(mod, group_name, tracked)
32
+ mod.instance_variable_get(:@__mtrack__)[group_name].merge_tracked tracked unless tracked.empty?
33
+ end
34
+
35
+ ##
36
+ # call-seq:
37
+ # track_methods_for(mod, group_name) => set
38
+ # track_methods_for(mod, group_name) {|| ... } => set
39
+ #
40
+ # Sets up an MTrack::State instance for +mod+.
41
+ #
42
+ # If a block is provided all the methods defined within the block will be
43
+ # tracked under the +group_name+ parameter.
44
+ #
45
+ # Returns a set containing the methods that were defined within the block.
46
+ def track_methods_for(mod, group_name, &b)
47
+ old_methods = mod.public_instance_methods false
48
+
49
+ begin
50
+ mod.module_eval &b if block_given?
51
+ ensure
52
+ tracked = newly_defined_methods(mod, old_methods)
53
+ save_tracked_methods(mod, group_name, tracked)
54
+ end
55
+
56
+ tracked
57
+ end
58
+ end
59
+
12
60
  private
13
61
 
14
62
  ##
@@ -22,8 +70,7 @@ module MTrack
22
70
  # If a block is provided all the methods defined within the block will be
23
71
  # tracked under the optional +group_name+ parameter.
24
72
  #
25
- # Returns a set containing the methods that were defined within the block or
26
- # an empty set otherwise.
73
+ # Returns a set containing the methods that were defined within the block.
27
74
  #
28
75
  # class C
29
76
  # track_methods do
@@ -33,10 +80,8 @@ module MTrack
33
80
  # end
34
81
  # end #=> #<Set: {:method_1, :method_2, :method_3}>
35
82
  def track_methods(group_name = nil, &b)
36
- @__mtrack__ ||= State.new
37
83
  extend Core
38
- return track_methods_with_block(group_name, &b) if block_given?
39
- Set.new
84
+ ModuleMixin.send(:track_methods_for, self, group_name, &b)
40
85
  end
41
86
  end
42
87
  end
@@ -10,16 +10,12 @@ module MTrack
10
10
 
11
11
  ##
12
12
  # call-seq:
13
- # new(super_state = nil) => new_state
13
+ # new() => new_state
14
14
  #
15
- # Creates a new State instance. An optional +super_state+ parameter can be
16
- # passed that will be added to #super_states.
17
- #
18
- # super_state = MTrack::State.new
19
- # sub_state = MTrack::State.new(super_state)
20
- def initialize(super_state = nil)
15
+ # Creates a new State instance.
16
+ def initialize()
21
17
  self.groups = {}
22
- self.super_states = super_state ? Set[super_state] : Set.new
18
+ self.super_states = Set.new
23
19
  self.undefined = Set.new
24
20
  end
25
21
 
@@ -20,5 +20,5 @@
20
20
  module MTrack
21
21
 
22
22
  # Current version of MTrack.
23
- VERSION = "0.0.4"
23
+ VERSION = "0.0.5"
24
24
  end
@@ -50,7 +50,7 @@ describe MTrack::State do
50
50
  end
51
51
 
52
52
  context "with super state" do
53
- subject { described_class.new sample_state }
53
+ subject { described_class.new.tap {|s| s.add_super_state sample_state } }
54
54
 
55
55
  it "has super state's tracked methods" do
56
56
  expect(sample_state.tracked(:con_1)).to match_array(sample_group[:con_1][:tracked])
@@ -61,7 +61,12 @@ describe MTrack::State do
61
61
  end
62
62
 
63
63
  context "with multiple super states" do
64
- subject { described_class.new(sample_state).tap {|s| s.add_super_state sample_state_2 } }
64
+ subject do
65
+ described_class.new.tap do |s|
66
+ s.add_super_state sample_state
67
+ s.add_super_state sample_state_2
68
+ end
69
+ end
65
70
 
66
71
  it "merges tracked methods from all super states" do
67
72
  expect(subject.tracked(:con_1)).to match_array(sample_group[:con_1][:tracked])
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.4
4
+ version: 0.0.5
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-08-22 00:00:00.000000000 Z
11
+ date: 2014-08-26 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