class Convoy::OptionDependencyValidator

Attributes

parser[R]

Public Class Methods

for(parser) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 4
def for(parser)
    self.new(parser)
end
new(parser) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 11
def initialize(parser)
    @parser = parser
end

Public Instance Methods

validate(options, dependencies) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 15
def validate(options, dependencies)
    dependencies.each_pair do |option_name, dependency_rules|
        ensure_dependencies_satisfied_for(option_name, dependency_rules, options)
    end
    options
end

Private Instance Methods

ensure_dependencies_satisfied_for(option_name, dependency_rules, options) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 28
def ensure_dependencies_satisfied_for(option_name, dependency_rules, options)
    ensure_dependency_for_valid_option(option_name)
    dependency_rules.each do |rule|
        case rule
            when Hash
                handle_all_option_value_dependency_rules(option_name, rule, options)
            else
                ensure_option_depends_on_valid_option(option_name, rule)
                handle_possible_presence_dependency_issue(option_name, rule, options)
        end
    end
end
ensure_dependency_for_valid_option(option_name) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 70
def ensure_dependency_for_valid_option(option_name)
    unless option_exists?(option_name)
        raise Convoy::ClientError.new("Dependency specified for option '#{option_name}', but no such option was defined, perhaps you misspelled it")
    end
end
ensure_option_depends_on_valid_option(option_name, rule) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 76
def ensure_option_depends_on_valid_option(option_name, rule)
    unless option_exists?(rule)
        raise Convoy::ClientError.new("'#{option_name}' is set up to depend on '#{rule}', but '#{rule}' does not appear to be a valid option, perhaps it is a spelling error")
    end
end
handle_all_option_value_dependency_rules(option_name, rule, options) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 41
def handle_all_option_value_dependency_rules(option_name, rule, options)
    if option_was_specified?(option_name, options)
        rule.each_pair do |rule_option, rule_option_value|
            ensure_option_depends_on_valid_option(option_name, rule_option)
            handle_possible_option_value_dependency_issue(option_name, rule_option, rule_option_value, options)
        end
    end
end
handle_possible_option_value_dependency_issue(option_name, rule_option, rule_option_value, options) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 50
def handle_possible_option_value_dependency_issue(option_name, rule_option, rule_option_value, options)
    unless options[rule_option] == rule_option_value
        raise Convoy::UserError.new("Option dependency unsatisfied, '#{option_name}' depends on '#{rule_option}' having value '#{rule_option_value}', '#{option_name}' specified with value '#{options[option_name]}', but '#{rule_option}' is '#{options[rule_option]}'")
    end
end
handle_possible_presence_dependency_issue(option_name, rule, options) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 56
def handle_possible_presence_dependency_issue(option_name, rule, options)
    if option_was_specified?(option_name, options) && option_was_unspecified?(rule, options)
        raise Convoy::UserError.new("Option dependency unsatisfied, '#{option_name}' depends on '#{rule}', '#{option_name}' specified with value '#{options[option_name]}', but '#{rule}' is unspecified")
    end
end
option_exists?(option) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 24
def option_exists?(option)
    parser.specs.keys.include?(option)
end
option_was_specified?(option_name, options) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 66
def option_was_specified?(option_name, options)
    !options[option_name].nil? && !(options[option_name] == []) && !(options[option_name] == false)
end
option_was_unspecified?(option_name, options) click to toggle source
# File lib/convoy/option_dependency_validator.rb, line 62
def option_was_unspecified?(option_name, options)
    !option_was_specified?(option_name, options)
end