Project

General

Profile

« Previous | Next » 

Revision 3d7bbe55

Added by Marc Dequènes almost 14 years ago

  • ID 3d7bbe55cb6110cbe884ce7c45db045849a2be38

[evol] improved Order classes a lot (closes #101)

View differences:

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