lib/ass_launcher/enterprise/cli/spec_dsl/dsl_helpers.rb
# encoding: utf-8
module AssLauncher
module Enterprise
module Cli
module SpecDsl
# @api private
module DslHelpers
# Translating stub
def _t(s)
s
end
def defined_modes
AssLauncher::Enterprise::Cli::DEFINED_MODES
end
private :defined_modes
def described_modes
@described_modes ||= {}
end
def parameters_groups
@parameters_groups ||= {}
end
def parameters
@parameters ||= Parameters::AllParameters.new
end
attr_accessor :current_modes
private :current_modes, :current_modes=
attr_accessor :current_group
private :current_group, :current_group=
def parents_stack
@parents_stack ||= []
end
private :parents_stack
def current_parent
parents_stack[0]
end
private :current_parent
def new_param(klass, name, desc, clients = [], options = {}, &block)
fail 'Group must be specifed' if current_group.nil?
fail 'Modes must be specifed' if current_modes.nil?
p = klass.new(name, desc,
new_binary_matcher(clients),
current_group,
current_modes, current_parent, **options)
add_parameter(p)
eval_sub_params(p, &block) if block_given?
end
private :new_param
def new_binary_matcher(clients)
return (inherid_binary_matcher || auto_binary_matcher) if\
clients.size == 0
BinaryMatcher.new(clients, from_current_version)
end
private :new_binary_matcher
def auto_binary_matcher
BinaryMatcher.auto(current_modes, from_current_version)
end
private :auto_binary_matcher
def inherid_binary_matcher
BinaryMatcher.new(current_parent.binary_matcher.clients,
from_current_version) if current_parent
end
private :inherid_binary_matcher
def change_param(name, &block)
p = get_parameter(name)
old_g = current_group
old_m = current_modes
self.current_group = p.group
self.current_modes = p.modes
eval_sub_params(p, &block) if block_given?
self.current_group = old_g
self.current_modes = old_m
end
private :change_param
def get_parameter(name)
p = parameters.find_for_version(name,
current_parent,
current_version)
fail "Parameter #{name} not found for #{current_version}." unless p
p
end
private :get_parameter
def add_parameter(p)
parameters.add p, current_version
end
private :add_parameter
# @return [nil]
def restrict_params(name, v)
get_parameters(name).each do |p|
p.restrict_from(v)
end
nil
end
private :restrict_params
def get_parameters(name)
p = parameters.find(name, current_parent)
fail "Parameter #{name} not found." if p.size == 0
p
end
private :get_parameters
def eval_sub_params(p, &block)
parents_stack.unshift p
instance_eval(&block)
parents_stack.shift
end
private :eval_sub_params
def enterprise_versions
@enterprise_versions ||= []
end
def add_enterprise_versions(v)
fail ArgumentError, 'Invalid version sequences. Expects version >'\
" #{current_version} but given #{v}" unless v > current_version
enterprise_versions << v
end
private :add_enterprise_versions
def reset_all
reset_group
reset_modes
end
private :reset_all
def reset_group
self.current_group = nil
end
private :reset_group
def reset_modes
self.current_modes = nil
end
private :reset_modes
def current_version
return Gem::Version.new('0') if enterprise_versions.last.nil?
enterprise_versions.last
end
private :current_version
def from_current_version
from_version current_version
end
private :from_current_version
def from_version(v)
Gem::Version::Requirement.new ">= #{v}"
end
private :from_version
end
end
end
end
end