Revision 3d7bbe55
Added by Marc Dequènes almost 14 years ago
- ID 3d7bbe55cb6110cbe884ce7c45db045849a2be38
lib/cyborghood/order.rb | ||
---|---|---|
end
|
||
end
|
||
|
||
class SharedParameter
|
||
attr_reader :content_type, :content
|
||
class CommandParameter < String
|
||
attr_reader :content_type
|
||
|
||
def initialize(content, content_type = nil)
|
||
@content = content
|
||
super(content)
|
||
@content_type = content_type
|
||
end
|
||
|
||
def content
|
||
to_s
|
||
end
|
||
end
|
||
|
||
class ParameterReference
|
||
class CommandParameterRef
|
||
attr_reader :reference
|
||
|
||
def initialize(reference)
|
||
... | ... | |
@shared_parameters = params[:shared_parameters]
|
||
end
|
||
|
||
def self.parse(user, command_lines, shared_parameters)
|
||
def valid?
|
||
@error.nil? and @user and not @commands.empty?
|
||
end
|
||
end
|
||
|
||
class OrderParser
|
||
include I18nTranslation
|
||
|
||
def initialize(user)
|
||
@user = user
|
||
|
||
@commands = []
|
||
@shared_parameters = {}
|
||
@used_refs = []
|
||
end
|
||
|
||
def parse(command_lines)
|
||
logger.debug "Parsing Order"
|
||
used_refs = []
|
||
commands = []
|
||
command_lines.each do |line|
|
||
line.strip!
|
||
# skip empty lines and comments
|
||
... | ... | |
raw_cmd_parts = []
|
||
end
|
||
cmd_parts = raw_cmd_parts.collect do |word|
|
||
yield word, errors, used_refs
|
||
yield word, errors
|
||
end
|
||
|
||
commands << Command.new(line, cmd_parts, errors)
|
||
@commands << Command.new(line, cmd_parts, errors)
|
||
end
|
||
|
||
# remove references to unused parameters
|
||
shared_parameters.delete_if{|ref, param| not used_refs.include?(ref) }
|
||
@shared_parameters.delete_if{|ref, param| not @used_refs.include?(ref) }
|
||
|
||
logger.debug "Order is OK"
|
||
new(:user => user, :commands => commands, :shared_parameters => shared_parameters)
|
||
Order.new(:user => @user, :commands => @commands, :shared_parameters => @shared_parameters)
|
||
end
|
||
|
||
def self.dereference_param(shared_parameters, param, ref = nil)
|
||
if param.is_a? SharedParameter
|
||
[ref, param]
|
||
elsif param.is_a? ParameterReference
|
||
d_ref = param.reference
|
||
d_param = shared_parameters[d_ref]
|
||
return dereference_param(shared_parameters, d_param, d_ref)
|
||
def deref_param(param, old_ref = nil)
|
||
if param.is_a? CommandParameterRef
|
||
return deref_param(@shared_parameters[param.reference], param.reference)
|
||
elsif param.is_a? CommandParameter
|
||
return old_ref, param
|
||
elsif param.is_a? String or param.is_a? Fixnum
|
||
return deref_param(@shared_parameters[param], param)
|
||
else
|
||
nil
|
||
end
|
||
end
|
||
|
||
def valid?
|
||
@error.nil? and @user and not @commands.empty?
|
||
end
|
||
end
|
||
end
|
Also available in: Unified diff
[evol] improved Order classes a lot (closes #101)