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
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
Calls superclass method
Kamaze::Project::Tools::Gemspec::Packager#ready?
# 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
Calls superclass method
Kamaze::Project::Tools::Gemspec::Packager#setup
# 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