class Kamaze::Project::Tools::Gemspec::Builder

Package a “gem“ from its own “gemspec“ file

The build command allows you to create a “gem“ from a ruby “gemspec“.

The best way to build a gem is to use a Rakefile and the Gem::PackageTask which ships with RubyGems. But, you can also use this class ;).

Sample of use:

“`ruby builder = Kamaze.project.tools.fetch(:gemspec_builder) builder.build if builder.ready? “`

Public Instance Methods

build() click to toggle source

Build “.gem“ file

@return [self]

# File lib/kamaze/project/tools/gemspec/builder.rb, line 31
def build
  self.tap do
    prepare

    buildable_dir = self.buildable.dirname.realpath

    # dive into ``src`` file
    Dir.chdir(gemspec_srcfile.dirname) do
      self.gem_runner.run(build_args).yield_self do |file|
        FileUtils.mv(file, buildable_dir)

        buildable_dir.join(file)
      end
    end
  end
end
buildable() click to toggle source

Get buildable (relative path)

@return [Pathname]

# File lib/kamaze/project/tools/gemspec/builder.rb, line 51
def buildable
  return nil unless ready? # @todo raise an explicit exception

  gemspec_reader.read(Hash).fetch(:full_name).tap do |full_name|
    # @formatter:off
    return fs.package_dirs
             .fetch(:gem)
             .join("#{full_name}.gem")
             .to_s
             .gsub(%r{^\./}, '')
             .yield_self { |file_path| Pathname.new(file_path) }
    # @formatter:on
  end
end
buildable?()
Alias for: ready?
gemspec_srcfile() click to toggle source

Get path do gemspec present in “src“ dir

@return [Pathname]

# File lib/kamaze/project/tools/gemspec/builder.rb, line 75
def gemspec_srcfile
  # @formatter:off
  (package_dirs.fetch(:src)
       .realpath
       .join(buildable.basename('.*')).to_s
       .gsub(/-([0-9 \.])+$/, '') + '.gemspec')
    .yield_self { |s| Pathname.new(s) }
  # @formatter:on
end
ready?() click to toggle source
# File lib/kamaze/project/tools/gemspec/builder.rb, line 66
def ready?
  gemspec_reader.read(Hash)[:full_name].nil? ? false : super
end
Also aliased as: buildable?

Protected Instance Methods

build_args() click to toggle source

Get args used by “gem“ command

@return [Array<String>]

# File lib/kamaze/project/tools/gemspec/builder.rb, line 106
def build_args
  Dir.chdir(pwd) do
    [:build, gemspec_srcfile, '--norc'].map(&:to_s)
  end
end
gem_runner() click to toggle source

@return [Gem::GemRunner]

# File lib/kamaze/project/tools/gemspec/builder.rb, line 96
def gem_runner
  require 'rubygems'
  require 'rubygems/gem_runner'

  Gem::GemRunner.new
end
setup() click to toggle source
# File lib/kamaze/project/tools/gemspec/builder.rb, line 87
def setup
  super

  self.package_labels = [:src, :gem]
  self.purgeables = [:gem]
  self.package_name = "ruby/gem-#{Gem::VERSION}"
end