You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							182 lines
						
					
					
						
							5.6 KiB
						
					
					
				
			
		
		
	
	
							182 lines
						
					
					
						
							5.6 KiB
						
					
					
				require 'rubygems'
 | 
						|
 | 
						|
Gem::manage_gems
 | 
						|
 | 
						|
require 'rake/rdoctask'
 | 
						|
require 'rake/packagetask'
 | 
						|
require 'rake/gempackagetask'
 | 
						|
require 'rake/testtask'
 | 
						|
require 'rake/contrib/rubyforgepublisher'
 | 
						|
 | 
						|
PKG_NAME           = 'acts_as_versioned'
 | 
						|
PKG_VERSION        = '0.3.1'
 | 
						|
PKG_FILE_NAME      = "#{PKG_NAME}-#{PKG_VERSION}"
 | 
						|
PROD_HOST          = "technoweenie@bidwell.textdrive.com"
 | 
						|
RUBY_FORGE_PROJECT = 'ar-versioned'
 | 
						|
RUBY_FORGE_USER    = 'technoweenie'
 | 
						|
 | 
						|
desc 'Default: run unit tests.'
 | 
						|
task :default => :test
 | 
						|
 | 
						|
desc 'Test the calculations plugin.'
 | 
						|
Rake::TestTask.new(:test) do |t|
 | 
						|
  t.libs << 'lib'
 | 
						|
  t.pattern = 'test/**/*_test.rb'
 | 
						|
  t.verbose = true
 | 
						|
end
 | 
						|
 | 
						|
desc 'Generate documentation for the calculations plugin.'
 | 
						|
Rake::RDocTask.new(:rdoc) do |rdoc|
 | 
						|
  rdoc.rdoc_dir = 'rdoc'
 | 
						|
  rdoc.title    = "#{PKG_NAME} -- Simple versioning with active record models"
 | 
						|
  rdoc.options << '--line-numbers --inline-source'
 | 
						|
  rdoc.rdoc_files.include('README', 'CHANGELOG', 'RUNNING_UNIT_TESTS')
 | 
						|
  rdoc.rdoc_files.include('lib/**/*.rb')
 | 
						|
end
 | 
						|
 | 
						|
spec = Gem::Specification.new do |s|
 | 
						|
  s.name            = PKG_NAME
 | 
						|
  s.version         = PKG_VERSION
 | 
						|
  s.platform        = Gem::Platform::RUBY
 | 
						|
  s.summary         = "Simple versioning with active record models"
 | 
						|
  s.files           = FileList["{lib,test}/**/*"].to_a + %w(README MIT-LICENSE CHANGELOG RUNNING_UNIT_TESTS)
 | 
						|
  s.files.delete      "acts_as_versioned_plugin.sqlite.db"
 | 
						|
  s.files.delete      "acts_as_versioned_plugin.sqlite3.db"
 | 
						|
  s.files.delete      "test/debug.log"
 | 
						|
  s.require_path    = 'lib'
 | 
						|
  s.autorequire     = 'acts_as_versioned'
 | 
						|
  s.has_rdoc        = true
 | 
						|
  s.test_files      = Dir['test/**/*_test.rb']
 | 
						|
  s.add_dependency    'activerecord', '>= 1.10.1'
 | 
						|
  s.add_dependency    'activesupport', '>= 1.1.1'
 | 
						|
  s.author          = "Rick Olson"
 | 
						|
  s.email           = "technoweenie@gmail.com"
 | 
						|
  s.homepage        = "http://techno-weenie.net"
 | 
						|
end
 | 
						|
 | 
						|
Rake::GemPackageTask.new(spec) do |pkg|
 | 
						|
  pkg.need_tar = true
 | 
						|
end
 | 
						|
 | 
						|
desc "Publish the API documentation"
 | 
						|
task :pdoc => [:rdoc] do
 | 
						|
  Rake::RubyForgePublisher.new(RUBY_FORGE_PROJECT, RUBY_FORGE_USER).upload
 | 
						|
end
 | 
						|
 | 
						|
desc 'Publish the gem and API docs'
 | 
						|
task :publish => [:pdoc, :rubyforge_upload]
 | 
						|
 | 
						|
desc "Publish the release files to RubyForge."
 | 
						|
