class Pessimize::Gemfile

Attributes

gem_token_map[RW]
gems[RW]
tokens[RW]

Public Class Methods

new(contents) click to toggle source
# File lib/pessimize/gemfile.rb, line 8
def initialize(contents)
  self.tokens        = Ripper.lex(contents)
  self.gems          = []
  self.gem_token_map = []

  parse_gems_from_tokens!
end

Public Instance Methods

to_s() click to toggle source
# File lib/pessimize/gemfile.rb, line 16
def to_s
  TokenCompiler.new(tokens).compile_to_string(gems, gem_token_map)
end

Protected Instance Methods

all_gem_tokens_collected?(current_token, next_token) click to toggle source
# File lib/pessimize/gemfile.rb, line 44
def all_gem_tokens_collected?(current_token, next_token)
  [:on_nl, :on_comment].include?(next_token[1])
end
parse_gems_from_tokens!() click to toggle source
# File lib/pessimize/gemfile.rb, line 24
def parse_gems_from_tokens!
  enum = tokens.each_with_index

  loop do
    (tok, i) = enum.next

    if tok[1] == :on_ident && tok[2] == "gem"
      gem_toks = []
      until all_gem_tokens_collected?(tok[0], enum.peek[0])
        (tok, j) = enum.next
        gem_toks << tok
      end

      self.gems << Pessimize::Gem.new(gem_toks)
      self.gem_token_map << [i + 1, j]
    end
  end
rescue StopIteration
end