Class Authorization::DevelopmentSupport::Analyzer::MergeableRulesProcessor
In: lib/declarative_authorization/development_support/analyzer.rb
Parent: GeneralAuthorizationProcessor

Methods

Public Instance methods

[Source]

     # File lib/declarative_authorization/development_support/analyzer.rb, line 178
178:         def analyze_rules
179:           if @has_permission
180:             #p @has_permission
181:             permissions_by_context_and_rules = @has_permission.inject({}) do |memo, permission|
182:               key = [permission[:context], permission[:rules]]
183:               memo[key] ||= []
184:               memo[key] << permission
185:               memo
186:             end
187: 
188:             permissions_by_context_and_rules.each do |key, rules|
189:               if rules.length > 1
190:                 rule_lines = rules.collect {|rule| rule[:line] }
191:                 rules.each do |rule|
192:                   @analyzer.reports << Report.new(:mergeable_rules, "", rule[:line],
193:                     "Similar rules already in line(s) " +
194:                         rule_lines.reject {|l| l == rule[:line] } * ", ")
195:                 end
196:               end
197:             end
198:           end
199:         end

[Source]

     # File lib/declarative_authorization/development_support/analyzer.rb, line 201
201:         def process_call (exp)
202:           klass = exp.shift
203:           name = exp.shift
204:           case name
205:           when :role
206:             analyze_rules
207:             @has_permission = []
208:             s(:call, klass, name)
209:           when :has_permission_on
210:             arglist_line = exp[0].line
211:             arglist = process(exp.shift).shift
212:             context = arglist.shift
213:             args_hash = arglist.shift
214:             @has_permission << {
215:               :context => context,
216:               :rules => [],
217:               :privilege => args_hash && args_hash[:to],
218:               # a hack: call exp line seems to be wrong
219:               :line => arglist_line
220:             }
221:             s(:call, klass, name)
222:           when :to
223:             @has_permission.last[:privilege] = process(exp.shift).shift if @has_permission
224:             s(:call, klass, name)
225:           when :if_attribute
226:             rules = process(exp.shift).shift
227:             rules.unshift :if_attribute
228:             @has_permission.last[:rules] << rules if @has_permission
229:             s(:call, klass, name)
230:           when :if_permitted_to
231:             rules = process(exp.shift).shift
232:             rules.unshift :if_permitted_to
233:             @has_permission.last[:rules] << rules if @has_permission
234:             s(:call, klass, name)
235:           else
236:             s(:call, klass, name, process(exp.shift))
237:           end
238:         end

[Validate]