jordimassaguerpla/gems-status

View on GitHub
lib/gems-status/sources/lockfile_gems.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "rubygems"
require "xmlsimple"
require "open-uri"
require "zlib"

require "bundler"
require "gems-status/gem_simple"
require "gems-status/utils"

module GemsStatus

  class LockfileGems
    attr_reader :filename
    def initialize(conf)
      Utils::check_parameters('LockfileGems', conf, ["filename", "gems_url"])
      @filename = conf['filename']
      @gems_url = conf['gems_url']
    end

    def get_data(dirname, filename)
      data = ""
      Dir.chdir(dirname) do
        begin
          data = File.read(filename)
        rescue
          Utils::log_error("?", "There was a problem opening file #{filename} ")
        end
      end
      return data
    end

    def gem_list
      gems = {}
      Utils::log_debug "reading #{@filename}"
      Dir.chdir(File.dirname(@filename)) do
        file_data = get_data(File::dirname(@filename), File::basename(@filename))
        if file_data.empty?
          Utils::log_error("?", "file empty #{@filename}")
          return
        end
        lockfile = Bundler::LockfileParser.new(file_data)
        lockfile.specs.each do |spec|
          version = Gem::Version.create(spec.version)
          Utils::log_debug "dependencies for #{spec.name} #{spec.dependencies}"
          gems[spec.name] = GemSimple.new(spec.name, version , nil, 
                                             @filename, gems_url(spec), 
                                             spec.dependencies)
        end
      end
      gems
    end

    private

    def gems_url(spec)
      if spec.source.class.name == "Bundler::Source::Git"
        Utils::log_debug "this comes from git #{spec.name} #{spec.version}"
        spec.source.uri
      else
        @gems_url
      end
    end
  end
end