class Appraisal::BundlerDSL

def dependencies_entry

def dependencies_entry
  @dependencies.to_s
end

def dependencies_entry_for_dup

def dependencies_entry_for_dup
  @dependencies.for_dup
end

def for_dup

def for_dup
  Utils.join_parts PARTS.map { |part| send("#{part}_entry_for_dup") }
end

def gem(name, *requirements)

def gem(name, *requirements)
  @dependencies.add(name, substitute_git_source(requirements))
end

def gemspec(options = {})

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

def gemspec_entry

def gemspec_entry
  @gemspecs.map(&:to_s).join("\n")
end

def gemspec_entry_for_dup

def gemspec_entry_for_dup
  @gemspecs.map(&:for_dup).join("\n")
end

def git(source, options = {}, &block)

def git(source, options = {}, &block)
  @gits[source] ||=
    Git.new(source, options).tap { |g| g.git_sources = @git_sources.dup }
  @gits[source].run(&block)
end

def git_source(source, &block)

def git_source(source, &block)
  @git_sources[source] = block
end

def group(*names, &block)

def group(*names, &block)
  @groups[names] ||=
    Group.new(names).tap { |g| g.git_sources = @git_sources.dup }
  @groups[names].run(&block)
end

def indent(string)

def indent(string)
  string.strip.gsub(/^(.+)$/, '  \1')
end

def initialize

def initialize
  @sources = []
  @ruby_version = nil
  @dependencies = DependencyList.new
  @gemspecs = []
  @groups = Hash.new
  @platforms = Hash.new
  @gits = Hash.new
  @paths = Hash.new
  @source_blocks = Hash.new
  @git_sources = {}
  @install_if = {}
end

def install_if(condition, &block)

def install_if(condition, &block)
  @install_if[condition] ||=
    Conditional.new(condition).tap { |g| g.git_sources = @git_sources.dup }
  @install_if[condition].run(&block)
end

def path(source, options = {}, &block)

def path(source, options = {}, &block)
  @paths[source] ||=
    Path.new(source, options).tap { |g| g.git_sources = @git_sources.dup }
  @paths[source].run(&block)
end

def platforms(*names, &block)

def platforms(*names, &block)
  @platforms[names] ||=
    Platform.new(names).tap { |g| g.git_sources = @git_sources.dup }
  @platforms[names].run(&block)
end

def remove_gem(name)

def remove_gem(name)
  @dependencies.remove(name)
end

def ruby(ruby_version)

def ruby(ruby_version)
  @ruby_version = ruby_version
end

def ruby_version_entry

def ruby_version_entry
  if @ruby_version
    "ruby #{@ruby_version.inspect}"
  end
end

def run(&block)

def run(&block)
  instance_exec(&block)
end

def source(source, &block)

def source(source, &block)
  if block_given?
    @source_blocks[source] ||=
      Source.new(source).tap { |g| g.git_sources = @git_sources.dup }
    @source_blocks[source].run(&block)
  else
    @sources << source
  end
end

def source_entry

def source_entry
  @sources.uniq.map { |source| "source #{source.inspect}" }.join("\n")
end

def substitute_git_source(requirements)

def substitute_git_source(requirements)
  requirements.each do |requirement|
    if requirement.is_a?(Hash)
      (requirement.keys & @git_sources.keys).each do |matching_source|
        value = requirement.delete(matching_source)
        requirement[:git] = @git_sources[matching_source].call(value)
      end
    end
  end
end

def to_s

def to_s
  Utils.join_parts PARTS.map { |part| send("#{part}_entry") }
end