Class: Berry::GemTasks

Inherits:
Object
  • Object
show all
Includes:
Rake::DSL
Defined in:
lib/berry/gem_tasks.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGemTasks

Returns a new instance of GemTasks.



16
17
18
19
20
# File 'lib/berry/gem_tasks.rb', line 16

def initialize
  @path     = Path(Dir.pwd, :recursive => true, :short => false)
  @gemspec  = @path.find(".gemspec")
  raise "Unable to locate .gemspec file" unless @gemspec
end

Class Method Details

.install_tasks!Object



12
13
14
# File 'lib/berry/gem_tasks.rb', line 12

def self.install_tasks!
  new.install
end

Instance Method Details

#build_gemObject



54
55
56
57
58
59
60
# File 'lib/berry/gem_tasks.rb', line 54

def build_gem
  sh "gem build #{@gemspec}" 
  FileUtils.mkdir_p @path.join("pkg").current
  FileUtils.mv(built_gem_path, [@path.join("pkg").current, pkg_file].join("/"))
  puts "#{pkg.name} (#{pkg.version}) built to pkg/#{pkg_file}"
  built_gem_path("pkg")
end

#built_gem_path(dir = nil) ⇒ Object



97
98
99
# File 'lib/berry/gem_tasks.rb', line 97

def built_gem_path(dir = nil)
  dir ? @path.reload.join(dir).find(pkg_file) : @path.reload.find(pkg_file)
end

#cleanupObject



84
85
86
87
# File 'lib/berry/gem_tasks.rb', line 84

def cleanup
  sh "rm -rf pkg/"
  puts "pkg/ removed"
end

#installObject



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
# File 'lib/berry/gem_tasks.rb', line 22

def install
  desc "Build #{pkg_file} into the pkg/ directory"
  task 'build' do
    build_gem
  end

  desc "Install #{pkg_file} into your system"
  task 'install' do
    install_gem
  end

  desc "Push your #{pkg_file} to RubyGems.org"
  task 'push' do
    push_gem
  end

  desc "Yank #{pkg_file} from RubyGems"
  task 'yank' do
    yank_gem
  end

  desc "Uninstall #{pkg_file}"
  task 'uninstall' do
    uninstall_gem
  end

  desc "Clean up pkg files"
  task 'clean' do
    cleanup
  end
end

#install_gemObject



62
63
64
65
66
67
# File 'lib/berry/gem_tasks.rb', line 62

def install_gem
  gem_file = build_gem
  out, _ = sh "gem install #{gem_file}"
  raise "Unable to install #{pkg_file}, run `gem install #{pkg_file}` for more details" unless out[/Successfully installed/]
  puts "#{pkg.name} (#{pkg.version}) installed"
end

#pkgObject



89
90
91
# File 'lib/berry/gem_tasks.rb', line 89

def pkg
  @package ||= Gem::Specification.load(@gemspec)
end

#pkg_fileObject



93
94
95
# File 'lib/berry/gem_tasks.rb', line 93

def pkg_file
  "#{pkg.name}-#{pkg.version}.gem"
end

#push_gemObject



79
80
81
82
# File 'lib/berry/gem_tasks.rb', line 79

def push_gem
  sh "gem push #{built_gem_path("pkg")}"
  puts "#{pkg.name} (#{pkg.version}) pushed to RubyGems"
end

#sh(cmd) ⇒ Object



101
102
103
104
105
106
107
108
# File 'lib/berry/gem_tasks.rb', line 101

def sh(cmd)
  cmd << " 2>&1"
  out = ''
  Dir.chdir(@path.current) do
    out = `#{cmd}`
  end
  [out, $?]
end

#uninstall_gemObject



74
75
76
77
# File 'lib/berry/gem_tasks.rb', line 74

def uninstall_gem
  sh "gem unstall #{pkg.name} -v #{pkg.version}"
  puts "#{pkg.name} (#{pkg.version}) uninstalled"
end

#yank_gemObject



69
70
71
72
# File 'lib/berry/gem_tasks.rb', line 69

def yank_gem
  sh "gem yank #{pkg.name} -v #{pkg.version}"
  puts "#{pkg.name} (#{pkg.version}) yanked from RubyGems"
end