class Dpl::Support::Gems::Parse

Public Instance Methods

gems() click to toggle source
# File lib/dpl/support/gems.rb, line 29
def gems
  return [] unless sexp
  walk(*sexp).flatten.each_slice(3).to_a
end
sexp() click to toggle source
# File lib/dpl/support/gems.rb, line 67
def sexp
  Ripper.sexp(code)
end
walk(key, *nodes) click to toggle source
# File lib/dpl/support/gems.rb, line 34
def walk(key, *nodes)
  case key
  when :program
    nodes[0].map { |node| walk(*node) }.compact
  when :module
    walk(*nodes[1])
  when :class
    walk(*nodes[2])
  when :bodystmt
    nodes[0].map { |node| walk(*node) }.compact
  when :command
    walk(*nodes[1]) if nodes[0][1] == 'gem'
  when :args_add_block
    args = nodes[0].map { |node| walk(*node) }
    opts = args.last.is_a?(Hash) ? args.pop : {}
    name, version = *args
    [name, version, opts]
  when :bare_assoc_hash
    walk(*nodes[0][0])
  when :assoc_new
    [nodes.map { |node| walk(*node) }].to_h
  when :@label
    nodes.first.sub(':', '').to_sym
  when :string_literal
    walk(*nodes[0])
  when :string_content
    nodes[0][1]
    # when :void_stmt
    # else
    #   raise key.to_s
  end
end