class Gemologist::AbstractGemfile

Attributes

path[R]

Public Class Methods

new(path) click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 11
def initialize(path)
  @path = path
end

Public Instance Methods

dependencies() click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 19
def dependencies
  @dependencies ||= ast.each_node.with_object([]) do |node, dependencies|
    next unless dependency_class.valid_node?(node)

    dependencies << dependency_class.new(node, source_rewriter)
  end
end
find_dependency(name) click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 15
def find_dependency(name)
  dependencies.find { |dep| dep.name == name }
end
rewrite!() click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 32
def rewrite!
  Gemologist::UI.deprecate("#{self.class.name}##{__method__}", replacement: '#save')
  save
end
save() click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 27
def save
  rewritten_source = source_rewriter.process
  File.write(path, rewritten_source)
end

Private Instance Methods

ast() click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 43
def ast
  @ast ||= begin
    builder = Astrolabe::Builder.new
    parser = Parser::CurrentRuby.new(builder)
    parser.parse(source_buffer)
  end
end
dependency_class() click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 39
def dependency_class
  raise NotImplementedError
end
source_buffer() click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 60
def source_buffer
  @source_buffer ||= Parser::Source::Buffer.new(path).read
end
source_rewriter() click to toggle source
# File lib/gemologist/abstract_gemfile.rb, line 51
def source_rewriter
  @source_rewriter ||= Parser::Source::TreeRewriter.new(
    source_buffer,
    crossing_deletions: :accept,
    different_replacements: :raise,
    swallowed_insertions: :raise
  )
end