Sha256: f614a18a49dd39f272c0d77b6a49711bf3e4bfcb33f016475c05d022892df30c

Contents?: true

Size: 1.89 KB

Versions: 42

Compression:

Stored size: 1.89 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'avm/ruby/bundler/incompatible_parser/gem_conflict'
require 'avm/ruby/bundler/incompatible_parser/line_factory'

module Avm
  module Ruby
    module Bundler
      class IncompatibleParser
        class LineBuffer
          class << self
            def from_file(path)
              new(::File.read(path.to_s))
            end
          end

          attr_reader :gems_in_conflict

          def initialize(content)
            self.gems_in_conflict = []
            self.parsing_required = false
            content.each_line { |string_line| add_line(LineFactory.new(string_line)) }
          end

          private

          attr_accessor :parsing_required
          attr_writer :gems_in_conflict

          def add_line(line)
            return if line.blank?

            return if LineFactory::TYPES.any? do |type|
              next false unless line.result.is_a?(type)

              send("on_#{type.name.demodulize.underscore.variableize}_line", line.result)
              true
            end

            return unless parsing_required

            raise(::ArgumentError, "Unparsed line: \"#{line.content}\"")
          end

          def on_gem_conflict_line(result)
            self.parsing_required = true
            gems_in_conflict << result
          end

          def on_in_gemfile_line(result)
            # Do nothing
          end

          def on_depends_on_line(result)
            current_gem_conflict.add_depends_on(result)
          end

          def on_version_requirement_line(result)
            current_gem_conflict.add_version_requirement(result)
          end

          def current_gem_conflict
            raise 'No gems in conflict' if gems_in_conflict.none?
            raise 'Last gem is blank' if gems_in_conflict.last.blank?

            gems_in_conflict.last
          end
        end
      end
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
avm-tools-0.118.0 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.117.3 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.117.2 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.117.1 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.117.0 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.116.2 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.116.1 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.116.0 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.115.0 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.114.2 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.114.1 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.114.0 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.113.6 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.113.5 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.113.4 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.113.3 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.113.2 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.113.1 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.113.0 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb
avm-tools-0.112.0 lib/avm/ruby/bundler/incompatible_parser/line_buffer.rb