Module: GemfileInterpreter::Parser

Defined in:
lib/gemfile_interpreter/parser.rb

Class Method Summary collapse

Class Method Details

.parse(gems, dependencies) ⇒ Object



6
7
8
9
10
11
12
# 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) ⇒ Object



14
15
16
17
18
19
20
21
22
# 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) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# 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