Sha256: c86b3677ed9a6d980f3b97c6dddbd363189ce7082ef8f34702ac813627e34b0a

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

module DRG
  module Tasks
    class Gemfile
      attr_accessor :file

      def initialize(file = ::Bundler.default_gemfile)
        @file = file
      end

      # Saves a copy of @lines before changing it (note that #dup and #clone weren't working)
      #
      # @param [GemfileLine] gem
      # @param [String] version to update the gem line with
      def update(gem, version)
        lines[gem] = gem.update version
        write
      end

      def remove_version(gem)
        saved_lines << lines.clone!
        lines[gem] = gem.remove_version
        write
      end

      def find_by_name(name)
        lines.each_with_index.each do |line, index|
          next if line =~ /:?path:?\s*(=>)?\s*/
          next if line =~ /:?git(hub)?:?\s*(=>)?\s*/
          return GemfileLine.new line, index, name if line =~ /gem\s*['"]#{name}["']/
        end
        nil
      end

      def write
        File.open file, 'wb' do |f|
          lines.each do |line|
            f << line
          end
        end
      end

      def rollback
        return if saved_lines.empty?
        lines.replace saved_lines.pop
        write
      end

      def saved_lines
        @saved_lines ||= []
      end

      def lines
        @lines ||= File.readlines file
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
drg-0.5.1 lib/drg/tasks/gemfile.rb