class Detroit::Gem

The Gem tool is used to generate gemspec and gem packages for ruby projects.

This tool was designed for the standard toolchain supporting the following stations:

Constants

MANPAGE

Location of man_page for tool.

Attributes

autospec[RW]

True or false whether to write gemspec from project metadata (default is `false`).

gemspec[RW]

The .gemspec filename (default looks-up `.gemspec` or `name.gemspec` file).

install[W]

Whether to install the gem.

pkgdir[RW]

Package directory (defaults to `pkg`). Location of packages. This defaults to Project#pkg.

version[R]

Version to release. Defaults to current version.

Public Instance Methods

assemble?(station, options={}) click to toggle source
# File lib/detroit-gem.rb, line 137
def assemble?(station, options={})
  return true if station == :package
  return true if station == :install
  return true if station == :release
  return true if station == :reset
  return true if station == :purge
  return false
end
build() click to toggle source

Create a gem package.

# File lib/detroit-gem.rb, line 72
def build
  trace "gem build #{gemspec}"
  spec = load_gemspec
  package = ::Gem::Package.build(spec)
  mkdir_p(pkgdir) unless File.directory?(pkgdir)
  mv(package, pkgdir)
end
install() click to toggle source
# File lib/detroit-gem.rb, line 91
def install
  return unless install?
  package_files.each do |file|
    sh "gem install --no-rdoc --no-ri #{file}"
  end
end
install?() click to toggle source

Whether to install the gem (default `false`).

# File lib/detroit-gem.rb, line 52
def install?
  @install
end
package() click to toggle source

Write gemspec if autospec is true and then build the gem.

# File lib/detroit-gem.rb, line 66
def package
  create_gemspec if autospec   # TODO: should autospec be a generate phase?
  build
end
prerequisite() click to toggle source
# File lib/detroit-gem.rb, line 33
def prerequisite
  require 'rubygems'
  require 'rubygems/package'
end
purge() click to toggle source

Remove package file(s).

@todo This code is a little loose. Can it be more specific about which

gem file(s) to remove?
# File lib/detroit-gem.rb, line 129
def purge
  package_files.each do |f|
    rm(f)
    report "Removed #{f}"
  end
end
push() click to toggle source

Push gem package to RubyGems.org (a la Gemcutter).

# File lib/detroit-gem.rb, line 101
def push
  if package_files.empty?
    report "No .gem packages found for version {version} at #{pkgdir}."
  else
    package_files.each do |file|
      sh "gem push #{file}"
    end
  end
end
release() click to toggle source

Same as push.

# File lib/detroit-gem.rb, line 112
def release
  push
end
reset() click to toggle source

Mark package files as outdated.

# File lib/detroit-gem.rb, line 117
def reset
  package_files.each do |f|
    utime(0 ,0, f) 
    report "Reset #{f}"
  end
end
spec(file=nil) click to toggle source

Convert metadata to a gemspec and write to file.

@param [String] file

Name of gemspec file (defaults to value of #gemspec).

@return [String] The file name.

# File lib/detroit-gem.rb, line 86
def spec(file=nil)
  create_gemspec(file)
end

Private Instance Methods

create_gemspec(file=nil) click to toggle source

Create a gemspec file from project metadata.

# File lib/detroit-gem.rb, line 171
def create_gemspec(file=nil)
  file = gemspec if !file
  #require 'gemdo/gemspec'
  yaml = project.to_gemspec.to_yaml
  File.open(file, 'w') do |f|
    f << yaml
  end
  status File.basename(file) + " updated."
  return file
end
initialize_defaults() click to toggle source

Initialize attribute defaults.

Calls superclass method
# File lib/detroit-gem.rb, line 149
def initialize_defaults
  super

  @autospec  = false

  @pkgdir  ||= (root + 'pkg').to_s #|| project.pkg
  @gemspec ||= lookup_gemspec

  @version = project.metadata.version
end
load_gemspec() click to toggle source

Load gemspec file.

Returns a ::Gem::Specification.

# File lib/detroit-gem.rb, line 197
def load_gemspec
  file = gemspec
  if yaml?(file)
    ::Gem::Specification.from_yaml(File.new(file))
  else
    ::Gem::Specification.load(file)
  end
end
lookup_gemspec() click to toggle source

Lookup gemspec file. If not found returns default path.

Returns String of file path.

# File lib/detroit-gem.rb, line 185
def lookup_gemspec
  dot_gemspec = (project.root + '.gemspec').to_s
  if File.exist?(dot_gemspec)
    dot_gemspec.to_s
  else
    project.metadata.name + '.gemspec'
  end
end
package_files() click to toggle source
# File lib/detroit-gem.rb, line 161
def package_files
  Pathname.new(pkgdir).glob("*-#{version}.gem")
end
prepackage() click to toggle source

Create gemspec if autospec is true.

# File lib/detroit-gem.rb, line 166
def prepackage
  create_gemspec if autospec
end
yaml?(file) click to toggle source

If the gemspec a YAML gemspec?

# File lib/detroit-gem.rb, line 207
def yaml?(file)
  line = open(file) { |f| line = f.gets }
  line.index "!ruby/object:Gem::Specification"
end