class MTrack::State
Holds the internal state of tracked methods on Modules and Classes.
Attributes
A Hash containing the groups defined in the current Class or Module.
A set of references to the states of inherited Classes and included Modules.
A set of methods that are currently undefined on this Class or Module.
Public Class Methods
Creates a new State
instance.
# File lib/mtrack/state.rb, line 14 def initialize self.groups = {} self.super_states = Set.new self.undefined = Set.new end
Public Instance Methods
Accepts a group_name
passed as a parameter.
Returns an existing or a new group associated with group_name
.
# File lib/mtrack/state.rb, line 27 def [](group_name) groups[group_name] ||= Group.new end
Adds a new state
to the super_states
set.
Returns passed state
.
# File lib/mtrack/state.rb, line 38 def add_super_state(state) super_states.add state state end
Adds name
to the undefined
methods set.
Returns passed name
.
# File lib/mtrack/state.rb, line 50 def add_undefined(name) undefined.add name name end
Removes method name
from all groups
.
Returns passed name
.
# File lib/mtrack/state.rb, line 62 def delete_tracked(name) groups.values.each {|v| v.delete_tracked name } name end
Removes name
from the undefined
methods set.
Returns passed name
.
# File lib/mtrack/state.rb, line 74 def delete_undefined(name) undefined.delete name name end
Returns a set containing the currently tracked methods for a group_name
.
# File lib/mtrack/state.rb, line 84 def tracked(group_name = nil) ret_val = merge_super_states group_name ret_val.merge groups[group_name].tracked unless groups[group_name].nil? ret_val.subtract undefined end
Private Instance Methods
Returns a set containing all the methods being tracked for group_name
by the super_states
.
# File lib/mtrack/state.rb, line 111 def merge_super_states(group_name) super_states.inject(Set.new) do |set, state| set.merge state.tracked(group_name) end end