class MTrack::State

Holds the internal state of tracked methods on Modules and Classes.

Attributes

groups[RW]

A Hash containing the groups defined in the current Class or Module.

super_states[RW]

A set of references to the states of inherited Classes and included Modules.

undefined[RW]

A set of methods that are currently undefined on this Class or Module.

Public Class Methods

new() → new_state click to toggle source

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

state[group_name] → group click to toggle source

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
add_super_state(state) → state click to toggle source

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
add_undefined(name) → name click to toggle source

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
delete_tracked(name) → name click to toggle source

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
delete_undefined(name) → name click to toggle source

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
tracked(group_name = nil) → set click to toggle source

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

merge_super_states(group_name) → set click to toggle source

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