-
Notifications
You must be signed in to change notification settings - Fork 276
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use simple Thor tasks for release management instead of Jeweler
- Loading branch information
Showing
4 changed files
with
118 additions
and
44 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
module GemHelpers | ||
|
||
def generate_gemspec | ||
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), "lib"))) | ||
require "webrat" | ||
|
||
Gem::Specification.new do |s| | ||
s.name = "webrat" | ||
s.version = Webrat::VERSION | ||
s.author = "Bryan Helmkamp" | ||
s.email = "bryan@brynary.com" | ||
s.homepage = "http://github.com/brynary/webrat" | ||
s.summary = "Ruby Acceptance Testing for Web applications" | ||
s.description = <<-EOS.strip | ||
Webrat lets you quickly write expressive and robust acceptance tests | ||
for a Ruby web application. It supports simulating a browser inside | ||
a Ruby process to avoid the performance hit and browser dependency of | ||
Selenium or Watir, but the same API can also be used to drive real | ||
Selenium tests when necessary (eg. for testing AJAX interactions). | ||
Most Ruby web frameworks and testing frameworks are supported. | ||
EOS | ||
s.rubyforge_project = "webrat" | ||
|
||
require "git" | ||
repo = Git.open(".") | ||
|
||
s.files = normalize_files(repo.ls_files.keys - repo.lib.ignored_files) | ||
s.test_files = normalize_files(Dir['spec/**/*.rb'] - repo.lib.ignored_files) | ||
|
||
s.has_rdoc = true | ||
s.extra_rdoc_files = %w[README.rdoc MIT-LICENSE.txt History.txt] | ||
|
||
s.add_dependency "nokogiri", ">= 1.2.0" | ||
s.add_dependency "rack", ">= 1.0" | ||
end | ||
end | ||
|
||
def normalize_files(array) | ||
# only keep files, no directories, and sort | ||
array.select do |path| | ||
File.file?(path) | ||
end.sort | ||
end | ||
|
||
# Adds extra space when outputting an array. This helps create better version | ||
# control diffs, because otherwise it is all on the same line. | ||
def prettyify_array(gemspec_ruby, array_name) | ||
gemspec_ruby.gsub(/s\.#{array_name.to_s} = \[.+?\]/) do |match| | ||
leadin, files = match[0..-2].split("[") | ||
leadin + "[\n #{files.split(",").join(",\n ")}\n ]" | ||
end | ||
end | ||
|
||
def read_gemspec | ||
@read_gemspec ||= eval(File.read("webrat.gemspec")) | ||
end | ||
|
||
def sh(command) | ||
puts command | ||
system command | ||
end | ||
end | ||
|
||
class Default < Thor | ||
include GemHelpers | ||
|
||
desc "gemspec", "Regenerate webrat.gemspec" | ||
def gemspec | ||
File.open("webrat.gemspec", "w") do |file| | ||
gemspec_ruby = generate_gemspec.to_ruby | ||
gemspec_ruby = prettyify_array(gemspec_ruby, :files) | ||
gemspec_ruby = prettyify_array(gemspec_ruby, :test_files) | ||
gemspec_ruby = prettyify_array(gemspec_ruby, :extra_rdoc_files) | ||
|
||
file.write gemspec_ruby | ||
end | ||
|
||
puts "Wrote gemspec to webrat.gemspec" | ||
read_gemspec.validate | ||
end | ||
|
||
desc "build", "Build a webrat gem" | ||
def build | ||
sh "gem build webrat.gemspec" | ||
FileUtils.mkdir_p "pkg" | ||
FileUtils.mv read_gemspec.file_name, "pkg" | ||
end | ||
|
||
desc "install", "Install the latest built gem" | ||
def install | ||
sh "gem install --local pkg/#{read_gemspec.file_name}" | ||
end | ||
|
||
desc "release", "Release the current branch to GitHub and Gemcutter" | ||
def release | ||
gemspec | ||
build | ||
Release.new.tag | ||
Release.new.gem | ||
end | ||
end | ||
|
||
class Release < Thor | ||
include GemHelpers | ||
|
||
desc "tag", "Tag the gem on the origin server" | ||
def tag | ||
release_tag = "v#{read_gemspec.version}" | ||
sh "git tag -a #{release_tag} -m 'Tagging #{release_tag}'" | ||
sh "git push origin #{release_tag}" | ||
end | ||
|
||
desc "gem", "Push the gem to Gemcutter" | ||
def gem | ||
sh "gem push pkg/#{read_gemspec.file_name}" | ||
end | ||
end |