Skip to content

Commit

Permalink
WIP Add support for required CLI arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
Jared Pace and Jason Rudolph committed Sep 13, 2012
1 parent 40fb664 commit e662cbe
Showing 1 changed file with 31 additions and 2 deletions.
33 changes: 31 additions & 2 deletions lib/elzar/cli.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -3,12 +3,38 @@


module Elzar module Elzar
module Cli module Cli
class MissingArgumentsError < StandardError
def initialize(cmd, arguments)
super "Required arguments missing (#{arguments.join(', ')})." \
" Run `elzar help #{cmd}` for more information."
end
end

class Runner class Runner
def self.run(*args) def self.run(*args)
runner = new(*args) runner = new(*args)
runner.require_arguments!
runner.run runner.run
end end


def self.required_argument(*arg_names)
@required_arguments ||= []
@required_arguments += arg_names
end

def self.required_arguments
@required_arguments || []
end

def require_arguments!
missing_arguments = self.class.required_arguments.select do |arg|
arg_value = self.instance_variable_get(:"@#{arg}")
arg_value.to_s.strip.empty?
end

raise MissingArgumentsError.new(cmd, missing_arguments) unless missing_arguments.empty?
end

private private


def notify(msg) def notify(msg)
Expand All @@ -21,8 +47,7 @@ def aws_config
end end


def cmd def cmd
class_name = self.class.name.split('::').last self.class.name.split('::').last.downcase
class_name.downcase
end end




Expand Down Expand Up @@ -60,6 +85,8 @@ def find_ssh_keys
class Preheat < Runner class Preheat < Runner
attr_reader :instance_name attr_reader :instance_name


required_argument :instance_name

def initialize(instance_name, options = {}) def initialize(instance_name, options = {})
@instance_name = instance_name @instance_name = instance_name
@aws_config_dir = options[:aws_config_dir] @aws_config_dir = options[:aws_config_dir]
Expand All @@ -79,6 +106,8 @@ def run
class Cook < Runner class Cook < Runner
attr_reader :instance_id attr_reader :instance_id


required_argument :instance_id

def initialize(instance_id, options = {}) def initialize(instance_id, options = {})
@instance_id = instance_id @instance_id = instance_id
@aws_config_dir = options[:aws_config_dir] @aws_config_dir = options[:aws_config_dir]
Expand Down

0 comments on commit e662cbe

Please sign in to comment.