class Bundler::Dependency

def autorequire

def autorequire
  return @autorequire if defined?(@autorequire)
  @autorequire = Array(@options["require"] || []) if @options.key?("require")
end

def branch

def branch
  return @branch if defined?(@branch)
  @branch = @options["branch"]
end

def current_env?

def current_env?
  return true unless env
  if env.is_a?(Hash)
    env.all? do |key, val|
      ENV[key.to_s] && (val.is_a?(String) ? ENV[key.to_s] == val : ENV[key.to_s] =~ val)
    end
  else
    ENV[env.to_s]
  end
end

def current_platform?

def current_platform?
  return true if platforms.empty?
  platforms.any? do |p|
    Bundler.current_ruby.send("#{p}?")
  end
end

def env

def env
  return @env if defined?(@env)
  @env = @options["env"]
end

def expanded_platforms

def expanded_platforms
  @expanded_platforms ||= platforms.filter_map {|pl| CurrentRuby::PLATFORM_MAP[pl] }.flatten.uniq
end

def force_ruby_platform

def force_ruby_platform
  return @force_ruby_platform if defined?(@force_ruby_platform)
  @force_ruby_platform = @options["force_ruby_platform"]
end

def gem_platforms(valid_platforms)

passed in the `valid_platforms` parameter
Returns the platforms this dependency is valid for, in the same order as
def gem_platforms(valid_platforms)
  return RUBY_PLATFORM_ARRAY if force_ruby_platform
  return valid_platforms if platforms.empty?
  valid_platforms.select {|p| expanded_platforms.include?(Gem::Platform.generic(p)) }
end

def gemfile

def gemfile
  return @gemfile if defined?(@gemfile)
  @gemfile = @options["gemfile"]
end

def gemfile_dep?

def gemfile_dep?
  !gemspec_dev_dep?
end

def gemspec_dev_dep?

def gemspec_dev_dep?
  @gemspec_dev_dep ||= @options.fetch("gemspec_dev_dep", false)
end

def git

def git
  return @git if defined?(@git)
  @git = @options["git"]
end

def github

def github
  return @github if defined?(@github)
  @github = @options["github"]
end

def glob

def glob
  return @glob if defined?(@glob)
  @glob = @options["glob"]
end

def groups

def groups
  @groups ||= Array(@options["group"] || :default).map(&:to_sym)
end

def initialize(name, version, options = {}, &blk)

def initialize(name, version, options = {}, &blk)
  type = options["type"] || :runtime
  super(name, version, type)
  @options = options
end

def path

def path
  return @path if defined?(@path)
  @path = @options["path"]
end

def platforms

def platforms
  @platforms ||= Array(@options["platforms"])
end

def ref

def ref
  return @ref if defined?(@ref)
  @ref = @options["ref"]
end

def should_include

def should_include
  @should_include ||= @options.fetch("should_include", true)
end

def should_include?

def should_include?
  should_include && current_env? && current_platform?
end

def source

def source
  return @source if defined?(@source)
  @source = @options["source"]
end

def specific?

def specific?
  super
rescue NoMethodError
  requirement != ">= 0"
end

def to_lock

def to_lock
  out = super
  out << "!" if source
  out
end