diff --git a/Gemfile b/Gemfile index b8803583..b028e87d 100644 --- a/Gemfile +++ b/Gemfile @@ -3,6 +3,7 @@ source 'http://gemcutter.org' disable_system_gems +gem "git", "1.2.5" gem "rake", "0.8.7" gem "rspec", "1.2.9" gem "diff-lcs", "1.1.2" diff --git a/Rakefile b/Rakefile index a7fd9ee3..1349fa3e 100644 --- a/Rakefile +++ b/Rakefile @@ -1,43 +1,5 @@ require "rubygems" -begin - require 'jeweler' -rescue LoadError - desc "Install gem using sudo" - task(:install) do - $stderr.puts "Jeweler not available. `gem install jeweler` to install this gem" - end -else - Jeweler::Tasks.new do |s| - s.name = "webrat" - 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" - s.extra_rdoc_files = %w[README.rdoc MIT-LICENSE.txt History.txt] - - # Dependencies - s.add_dependency "nokogiri", ">= 1.2.0" - s.add_dependency "rack", ">= 1.0" - - s.add_development_dependency "rails", ">= 2.3" - s.add_development_dependency "merb-core", ">= 1.0" - s.add_development_dependency "launchy" - end - - Jeweler::RubyforgeTasks.new -end - begin require 'spec/rake/spectask' rescue LoadError @@ -180,9 +142,4 @@ task :whitespace do sh %{find . -name '*.rb' -exec sed -i '' 's/ *$//g' {} \\;} end -if defined?(Jeweler) - task :spec => :check_dependencies - task :build => :gemspec -end - task :default => :spec \ No newline at end of file diff --git a/Thorfile b/Thorfile new file mode 100644 index 00000000..8ceeac2b --- /dev/null +++ b/Thorfile @@ -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 \ No newline at end of file diff --git a/VERSION b/VERSION deleted file mode 100644 index 4b9fcbec..00000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.5.1