class Convoy::Setup::Dsl::Options

Public Class Methods

new(command_name = :global) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 13
def initialize(command_name = :global)
    @command_name = command_name
    @options      = {}
    @dependencies = {}
    @conflicts    = {}
    @validations  = {}
end
options(command_name, instance, &block) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 6
def options(command_name, instance, &block)
    block.call(instance) if block_given?
rescue => e
    raise Convoy::ClientError.new("Problem with syntax of #{instance.instance_variable_get(:"@command_name")} options block", e)
end

Public Instance Methods

conflict(*opts) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 42
def conflict(*opts)
    opts.each do |opt|
        conflicts_for_opt = opts.reject { |value| value == opt }
        @conflicts[opt]   ||= []
        @conflicts[opt]   += conflicts_for_opt
        @conflicts[opt].uniq!
    end
end
dependency(option_name, opts = {}) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 33
def dependency(option_name, opts = {})
    ensure_dependency_specification_syntax(opts)
    @dependencies[option_name] ||= []
    rules_as_array(opts).each do |rule|
        ensure_no_self_dependency(option_name, rule)
        @dependencies[option_name] << rule
    end
end
opt(name, desc="", opts={}) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 21
def opt(name, desc="", opts={})
    opts[:desc]    ||= desc
    @options[name] ||= opts
    dependency(name, :on => opts[:depends_on]) if opts[:depends_on]
    conflict(*[name, opts[:conflicts_with]].flatten) if opts[:conflicts_with]
end
validate(name, description, &block) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 28
def validate(name, description, &block)
    @validations[name] ||= []
    @validations[name] << { :desc => description, :block => block }
end

Private Instance Methods

ensure_dependency_specification_syntax(opts) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 63
def ensure_dependency_specification_syntax(opts)
    unless opts[:on]
        raise Convoy::ClientError.new("Problem with syntax of dependency specification in #{@command_name} options block, #{option_name} missing ':on' condition")
    end
end
ensure_no_self_dependency(option_name, rule) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 52
def ensure_no_self_dependency(option_name, rule)
    case rule
        when Hash
            rule.each_pair do |rule_option, rule_option_value|
                handle_possible_self_dependency(option_name, rule_option)
            end
        else
            handle_possible_self_dependency(option_name, rule)
    end
end
handle_possible_self_dependency(option_name, rule) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 73
def handle_possible_self_dependency(option_name, rule)
    if option_name == rule
        raise Convoy::ClientError.new("Problem with syntax of dependency specification in #{@command_name} options block, #{option_name} is set to depend on itself")
    end
end
rules_as_array(opts) click to toggle source
# File lib/convoy/setup/dsl/options.rb, line 69
def rules_as_array(opts)
    [opts[:on]].flatten
end