Mercurial > hg > soundsoftware-site
comparison vendor/plugins/acts_as_versioned/Rakefile @ 0:513646585e45
* Import Redmine trunk SVN rev 3859
author | Chris Cannam |
---|---|
date | Fri, 23 Jul 2010 15:52:44 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:513646585e45 |
---|---|
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 |