module Jeweler::Specification

def self.filelist_attribute(name)

def self.filelist_attribute(name)
  code = %{
    def #{name}
      if @#{name} && @#{name}.class != FileList
        @#{name} = FileList[@#{name}]
      end
      @#{name} ||= FileList[]
    end
    def #{name}=(value)
      @#{name} = FileList[value]
    end
  }
  module_eval code, __FILE__, __LINE__ - 9
end

def blank?(value)

def blank?(value)
  value.nil? || value.empty?
end

def bundler_dependencies_for(bundler_runtime, *groups)

those gems first.
to be able to tell which gems are listed in the Gemfile without loading
This method was available until Bundler 1.13, and then removed. We need it
Backported (or rather forward-ported) from Bunder::Runtime#dependencies_for.
def bundler_dependencies_for(bundler_runtime, *groups)
  if groups.empty?
    bundler_runtime.dependencies
  else
    bundler_runtime.dependencies.select {|d| (groups & d.groups).any? }
  end
end

def ruby_code(obj)

Used by Specification#to_ruby to generate a ruby-respresentation of a Gem::Specification
def ruby_code(obj)
  case obj
  when Rake::FileList then obj.uniq.to_a.inspect
  else super
  end
end

def set_jeweler_defaults(base_dir, git_base_dir = nil)

Assigns the Jeweler defaults to the Gem::Specification
def set_jeweler_defaults(base_dir, git_base_dir = nil)
  base_dir = File.expand_path(base_dir)
  git_base_dir = if git_base_dir
                   File.expand_path(git_base_dir)
                 else
                   base_dir
                 end
  can_git = git_base_dir && base_dir.include?(git_base_dir) && File.directory?(File.join(git_base_dir, '.git'))
  Dir.chdir(git_base_dir) do
    repo = if can_git
             require 'git'
             Git.open(git_base_dir)
           end
    if blank?(files) && repo
      base_dir_with_trailing_separator = File.join(base_dir, '')
      ignored_files = repo.lib.ignored_files + ['.gitignore']
      self.files = (repo.ls_files(base_dir).keys - ignored_files).compact.map do |file|
        File.expand_path(file).sub(base_dir_with_trailing_separator, '')
      end
    end
    if blank?(executables) && repo
      self.executables = (repo.ls_files(File.join(base_dir, 'bin')).keys - repo.lib.ignored_files).map do |file|
        File.basename(file)
      end
    end
    if blank?(extensions)
      self.extensions = FileList['ext/**/{extconf,mkrf_conf}.rb']
    end
    if blank?(extra_rdoc_files)
      self.extra_rdoc_files = FileList['README*', 'ChangeLog*', 'LICENSE*', 'TODO']
    end
    if File.exist?('Gemfile')
      require 'bundler'
      bundler_runtime = Bundler.load
      bundler_dependencies_for(bundler_runtime, :default, :runtime).each do |dependency|
        add_dependency dependency.name, *dependency.requirement.as_list
      end
      bundler_dependencies_for(bundler_runtime, :development).each do |dependency|
        add_development_dependency dependency.name, *dependency.requirement.as_list
      end
    end
  end
end