Sha256: 53fa2b4aa3b707bdc53571d8cc59ca4f13564772e6b7cbf971a501c82197b78a

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

require 'appraisal/dependency'
require 'appraisal/gemspec'

module Appraisal
  # Load bundler Gemfiles and merge dependencies
  class Gemfile
    attr_reader :dependencies

    def initialize
      @dependencies = {}
    end

    def load(path)
      run(IO.read(path))
    end

    def run(definitions)
      instance_eval(definitions, __FILE__, __LINE__)
    end

    def gem(name, *requirements)
      @dependencies[name] = Dependency.new(name, requirements)
    end

    def source(source)
      @source = source
    end

    def to_s
      [source_entry, dependencies_entry, gemspec_entry].join("\n\n")
    end

    def dup
      gemfile = Gemfile.new
      gemfile.source @source
      dependencies.values.each do |dependency|
        gemfile.gem(dependency.name, *dependency.requirements)
      end
      gemfile.gemspec(@gemspec.options) if @gemspec
      gemfile
    end

    def gemspec(options = {})
      @gemspec = Gemspec.new(options)
    end

    protected

    def source_entry
      %(source "#{@source}")
    end

    def dependencies_entry
      dependencies.values.map { |dependency| dependency.to_s }.join("\n")
    end

    def gemspec_entry
      @gemspec.to_s
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
appraisal-0.3.8 lib/appraisal/gemfile.rb
appraisal-0.3.7 lib/appraisal/gemfile.rb
appraisal-0.3.6 lib/appraisal/gemfile.rb
appraisal-0.3.5 lib/appraisal/gemfile.rb