[Rubygems-developers] Flaying rubygems

Daniel Berger djberg96 at gmail.com
Sat Jan 3 22:00:51 EST 2009


Ryan Davis wrote:
> 
> 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 == other.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)))
>    end
> 
> 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] % 
> "private_key"))
> B:   path[:cert] = (opt[:save_cert_path] or (opt[:output_fmt] % 
> "public_cert"))
> 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)
>      end
>    end

That definitely looks nicer Ryan. I look forward to the next version. :)

Regards,

Dan

PS - Have you flayed MRI yet?


More information about the Rubygems-developers mailing list