class MG
Attributes
gemspec[RW]
Public Class Methods
new(gemspec)
click to toggle source
# File lib/mg.rb, line 8 def initialize(gemspec) @gemspec = gemspec define_tasks end
Public Instance Methods
name()
click to toggle source
# File lib/mg.rb, line 14 def name spec.name end
spec()
click to toggle source
# File lib/mg.rb, line 18 def spec @spec ||= begin require "rubygems/specification" eval File.read(gemspec) end end
Private Instance Methods
define_tasks()
click to toggle source
# File lib/mg.rb, line 30 def define_tasks directory "dist/" CLOBBER.include("dist") desc "Build and install as local gem" task "gem:install" => package(".gem") do sh "gem install #{package(".gem")}" end desc "Build gem into dist/" task :gem => package('.gem') desc "Build gem and tarball into dist/" task :package => %w(.gem .tar.gz).map { |ext| package(ext) } desc "Build the tarball in dist/" file package(".tar.gz") => "dist/" do |f| sh <<-SH git archive \ --prefix=#{name}-#{spec.version}/ \ --format=tar \ HEAD | gzip > #{f.name} SH end desc "Build the gem in dist/" file package(".gem") => "dist/" do |f| sh "gem build #{name}.gemspec" mv File.basename(f.name), f.name end desc "Push the gem to RubyGems.org" task "gem:publish" => package(".gem") do Rake::Task[:test].invoke if Rake::Task.task_defined?(:test) Rake::Task[:spec].invoke if Rake::Task.task_defined?(:spec) sh "gem push #{package(".gem")}" end # Legacy task :gemcutter => :publish end
package(ext="")
click to toggle source
# File lib/mg.rb, line 26 def package(ext="") "dist/#{spec.name}-#{spec.version}" + ext end