task :rubyforge_upload => :package do
 | 
						|
  files = %w(gem tgz).map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
 | 
						|
 | 
						|
  if RUBY_FORGE_PROJECT then
 | 
						|
    require 'net/http'
 | 
						|
    require 'open-uri'
 | 
						|
 | 
						|
    project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
 | 
						|
    project_data = open(project_uri) { |data| data.read }
 | 
						|
    group_id = project_data[/[?&]group_id=(\d+)/, 1]
 | 
						|
    raise "Couldn't get group id" unless group_id
 | 
						|
 | 
						|
    # This echos password to shell which is a bit sucky
 | 
						|
    if ENV["RUBY_FORGE_PASSWORD"]
 | 
						|
      password = ENV["RUBY_FORGE_PASSWORD"]
 | 
						|
    else
 | 
						|
      print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
 | 
						|
      password = STDIN.gets.chomp
 | 
						|
    end
 | 
						|
 | 
						|
    login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
 | 
						|
      data = [
 | 
						|
        "login=1",
 | 
						|
        "form_loginname=#{RUBY_FORGE_USER}",
 | 
						|
        "form_pw=#{password}"
 | 
						|
      ].join("&")
 | 
						|
      http.post("/account/login.php", data)
 | 
						|
    end
 | 
						|
 | 
						|
    cookie = login_response["set-cookie"]
 | 
						|
    raise "Login failed" unless cookie
 | 
						|
    headers = { "Cookie" => cookie }
 | 
						|
 | 
						|
    release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
 | 
						|
    release_data = open(release_uri, headers) { |data| data.read }
 | 
						|
    package_id = release_data[/[?&]package_id=(\d+)/, 1]
 | 
						|
    raise "Couldn't get package id" unless package_id
 | 
						|
 | 
						|
    first_file = true
 | 
						|
    release_id = ""
 | 
						|
 | 
						|
    files.each do |filename|
 | 
						|
      basename  = File.basename(filename)
 | 
						|
      file_ext  = File.extname(filename)
 | 
						|
      file_data = File.open(filename, "rb") { |file| file.read }
 | 
						|
 | 
						|
      puts "Releasing #{basename}..."
 | 
						|
 | 
						|
      release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
 | 
						|
        release_date = Time.now.strftime("%Y-%m-%d %H:%M")
 | 
						|
        type_map = {
 | 
						|
          ".zip"    => "3000",
 | 
						|
          ".tgz"    => "3110",
 | 
						|
          ".gz"     => "3110",
 | 
						|
          ".gem"    => "1400"
 | 
						|
        }; type_map.default = "9999"
 | 
						|
        type = type_map[file_ext]
 | 
						|
        boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
 | 
						|
 | 
						|
        query_hash = if first_file then
 | 
						|
          {
 | 
						|
            "group_id" => group_id,
 | 
						|
            "package_id" => package_id,
 | 
						|
            "release_name" => PKG_FILE_NAME,
 | 
						|
            "release_date" => release_date,
 | 
						|
            "type_id" => type,
 | 
						|
            "processor_id" => "8000", # Any
 | 
						|
            "release_notes" => "",
 | 
						|
            "release_changes" => "",
 | 
						|
            "preformatted" => "1",
 | 
						|
            "submit" => "1"
 | 
						|
          }
 | 
						|
        else
 | 
						|
          {
 | 
						|
            "group_id" => group_id,
 | 
						|
            "release_id" => release_id,
 | 
						|
            "package_id" => package_id,
 | 
						|
            "step2" => "1",
 | 
						|
            "type_id" => type,
 | 
						|
            "processor_id" => "8000", # Any
 | 
						|
            "submit" => "Add This File"
 | 
						|
          }
 | 
						|
        end
 | 
						|
 | 
						|
        query = "?" + query_hash.map do |(name, value)|
 | 
						|
          [name, URI.encode(value)].join("=")
 | 
						|
        end.join("&")
 | 
						|
 | 
						|
        data = [
 | 
						|
          "--" + boundary,
 | 
						|
          "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
 | 
						|
          "Content-Type: application/octet-stream",
 | 
						|
          "Content-Transfer-Encoding: binary",
 | 
						|
          "", file_data, ""
 | 
						|
          ].join("\x0D\x0A")
 | 
						|
 | 
						|
        release_headers = headers.merge(
 | 
						|
          "Content-Type" => "multipart/form-data; boundary=#{boundary}"
 | 
						|
        )
 | 
						|
 | 
						|
        target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
 | 
						|
        http.post(target + query, data, release_headers)
 | 
						|
      end
 | 
						|
 | 
						|
      if first_file then
 | 
						|
        release_id = release_response.body[/release_id=(\d+)/, 1]
 | 
						|
        raise("Couldn't get release id") unless release_id
 | 
						|
      end
 | 
						|
 | 
						|
      first_file = false
 | 
						|
    end
 | 
						|
  end
 | 
						|
end |