| Class | Authorization::DevelopmentSupport::Analyzer::MergeableRulesProcessor |
| In: |
lib/declarative_authorization/development_support/analyzer.rb
|
| Parent: | GeneralAuthorizationProcessor |
# 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
# 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