# File lib/bones/plugins/gem.rb, line 106 106: def define_tasks 107: config = ::Bones.config 108: 109: namespace :gem do 110: config.gem._spec = Gem::Specification.new do |s| 111: s.name = config.name 112: s.version = config.version 113: s.summary = config.summary 114: s.authors = Array(config.authors) 115: s.email = config.email 116: s.homepage = Array(config.url).first 117: s.rubyforge_project = config.name 118: 119: if !config.rubyforge.nil? and config.rubyforge.name 120: s.rubyforge_project = config.rubyforge.name 121: end 122: 123: s.description = config.description 124: 125: config.gem.dependencies.each do |dep| 126: s.add_dependency(*dep) 127: end 128: 129: config.gem.development_dependencies.each do |dep| 130: s.add_development_dependency(*dep) 131: end 132: 133: s.files = config.gem.files 134: s.executables = config.gem.executables.map {|fn| File.basename(fn)} 135: s.extensions = config.gem.files.grep /extconf\.rb$/ 136: 137: s.bindir = 'bin' 138: dirs = Dir["{#{config.libs.join(',')}}"] 139: s.require_paths = dirs unless dirs.empty? 140: 141: if have? :rdoc 142: incl = Regexp.new(config.rdoc.include.join('|')) 143: excl = config.rdoc.exclude.dup.concat ]\.rb$ ^(\.\/|\/)?ext] 144: excl = Regexp.new(excl.join('|')) 145: rdoc_files = config.gem.files.find_all do |fn| 146: case fn 147: when excl; false 148: when incl; true 149: else false end 150: end 151: s.rdoc_options = config.rdoc.opts + ['--main', config.rdoc.main] 152: s.extra_rdoc_files = rdoc_files 153: s.has_rdoc = true 154: end 155: 156: if config.test 157: if test ff, config.test.file 158: s.test_file = config.test.file 159: else 160: s.test_files = config.test.files.to_a 161: end 162: end 163: 164: # Do any extra stuff the user wants 165: config.gem.extras.each do |msg, val| 166: case val 167: when Proc 168: val.call(s.send(msg)) 169: else 170: s.send "#{msg}=", val 171: end 172: end 173: end # Gem::Specification.new 174: 175: ::Bones::GemPackageTask.new(config.gem._spec) do |pkg| 176: pkg.need_tar = config.gem.need_tar 177: pkg.need_zip = config.gem.need_zip 178: end 179: 180: desc 'Package and upload to rubygems.org' 181: task :release => [:clobber, 'gem'] do |t| 182: v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z' 183: abort "Versions don't match #{v} vs #{config.version}" if v != config.version 184: 185: Dir.glob("pkg/#{config.gem._spec.full_name}*.gem").each { |fn| 186: sh "#{GEM} push #{fn}" 187: } 188: end 189: 190: desc 'Show information about the gem' 191: task :debug => 'gem:prereqs' do 192: puts config.gem._spec.to_ruby 193: end 194: 195: desc 'Write the gemspec ' 196: task :spec => 'gem:prereqs' do 197: File.open("#{config.name}.gemspec", 'w') do |f| 198: f.write config.gem._spec.to_ruby 199: end 200: end 201: 202: desc 'Install the gem' 203: task :install => [:clobber, 'gem:package'] do 204: sh "#{SUDO} #{GEM} install --local pkg/#{config.gem._spec.full_name}" 205: 206: # use this version of the command for rubygems > 1.0.0 207: #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{config.gem._spec.full_name}" 208: end 209: 210: desc 'Uninstall the gem' 211: task :uninstall do 212: installed_list = Gem.source_index.find_name(config.name) 213: if installed_list and installed_list.collect { |s| s.version.to_s}.include?(config.version) then 214: sh "#{SUDO} #{GEM} uninstall --version '#{config.version}' --ignore-dependencies --executables #{config.name}" 215: end 216: end 217: 218: desc 'Reinstall the gem' 219: task :reinstall => [:uninstall, :install] 220: 221: desc 'Cleanup the gem' 222: task :cleanup do 223: sh "#{SUDO} #{GEM} cleanup #{config.gem._spec.name}" 224: end 225: 226: desc 'Install gem dependencies' 227: task :install_dependencies => 'gem:prereqs' do 228: installer = Gem::DependencyInstaller.new 229: config.gem._spec.dependencies.each {|dep| 230: next if Gem.available? dep 231: 232: $stdout.puts "Installing #{dep.name}" 233: installer.install dep 234: installer.installed_gems.each {|spec| 235: $stdout.puts "Successfully installed #{spec.full_name}" 236: } 237: } 238: end 239: end # namespace :gem 240: 241: desc 'Alias to gem:package' 242: task :gem => 'gem:package' 243: 244: task :clobber => 'gem:clobber_package' 245: remove_desc_for_task 'gem:clobber_package' 246: end
# File lib/bones/plugins/gem.rb, line 32 32: def initialize_gem 33: ::Bones.config { 34: desc 'Configuration settings for gem packaging.' 35: gem { 36: dependencies Array.new, :desc => Array of gem dependencies. A convenience method is provided to add gem dependencies, and so you should not muck about with this configuration setting manually. | depend_on 'rake' | depend_on 'rspec', '1.2.8' # expands to '>= 1.2.8' | depend_on 'main', '~> 2.0' 37: 38: development_dependencies Array.new, :desc => Array of development gem dependencies. A convenience method is provided to add gem dependencies, and so you should not muck about with this configuration setting manually. | depend_on 'bones', :development => true | depend_on 'mocha', :version => '0.9.8', :development => true 39: 40: executables nil, :desc => Array of executables provided by your project. All files in the 'bin' folder will be included by default. However, if you are using a non-standard location for your executables then you will need to include them explicitly here as an Array. 41: 42: extensions FileList['ext/**/extconf.rb'], :desc => Array of gem extensions. This is the list of 'extconf.rb' files provided by your project. Rubygems uses this list of files to compile extensions when installing your gem. 43: 44: files nil, :desc => The list of files to include when packaging up your gem. This defaults to all files in the current directory excluding those matched by the 'exclude' option and the 'ignore_file'. You can supply your Array of files if you desire. 45: 46: need_tar true, :desc => When set to true a tar-gzip file will be produced along with your gem. The default is true. 47: 48: need_zip false, :desc => When set to true a zip file will be produced along with your gem. The default is false. 49: 50: extras Hash.new, :desc => A hash of extra Gem::Specification settings that are otherwise not provided for by Mr Bones. You will need to refer to the rubygems documentation for a complete list of specification settings. 51: } 52: } 53: 54: have?(:gem) { true } 55: end
Scans the current working directory and creates a list of files that are candidates to be in the manifest.
# File lib/bones/plugins/gem.rb, line 251 251: def manifest 252: config = ::Bones.config 253: files = [] 254: exclude = config.exclude.dup 255: comment = /^\s*#/ 256: 257: # process the ignore file and add the items there to the exclude list 258: if test(ff, config.ignore_file) 259: ary = [] 260: File.readlines(config.ignore_file).each do |line| 261: next if line =~ comment 262: line.chomp! 263: line.strip! 264: next if line.nil? or line.empty? 265: 266: glob = line =~ /\*\./ ? File.join('**', line) : line 267: Dir.glob(glob).each {|fn| ary << "^#{Regexp.escape(fn)}"} 268: end 269: exclude.concat ary 270: end 271: 272: # generate a regular expression from the exclude list 273: exclude = Regexp.new(exclude.join('|')) 274: 275: Find.find '.' do |path| 276: path.sub! /^(\.\/|\/)/, '' 277: next unless test ff, path 278: next if path =~ exclude 279: files << path 280: end 281: files.sort! 282: end
# File lib/bones/plugins/gem.rb, line 98 98: def post_load 99: config = ::Bones.config 100: 101: config.gem.files ||= manifest 102: config.gem.executables ||= config.gem.files.find_all {|fn| fn =~ /^bin/} 103: config.gem.development_dependencies << ['bones', ">= #{Bones.version}"] 104: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.