To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / lib / plugins / acts_as_versioned / Rakefile @ 1298:4f746d8966dd

History | View | Annotate | Download (5.82 KB)

1
require 'rubygems'
2

    
3
Gem::manage_gems
4

    
5
require 'rake/rdoctask'
6
require 'rake/packagetask'
7
require 'rake/gempackagetask'
8
require 'rake/testtask'
9
require 'rake/contrib/rubyforgepublisher'
10

    
11
PKG_NAME           = 'acts_as_versioned'
12
PKG_VERSION        = '0.3.1'
13
PKG_FILE_NAME      = "#{PKG_NAME}-#{PKG_VERSION}"
14
PROD_HOST          = "technoweenie@bidwell.textdrive.com"
15
RUBY_FORGE_PROJECT = 'ar-versioned'
16
RUBY_FORGE_USER    = 'technoweenie'
17

    
18
desc 'Default: run unit tests.'
19
task :default => :test
20

    
21
desc 'Test the calculations plugin.'
22
Rake::TestTask.new(:test) do |t|
23
  t.libs << 'lib'
24
  t.pattern = 'test/**/*_test.rb'
25
  t.verbose = true
26
end
27

    
28
desc 'Generate documentation for the calculations plugin.'
29
Rake::RDocTask.new(:rdoc) do |rdoc|
30
  rdoc.rdoc_dir = 'rdoc'
31
  rdoc.title    = "#{PKG_NAME} -- Simple versioning with active record models"
32
  rdoc.options << '--line-numbers --inline-source'
33
  rdoc.rdoc_files.include('README', 'CHANGELOG', 'RUNNING_UNIT_TESTS')
34
  rdoc.rdoc_files.include('lib/**/*.rb')
35
end
36

    
37
spec = Gem::Specification.new do |s|
38
  s.name            = PKG_NAME
39
  s.version         = PKG_VERSION
40
  s.platform        = Gem::Platform::RUBY
41
  s.summary         = "Simple versioning with active record models"
42
  s.files           = FileList["{lib,test}/**/*"].to_a + %w(README MIT-LICENSE CHANGELOG RUNNING_UNIT_TESTS)
43
  s.files.delete      "acts_as_versioned_plugin.sqlite.db"
44
  s.files.delete      "acts_as_versioned_plugin.sqlite3.db"
45
  s.files.delete      "test/debug.log"
46
  s.require_path    = 'lib'
47
  s.autorequire     = 'acts_as_versioned'
48
  s.has_rdoc        = true
49
  s.test_files      = Dir['test/**/*_test.rb']
50
  s.add_dependency    'activerecord', '>= 1.10.1'
51
  s.add_dependency    'activesupport', '>= 1.1.1'
52
  s.author          = "Rick Olson"
53
  s.email           = "technoweenie@gmail.com"
54
  s.homepage        = "http://techno-weenie.net"
55
end
56

    
57
Rake::GemPackageTask.new(spec) do |pkg|
58
  pkg.need_tar = true
59
end
60

    
61
desc "Publish the API documentation"
62
task :pdoc => [:rdoc] do
63
  Rake::RubyForgePublisher.new(RUBY_FORGE_PROJECT, RUBY_FORGE_USER).upload
64
end
65

    
66
desc 'Publish the gem and API docs'
67
task :publish => [:pdoc, :rubyforge_upload]
68

    
69
desc "Publish the release files to RubyForge."
70
task :rubyforge_upload => :package do
71
  files = %w(gem tgz).map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
72

    
73
  if RUBY_FORGE_PROJECT then
74
    require 'net/http'
75
    require 'open-uri'
76

    
77
    project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
78
    project_data = open(project_uri) { |data| data.read }
79
    group_id = project_data[/[?&]group_id=(\d+)/, 1]
80
    raise "Couldn't get group id" unless group_id
81

    
82
    # This echos password to shell which is a bit sucky
83
    if ENV["RUBY_FORGE_PASSWORD"]
84
      password = ENV["RUBY_FORGE_PASSWORD"]
85
    else
86
      print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
87
      password = STDIN.gets.chomp
88
    end
89

    
90
    login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
91
      data = [
92
        "login=1",
93
        "form_loginname=#{RUBY_FORGE_USER}",
94
        "form_pw=#{password}"
95
      ].join("&")
96
      http.post("/account/login.php", data)
97
    end
98

    
99
    cookie = login_response["set-cookie"]
100
    raise "Login failed" unless cookie
101
    headers = { "Cookie" => cookie }
102

    
103
    release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
104
    release_data = open(release_uri, headers) { |data| data.read }
105
    package_id = release_data[/[?&]package_id=(\d+)/, 1]
106
    raise "Couldn't get package id" unless package_id
107

    
108
    first_file = true
109
    release_id = ""
110

    
111
    files.each do |filename|
112
      basename  = File.basename(filename)
113
      file_ext  = File.extname(filename)
114
      file_data = File.open(filename, "rb") { |file| file.read }
115

    
116
      puts "Releasing #{basename}..."
117

    
118
      release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
119
        release_date = Time.now.strftime("%Y-%m-%d %H:%M")
120
        type_map = {
121
          ".zip"    => "3000",
122
          ".tgz"    => "3110",
123
          ".gz"     => "3110",
124
          ".gem"    => "1400"
125
        }; type_map.default = "9999"
126
        type = type_map[file_ext]
127
        boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
128

    
129
        query_hash = if first_file then
130
          {
131
            "group_id" => group_id,
132
            "package_id" => package_id,
133
            "release_name" => PKG_FILE_NAME,
134
            "release_date" => release_date,
135
            "type_id" => type,
136
            "processor_id" => "8000", # Any
137
            "release_notes" => "",
138
            "release_changes" => "",
139
            "preformatted" => "1",
140
            "submit" => "1"
141
          }
142
        else
143
          {
144
            "group_id" => group_id,
145
            "release_id" => release_id,
146
            "package_id" => package_id,
147
            "step2" => "1",
148
            "type_id" => type,
149
            "processor_id" => "8000", # Any
150
            "submit" => "Add This File"
151
          }
152
        end
153

    
154
        query = "?" + query_hash.map do |(name, value)|
155
          [name, URI.encode(value)].join("=")
156
        end.join("&")
157

    
158
        data = [
159
          "--" + boundary,
160
          "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
161
          "Content-Type: application/octet-stream",
162
          "Content-Transfer-Encoding: binary",
163
          "", file_data, ""
164
          ].join("\x0D\x0A")
165

    
166
        release_headers = headers.merge(
167
          "Content-Type" => "multipart/form-data; boundary=#{boundary}"
168
        )
169

    
170
        target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
171
        http.post(target + query, data, release_headers)
172
      end
173

    
174
      if first_file then
175
        release_id = release_response.body[/release_id=(\d+)/, 1]
176
        raise("Couldn't get release id") unless release_id
177
      end
178

    
179
      first_file = false
180
    end
181
  end
182
end