module Acl9::ControllerExtensions::ClassMethods
Public Instance Methods
access_control(*args, &block)
click to toggle source
# File lib/acl9/controller_extensions.rb, line 10 def access_control(*args, &block) opts = args.extract_options! case args.size when 0 then true when 1 meth = args.first if meth.is_a? Symbol opts[:as_method] = meth else raise ArgumentError, "access_control argument must be a :symbol!" end else raise ArgumentError, "Invalid arguments for access_control" end subject_method = opts[:subject_method] || Acl9::config[:default_subject_method] raise ArgumentError, "Block must be supplied to access_control" unless block filter = opts[:filter] filter = true if filter.nil? case helper = opts[:helper] when true raise ArgumentError, "you should specify :helper => :method_name" if !opts[:as_method] when nil then nil else if opts[:as_method] raise ArgumentError, "you can't specify both method name and helper name" else opts[:as_method] = helper filter = false end end method = opts[:as_method] query_method_available = true generator = case when method && filter Acl9::Dsl::Generators::FilterMethod.new(subject_method, method) when method && !filter query_method_available = false Acl9::Dsl::Generators::BooleanMethod.new(subject_method, method) else Acl9::Dsl::Generators::FilterLambda.new(subject_method) end generator.acl_block!(&block) generator.install_on(self, opts) if query_method_available && (query_method = opts.delete(:query_method)) case query_method when true if method query_method = "#{method}?" else raise ArgumentError, "You must specify :query_method as Symbol" end when Symbol, String # okay here else raise ArgumentError, "Invalid value for :query_method" end second_generator = Acl9::Dsl::Generators::BooleanMethod.new(subject_method, query_method) second_generator.acl_block!(&block) second_generator.install_on(self, opts) end end