module GemfileInterpreter::Parser

Public Class Methods

parse(gems, dependencies) click to toggle source
# File lib/gemfile_interpreter/parser.rb, line 6
def parse gems, dependencies
  hash = {}
  gems.each do |gem|
    hash[gem.name] = parse_gem gem, dependencies
  end
  hash
end
parse_gem(gem, dependencies) click to toggle source
# File lib/gemfile_interpreter/parser.rb, line 14
def parse_gem gem, dependencies
  hash = {}
  [:version, :full_name, :platform, :remote].map do |method|
    hash[method.to_s] = gem.send(method).to_s
  end
  hash['source'] = parse_source gem.source
  hash['in_gemfile'] = dependencies.any? {|d| d.name == gem.name }
  hash
end
parse_source(source) click to toggle source
# File lib/gemfile_interpreter/parser.rb, line 24
def parse_source source
  source_type = if source.is_a? Bundler::Source::Rubygems
    'rubygems'
  elsif source.is_a? Bundler::Source::Git
    'git'
  elsif source.is_a? Bundler::Source::Path
    raise NotImplementedError, "A gem from a local path is currently not supported"
  else
    raise "unknown type #{source.inspect}"
  end
  {'type' => source_type}.merge(source.options)
end