class Authorization::DevelopmentSupport::Analyzer::MergeableRulesProcessor
Public Instance Methods
analyze_rules()
click to toggle source
# File lib/declarative_authorization/development_support/analyzer.rb, line 178 def analyze_rules if @has_permission #p @has_permission permissions_by_context_and_rules = @has_permission.inject({}) do |memo, permission| key = [permission[:context], permission[:rules]] memo[key] ||= [] memo[key] << permission memo end permissions_by_context_and_rules.each do |key, rules| if rules.length > 1 rule_lines = rules.collect {|rule| rule[:line] } rules.each do |rule| @analyzer.reports << Report.new(:mergeable_rules, "", rule[:line], "Similar rules already in line(s) " + rule_lines.reject {|l| l == rule[:line] } * ", ") end end end end end
process_call(exp)
click to toggle source
# File lib/declarative_authorization/development_support/analyzer.rb, line 201 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], # a hack: call exp line seems to be wrong :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