Parent

Class/Module Index [+]

Quicksearch

Reek::MethodGroup

Represents a group of methods @private

Public Class Methods

intersection_of_parameters_of(methods) click to toggle source
# File lib/reek/smells/data_clump.rb, line 101
def self.intersection_of_parameters_of(methods)
  methods.map {|meth| meth.arg_names}.intersection
end
new(ctx, min_clump_size, max_copies) click to toggle source
# File lib/reek/smells/data_clump.rb, line 105
def initialize(ctx, min_clump_size, max_copies)
  @min_clump_size = min_clump_size
  @max_copies = max_copies
  @candidate_methods = ctx.local_nodes(:defn).select do |meth|
    meth.arg_names.length >= @min_clump_size
  end.map {|defn_node| CandidateMethod.new(defn_node)}
  delete_infrequent_parameters
  delete_small_methods
end

Public Instance Methods

clumps() click to toggle source
# File lib/reek/smells/data_clump.rb, line 132
def clumps
  results = Hash.new([])
  collect_clumps_in(@candidate_methods, results)
  results.each_key { |key| results[key].uniq! }
  results
end
clumps_containing(method, methods, results) click to toggle source
# File lib/reek/smells/data_clump.rb, line 115
def clumps_containing(method, methods, results)
  methods.each do |other_method|
    clump = [method.arg_names, other_method.arg_names].intersection
    if clump.length >= @min_clump_size
      others = methods.select { |other| clump - other.arg_names == [] }
      results[clump] += [method] + others
    end
  end
end
collect_clumps_in(methods, results) click to toggle source
# File lib/reek/smells/data_clump.rb, line 125
def collect_clumps_in(methods, results)
  return if methods.length <= @max_copies
  tail = methods[1..-1]
  clumps_containing(methods[0], tail, results)
  collect_clumps_in(tail, results)
end
delete_infrequent_parameters() click to toggle source
# File lib/reek/smells/data_clump.rb, line 145
def delete_infrequent_parameters
  @candidate_methods.each do |meth|
    meth.arg_names.each do |param|
      occurs = @candidate_methods.inject(0) {|sum, cm| cm.arg_names.include?(param) ? sum+1 : sum}
      meth.delete(param) if occurs <= @max_copies
    end
  end
end
delete_small_methods() click to toggle source
# File lib/reek/smells/data_clump.rb, line 139
def delete_small_methods
  @candidate_methods = @candidate_methods.select do |meth|
    meth.arg_names.length >= @min_clump_size
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.