summaryrefslogtreecommitdiff
path: root/Rakefile
blob: d75dee5e1b59c9c9d224005f395912845f12c830 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
require 'rake/clean'
require 'rubygems/package_task'

$:.unshift 'lib'
require 'pry/version'

CLOBBER.include('**/*~', '**/*#*', '**/*.log')
CLEAN.include('**/*#*', '**/*#*.*', '**/*_flymake*.*', '**/*_flymake', '**/*.rbc', '**/.#*.*')

def check_dependencies
  require 'bundler'
  Bundler.definition.missing_specs

  eval('nil', TOPLEVEL_BINDING, '<main>') # workaround for issue #395
rescue LoadError
  # if Bundler isn't installed, we'll just assume your setup is ok.
rescue Bundler::GemNotFound
  raise RuntimeError, "You're missing one or more required gems. Run `bundle install` first."
end

desc "Set up and run tests"
task :default => [:test]

unless [].respond_to? :shuffle!
  class Array
    def shuffle!
      # TODO: fill this in if anyone cares
      self
    end
  end
end

def run_specs paths
  quiet = ENV['VERBOSE'] ? '' : '-q'
  exec "bacon -Ispec -rubygems #{quiet} #{paths.join ' '}"
end

desc "Run tests"
task :test do
  check_dependencies unless ENV['SKIP_DEP_CHECK']
  paths =
    if explicit_list = ENV['run']
      explicit_list.split(',')
    else
      Dir['spec/**/*_spec.rb'].shuffle!
    end
  run_specs paths
end
task :spec => :test

task :recspec do
  all = Dir['spec/**/*_spec.rb'].sort_by{|path| File.mtime(path)}.reverse
  warn "Running all, sorting by mtime: #{all[0..2].join(' ')} ...etc."
  run_specs all
end

desc "Run pry (you can pass arguments using _ in place of -)"
task :pry do
  check_dependencies unless ENV['SKIP_DEP_CHECK']
  ARGV.shift if ARGV.first == "pry"
  ARGV.map! do |arg|
    arg.sub(/^_*/) { |m| "-" * m.size }
  end
  load 'bin/pry'
end

desc "Show pry version"
task :version do
  puts "Pry version: #{Pry::VERSION}"
end

desc "Profile pry's startup time"
task :profile do
  require 'profile'
  require 'pry'
  Pry.start(TOPLEVEL_BINDING, :input => StringIO.new('exit'))
end

def modify_base_gemspec
  eval(File.read('pry.gemspec')).tap { |s| yield s }
end

namespace :ruby do
  spec = modify_base_gemspec do |s|
    s.platform = Gem::Platform::RUBY
  end

  Gem::PackageTask.new(spec) do |pkg|
    pkg.need_zip = false
    pkg.need_tar = false
  end
end

namespace :jruby do
  spec = modify_base_gemspec do |s|
    s.add_dependency('spoon', '~> 0.0')
    s.platform = 'java'
  end

  Gem::PackageTask.new(spec) do |pkg|
    pkg.need_zip = false
    pkg.need_tar = false
  end
end


[:mingw32, :mswin32].each do |v|
  namespace v do
    spec = modify_base_gemspec do |s|
      s.add_dependency('win32console', '~> 1.3')
      s.platform = "i386-#{v}"
    end

    Gem::PackageTask.new(spec) do |pkg|
      pkg.need_zip = false
      pkg.need_tar = false
    end
  end
end

desc "build all platform gems at once"
task :gems => [:clean, :rmgems, 'ruby:gem', 'mswin32:gem', 'mingw32:gem', 'jruby:gem']

desc "remove all platform gems"
task :rmgems => ['ruby:clobber_package']

desc "reinstall gem"
task :reinstall => :gems do
  sh "gem uninstall pry" rescue nil
  sh "gem install #{File.dirname(__FILE__)}/pkg/pry-#{Pry::VERSION}.gem"
end

desc "build and push latest gems"
task :pushgems => :gems do
  chdir("#{File.dirname(__FILE__)}/pkg") do
    Dir["*.gem"].each do |gemfile|
      sh "gem push #{gemfile}"
    end
  end
end