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)
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)
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)
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