From e21575f02806caa6a736fb73a0d3ce03de0215d9 Mon Sep 17 00:00:00 2001 From: geemus Date: Mon, 26 Apr 2010 18:51:03 -0700 Subject: [PATCH] setup rakegem --- Rakefile | 160 ++++++++++++++++++++++++++++++++++++++++--------- VERSION | 1 - lib/shindo.rb | 2 + shindo.gemspec | 115 +++++++++++++++++++---------------- 4 files changed, 198 insertions(+), 80 deletions(-) delete mode 100644 VERSION diff --git a/Rakefile b/Rakefile index 2812414..5f393c8 100644 --- a/Rakefile +++ b/Rakefile @@ -1,41 +1,147 @@ require 'rubygems' require 'rake' +require 'date' -begin - require 'jeweler' - Jeweler::Tasks.new do |gem| - gem.name = "shindo" - gem.summary = %Q{ruby testing} - gem.description = %Q{Simple depth first ruby testing} - gem.email = "me@geemus.com" - gem.homepage = "http://github.com/geemus/shindo" - gem.authors = ["geemus (Wesley Beary)"] - gem.rubyforge_project = "shindo" - gem.add_dependency('gestalt', '>=0.0.1') - gem.add_dependency('formatador', '>=0.0.2') - # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings - end -rescue LoadError - puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler" +############################################################################# +# +# Helper functions +# +############################################################################# + +def name + @name ||= Dir['*.gemspec'].first.split('.').first +end + +def version + line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/] + line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1] +end + +def date + Date.today.to_s +end + +def rubyforge_project + name +end + +def gemspec_file + "#{name}.gemspec" end -require File.join(File.dirname(__FILE__), 'lib', 'shindo', 'rake') -Shindo::Rake.new +def gem_file + "#{name}-#{version}.gem" +end + +def replace_header(head, header_name) + head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"} +end + +############################################################################# +# +# Standard tasks +# +############################################################################# + +task :default => :test -task :tests => :check_dependencies +require 'rake/testtask' +Rake::TestTask.new(:test) do |test| + test.libs << 'lib' << 'test' + test.pattern = 'test/**/test_*.rb' + test.verbose = true +end -task :default => :tests +desc "Generate RCov test coverage and open in your browser" +task :coverage do + require 'rcov' + sh "rm -fr coverage" + sh "rcov test/test_*.rb" + sh "open coverage/index.html" +end require 'rake/rdoctask' Rake::RDocTask.new do |rdoc| - if File.exist?('VERSION') - version = File.read('VERSION') - else - version = "" - end - rdoc.rdoc_dir = 'rdoc' - rdoc.title = "shindo #{version}" + rdoc.title = "#{name} #{version}" rdoc.rdoc_files.include('README*') rdoc.rdoc_files.include('lib/**/*.rb') end + +desc "Open an irb session preloaded with this library" +task :console do + sh "irb -rubygems -r ./lib/#{name}.rb" +end + +############################################################################# +# +# Custom tasks (add your own tasks here) +# +############################################################################# + + + +############################################################################# +# +# Packaging tasks +# +############################################################################# + +task :release => :build do + unless `git branch` =~ /^\* master$/ + puts "You must be on the master branch to release!" + exit! + end + sh "sudo gem install pkg/#{name}-#{version}.gem" + sh "git commit --allow-empty -a -m 'Release #{version}'" + sh "git tag v#{version}" + sh "git push origin master" + sh "git push origin v#{version}" + sh "gem push pkg/#{name}-#{version}.gem" +end + +task :build => :gemspec do + sh "mkdir -p pkg" + sh "gem build #{gemspec_file}" + sh "mv #{gem_file} pkg" +end + +task :gemspec => :validate do + # read spec file and split out manifest section + spec = File.read(gemspec_file) + head, manifest, tail = spec.split(" # = MANIFEST =\n") + + # replace name version and date + replace_header(head, :name) + replace_header(head, :version) + replace_header(head, :date) + #comment this out if your rubyforge_project has a different name + replace_header(head, :rubyforge_project) + + # determine file list from git ls-files + files = `git ls-files`. + split("\n"). + sort. + reject { |file| file =~ /^\./ }. + reject { |file| file =~ /^(rdoc|pkg)/ }. + map { |file| " #{file}" }. + join("\n") + + # piece file back together and write + manifest = " s.files = %w[\n#{files}\n ]\n" + spec = [head, manifest, tail].join(" # = MANIFEST =\n") + File.open(gemspec_file, 'w') { |io| io.write(spec) } + puts "Updated #{gemspec_file}" +end + +task :validate do + libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"] + unless libfiles.empty? + puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir." + exit! + end + unless Dir['VERSION*'].empty? + puts "A `VERSION` file at root level violates Gem best practices." + exit! + end +end diff --git a/VERSION b/VERSION deleted file mode 100644 index cd23180..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.0.17 diff --git a/lib/shindo.rb b/lib/shindo.rb index 7fb93ba..9ed6dc7 100644 --- a/lib/shindo.rb +++ b/lib/shindo.rb @@ -4,6 +4,8 @@ module Shindo + VERSION = '0.0.17' + def self.tests(description = nil, tags = [], &block) STDOUT.sync = true Shindo::Tests.new(description, tags, &block) diff --git a/shindo.gemspec b/shindo.gemspec index aa28c16..ad5d8b3 100644 --- a/shindo.gemspec +++ b/shindo.gemspec @@ -1,57 +1,68 @@ -# Generated by jeweler -# DO NOT EDIT THIS FILE DIRECTLY -# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command -# -*- encoding: utf-8 -*- - +## This is the rakegem gemspec template. Make sure you read and understand +## all of the comments. Some sections require modification, and others can +## be deleted if you don't need them. Once you understand the contents of +## this file, feel free to delete any comments that begin with two hash marks. +## You can find comprehensive Gem::Specification documentation, at +## http://docs.rubygems.org/read/chapter/20 Gem::Specification.new do |s| - s.name = %q{shindo} - s.version = "0.0.17" - + s.specification_version = 2 if s.respond_to? :specification_version= s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.authors = ["geemus (Wesley Beary)"] - s.date = %q{2010-03-28} - s.default_executable = %q{shindo} - s.description = %q{Simple depth first ruby testing} - s.email = %q{me@geemus.com} + s.rubygems_version = '1.3.5' + + ## Leave these as is they will be modified for you by the rake gemspec task. + ## If your rubyforge_project name is different, then edit it and comment out + ## the sub! line in the Rakefile + s.name = 'NAME' + s.version = '0.0' + s.date = '2010-01-01' + s.rubyforge_project = 'NAME' + + ## Make sure your summary is short. The description may be as long + ## as you like. + s.summary = "Ruby testing." + s.description = "Simple depth first ruby testing." + + ## List the primary authors. If there are a bunch of authors, it's probably + ## better to set the email to an email list or something. If you don't have + ## a custom homepage, consider using your GitHub URL or the like. + s.authors = ["geemus (Wesley Beary)"] + s.email = 'geemus@gmail.com' + s.homepage = 'http://github.com/geemus/NAME' + + ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as + ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb' + s.require_paths = %w[lib] + + ## This sections is only necessary if you have C extensions. + # s.require_paths << 'ext' + # s.extensions = %w[ext/extconf.rb] + + ## If your gem includes any executables, list them here. s.executables = ["shindo"] - s.extra_rdoc_files = [ - "README.rdoc" - ] - s.files = [ - ".document", - ".gitignore", - "README.rdoc", - "Rakefile", - "VERSION", - "bin/shindo", - "lib/shindo.rb", - "lib/shindo/rake.rb", - "shindo.gemspec", - "tests/basic_tests.rb", - "tests/tag_tests.rb", - "tests/tests_helper.rb" - ] - s.homepage = %q{http://github.com/geemus/shindo} + s.default_executable = 'shindo' + + ## Specify any RDoc options here. You'll want to add your README and + ## LICENSE files to the extra_rdoc_files list. s.rdoc_options = ["--charset=UTF-8"] - s.require_paths = ["lib"] - s.rubyforge_project = %q{shindo} - s.rubygems_version = %q{1.3.6} - s.summary = %q{ruby testing} - - if s.respond_to? :specification_version then - current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION - s.specification_version = 3 - - if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, [">= 0.0.2"]) - s.add_runtime_dependency(%q, [">= 0.0.2"]) - else - s.add_dependency(%q, [">= 0.0.2"]) - s.add_dependency(%q, [">= 0.0.2"]) - end - else - s.add_dependency(%q, [">= 0.0.2"]) - s.add_dependency(%q, [">= 0.0.2"]) - end -end + s.extra_rdoc_files = %w[README.rdoc] + + ## List your runtime dependencies here. Runtime dependencies are those + ## that are needed for an end user to actually USE your code. + s.add_dependency('gestalt', '>=0.0.1') + s.add_dependency('formatador', '>=0.0.2') + ## List your development dependencies here. Development dependencies are + ## those that are only needed during development + # s.add_development_dependency('DEVDEPNAME', [">= 1.1.0", "< 2.0.0"]) + + ## Leave this section as-is. It will be automatically generated from the + ## contents of your Git repository via the gemspec task. DO NOT REMOVE + ## THE MANIFEST COMMENTS, they are used as delimiters by the task. + # = MANIFEST = + s.files = %w[] + # = MANIFEST = + + ## Test files will be grabbed from the file list. Make sure the path glob + ## matches what you actually use. + s.test_files = s.files.select { |path| path =~ /^[spec|tests]\/.*_[spec|tests]\.rb/ } +end