Rakefile in majestic_seo_api-1.1.1 vs Rakefile in majestic_seo_api-1.1.2
- old
+ new
@@ -1,44 +1,87 @@
-begin
- require 'bundler'
- Bundler::GemHelper.install_tasks
+## helper functions
-rescue LoadError
- puts "Bundler not available. Install it with: gem install bundler"
+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 gemspec_file
+ "#{name}.gemspec"
+end
+
+def gem_file
+ "#{name}-#{version}.gem"
+end
+
+def replace_header(head, header_name)
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
+end
+
begin
# Rspec 2.0
require 'rspec/core/rake_task'
desc 'Default: run specs'
- task :default => :spec
+ task :default => :spec
RSpec::Core::RakeTask.new do |t|
t.pattern = "spec/**/*_spec.rb"
end
-
+
RSpec::Core::RakeTask.new('rcov') do |t|
t.pattern = "spec/**/*_spec.rb"
t.rcov = true
t.rcov_opts = ['--exclude', 'spec']
end
rescue LoadError
- puts "Rspec not available. Install it with: gem install rspec"
+ puts "Rspec not available. Install it with: gem install rspec"
end
-begin
- require 'jeweler'
-
- Jeweler::Tasks.new do |gemspec|
- gemspec.name = "majestic_seo_api"
- gemspec.summary = "Interface for communicating with Majestic SEO's API"
- gemspec.description = "Interface for communicating with Majestic SEO's API"
- gemspec.email = "sebastian@agiley.se"
- gemspec.homepage = "http://developer-support.majesticseo.com/connectors/"
- gemspec.authors = ["Majestic-12 Ltd", "Sebastian Johnsson"]
- end
-
- Jeweler::GemcutterTasks.new
-rescue LoadError
- puts "Jeweler not available. Install it with: gem install jeweler"
-end
\ No newline at end of file
+## release management tasks
+
+desc "Commit, create tag v#{version} and build and push #{gem_file} to Rubygems"
+task :release => :build do
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
+ sh "git tag v#{version}"
+ sh "git push"
+ sh "git push origin v#{version}"
+ sh "gem push pkg/#{gem_file}"
+end
+
+desc "Build #{gem_file} into the pkg directory"
+task :build => :gemspec do
+ sh "mkdir -p pkg"
+ sh "gem build #{gemspec_file}"
+ sh "mv #{gem_file} pkg"
+end
+
+desc "Generate #{gemspec_file}"
+task :gemspec 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)
+
+ # 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
+