require 'fileutils' command :generate do |c| c.syntax = 'pk generate PASSNAME' c.summary = 'Generates a template pass directory' c.description = '' c.example 'description', 'pk generate mypass' c.option '-T', '--type [boardingPass|coupon|eventTicket|storeCard|generic]', 'Type of pass' c.action do |args, options| @directory = args.first @directory ||= ask "Enter a passbook name: " say_error "Missing pass name" and abort if @directory.nil? or @directory.empty? say_error "Directory #{@directory} already exists" and abort if File.directory?(@directory) say_error "File exists at #{@directory}" and abort if File.exist?(@directory) @type = options.type determine_type! unless @type validate_type! FileUtils.mkdir_p @directory FileUtils.cp File.join(File.dirname(__FILE__), '..', 'templates', "#{@type}.json"), File.join(@directory, 'pass.json') ['icon.png', 'icon@2x.png'].each do |file| FileUtils.touch File.join(@directory, file) end say_ok "Pass generated in #{@directory}" end end alias_command :new, :generate alias_command :g, :generate private def determine_type! @type ||= choose "Select a pass type", *Dubai::Passbook::Pass::TYPES end def validate_type! say_error %{Invalid type: "#{@type}", expected one of: [#{Dubai::Passbook::Pass::TYPES.join(', ')}]} unless Dubai::Passbook::Pass::TYPES.include?(@type) end