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