[Rubygems-developers] Flaying rubygems

Ryan Davis ryand-ruby at zenspider.com
Sat Jan 3 15:04:44 EST 2009

On Dec 31, 2008, at 08:20 , Daniel Berger wrote:

> Just for kicks I ran Ryan's flay against the rubygems files. Here  
> were the results for anyone interested. I haven't investigated  
> further to see how many of these warrant refactoring.

Just to tease you, here is what the next version of flay can do for  
you (I took out #2 to reduce noise):

1) Similar code found in :defn (mass = 156)
   A: lib/rubygems/config_file.rb:251
   B: lib/rubygems/package/tar_header.rb:178
   C: lib/rubygems/source_info_cache_entry.rb:49

    def ==(other)
A:   (self.class.===(other) and ((@backtrace == other.backtrace) and  
((@benchmark == other.benchmark) and ((@bulk_threshold ==  
other.bulk_threshold) and ((@verbose == other.verbose) and  
((@update_sources == other.update_sources) and (@hash ==  
B:   (self.class.===(other) and ((@checksum == other.checksum) and  
((@devmajor == other.devmajor) and ((@devminor == other.devminor) and  
((@gid == other.gid) and ((@gname == other.gname) and ((@linkname ==  
other.linkname) and ((@magic == other.magic) and ((@mode ==  
other.mode) and ((@mtime == other.mtime) and ((@name == other.name)  
and ((@prefix == other.prefix) and ((@size == other.size) and  
((@typeflag == other.typeflag) and ((@uid == other.uid) and ((@uname  
== other.uname) and (@version == other.version)))))))))))))))))
C:   (self.class.===(other) and ((@size == other.size) and  
(@source_index == other.source_index)))

3) IDENTICAL code found in :block (mass*2 = 100)
   A: lib/rubygems/indexer.rb:234
   B: lib/rubygems/indexer.rb:250

    platform = spec.original_platform
    platform = Gem::Platform::RUBY if (platform.nil? or platform.empty?)
    [spec.name, spec.version, platform]

4) Similar code found in :if (mass = 98)
   A: lib/rubygems/security.rb:696
   B: lib/rubygems/security.rb:708

A: if opt[:save_key] then
B: if opt[:save_cert] then
A:   path[:key] = (opt[:save_key_path] or (opt[:output_fmt] %  
B:   path[:cert] = (opt[:save_cert_path] or (opt[:output_fmt] %  
A:   File.open(path[:key], "wb") do |file|
B:   File.open(path[:cert], "wb") do |file|
A:     file.chmod(opt[:perms][:signing_key])
B:     file.chmod(opt[:perms][:signing_cert])
A:     file.write(key.to_pem)
B:     file.write(cert.to_pem)

More information about the Rubygems-developers mailing list