def process_call (exp)
klass = exp.shift
name = exp.shift
case name
when :role
analyze_rules
@has_permission = []
s(:call, klass, name)
when :has_permission_on
arglist_line = exp[0].line
arglist = process(exp.shift).shift
context = arglist.shift
args_hash = arglist.shift
@has_permission << {
:context => context,
:rules => [],
:privilege => args_hash && args_hash[:to],
:line => arglist_line
}
s(:call, klass, name)
when :to
@has_permission.last[:privilege] = process(exp.shift).shift if @has_permission
s(:call, klass, name)
when :if_attribute
rules = process(exp.shift).shift
rules.unshift :if_attribute
@has_permission.last[:rules] << rules if @has_permission
s(:call, klass, name)
when :if_permitted_to
rules = process(exp.shift).shift
rules.unshift :if_permitted_to
@has_permission.last[:rules] << rules if @has_permission
s(:call, klass, name)
else
s(:call, klass, name, process(exp.shift))
end
end