class FPM::RakeTask

Attributes

options[R]

Public Class Methods

new(package_name, opts = {}, &block) click to toggle source
# File lib/fpm/rake_task.rb, line 8
def initialize(package_name, opts = {}, &block)
  @options = OpenStruct.new(:name => package_name.to_s)
  @source, @target = opts.values_at(:source, :target).map(&:to_s)
  @directory = File.expand_path(opts[:directory].to_s)

  (@source.empty? || @target.empty? || options.name.empty?) &&
    abort("Must specify package name, source and output")

  desc "Package #{@name}" unless ::Rake.application.last_comment

  task(options.name) do |_, task_args|
    block.call(*[options, task_args].first(block.arity)) if block_given?
    abort("Must specify args") unless options.respond_to?(:args)
    @args = options.delete_field(:args)
    run_cli
  end
end

Private Instance Methods

parsed_options() click to toggle source
# File lib/fpm/rake_task.rb, line 28
def parsed_options
  options.to_h.map do |option, value|
    opt = option.to_s.tr("_", "-")

    case
    when value.is_a?(String), value.is_a?(Symbol)
      %W(--#{opt} #{value})
    when value.is_a?(Array)
      value.map { |v| %W(--#{opt} #{v}) }
    when value.is_a?(TrueClass)
      "--#{opt}"
    when value.is_a?(FalseClass)
      "--no-#{opt}"
    else
      fail TypeError, "Unexpected type: #{value.class}"
    end
  end
end
run_cli() click to toggle source
# File lib/fpm/rake_task.rb, line 47
def run_cli
  require "fpm"
  require "fpm/command"

  args = %W(-t #{@target} -s #{@source} -C #{@directory})
  args << parsed_options
  args << @args

  args.flatten!.compact!

  exit(FPM::Command.new("fpm").run(args) || 0)
end