diff options
Diffstat (limited to 'lib/vendor/excon/Rakefile')
-rw-r--r-- | lib/vendor/excon/Rakefile | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/lib/vendor/excon/Rakefile b/lib/vendor/excon/Rakefile new file mode 100644 index 0000000..08a520e --- /dev/null +++ b/lib/vendor/excon/Rakefile @@ -0,0 +1,161 @@ +require 'rubygems' +require 'rake' +require 'date' +include Rake::DSL +############################################################################# +# +# Helper functions +# +############################################################################# + +def name + @name ||= Dir['*.gemspec'].first.split('.').first +end + +def version + line = File.read("lib/#{name}/constants.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 + +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 +# +############################################################################# + +require 'shindo/rake' +require "rspec/core/rake_task" + +RSpec::Core::RakeTask.new(:spec, :format) do |t, args| + format = args[:format] || 'doc' + t.rspec_opts = ["-c", "-f #{format}", "-r ./spec/spec_helper.rb"] + t.pattern = 'spec/**/*_spec.rb' +end + + +Shindo::Rake.new + +task :default => [ :tests, :test] +task :test => :spec + +require 'rdoc/task' +Rake::RDocTask.new do |rdoc| + rdoc.rdoc_dir = 'rdoc' + 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 => [:update_certs, :build] do + unless `git branch` =~ /^\* master$/ + puts "You must be on the master branch to release!" + exit! + end + sh "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 + +desc "update bundled certs" +task :update_certs do + require File.join(File.dirname(__FILE__), 'lib', 'excon') + File.open(File.join(File.dirname(__FILE__), 'data', 'cacert.pem'), 'w') do |file| + data = Excon.get("https://curl.haxx.se/ca/cacert.pem").body + file.write(data) + end +end + +desc "check ssl settings" +task :hows_my_ssl do + require File.join(File.dirname(__FILE__), 'lib', 'excon') + data = Excon.get("https://www.howsmyssl.com/a/check").body + puts data +end |