Represents a group of methods @private
# File lib/reek/smells/data_clump.rb, line 101 def self.intersection_of_parameters_of(methods) methods.map {|meth| meth.arg_names}.intersection end
# 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
# 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
# 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
# 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
# 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
Generated with the Darkfish Rdoc Generator 2.