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