5
#############################################################################
9
#############################################################################
12
@name ||= Dir['*.gemspec'].first.split('.').first
16
line = File.read("lib/#{name}/constants.rb")[/^\s*VERSION\s*=\s*.*/]
17
line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
33
"#{name}-#{version}.gem"
36
def replace_header(head, header_name)
37
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
40
#############################################################################
44
#############################################################################
49
task :default => :tests
52
Rake::RDocTask.new do |rdoc|
53
rdoc.rdoc_dir = 'rdoc'
54
rdoc.title = "#{name} #{version}"
55
rdoc.rdoc_files.include('README*')
56
rdoc.rdoc_files.include('lib/**/*.rb')
59
desc "Open an irb session preloaded with this library"
61
sh "irb -rubygems -r ./lib/#{name}.rb"
64
#############################################################################
66
# Custom tasks (add your own tasks here)
68
#############################################################################
72
#############################################################################
76
#############################################################################
78
task :release => :build do
79
unless `git branch` =~ /^\* master$/
80
puts "You must be on the master branch to release!"
83
sh "gem install pkg/#{name}-#{version}.gem"
84
sh "git commit --allow-empty -a -m 'Release #{version}'"
85
sh "git tag v#{version}"
86
sh "git push origin master"
87
sh "git push origin v#{version}"
88
sh "gem push pkg/#{name}-#{version}.gem"
91
task :build => :gemspec do
93
sh "gem build #{gemspec_file}"
94
sh "mv #{gem_file} pkg"
97
task :gemspec => :validate do
98
# read spec file and split out manifest section
99
spec = File.read(gemspec_file)
100
head, manifest, tail = spec.split(" # = MANIFEST =\n")
102
# replace name version and date
103
replace_header(head, :name)
104
replace_header(head, :version)
105
replace_header(head, :date)
106
#comment this out if your rubyforge_project has a different name
107
replace_header(head, :rubyforge_project)
109
# determine file list from git ls-files
110
files = `git ls-files`.
113
reject { |file| file =~ /^\./ }.
114
reject { |file| file =~ /^(rdoc|pkg)/ }.
115
map { |file| " #{file}" }.
118
# piece file back together and write
119
manifest = " s.files = %w[\n#{files}\n ]\n"
120
spec = [head, manifest, tail].join(" # = MANIFEST =\n")
121
File.open(gemspec_file, 'w') { |io| io.write(spec) }
122
puts "Updated #{gemspec_file}"
126
libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
127
unless libfiles.empty?
128
puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
131
unless Dir['VERSION*'].empty?
132
puts "A `VERSION` file at root level violates Gem best practices."