Permalink
Browse files

removing need to pass tableize option around for query conditions

  • Loading branch information...
ryanb committed Jul 20, 2010
1 parent a42e067 commit 964a4765b1374874c639e647091c1133252da1b9
View
@@ -183,8 +183,8 @@ def clear_aliased_actions
end
# Returns a CanCan::Query instance to help generate database queries based on the ability.
- def query(action, subject, options = {})
- Query.new(relevant_can_definitions_without_block(action, subject), subject, options)
+ def query(action, subject)
+ Query.new(subject, relevant_can_definitions_without_block(action, subject))
end
private
@@ -20,7 +20,7 @@ module ClassMethods
# Here only the articles which the user can update are returned. This
# internally uses Ability#conditions method, see that for more information.
def accessible_by(ability, action = :read)
- query = ability.query(action, self, :tableize => true)
+ query = ability.query(action, self)
conditions = query.sql_conditions || {:id => nil}
if respond_to? :where
where(conditions).joins(query.association_joins)
@@ -4,7 +4,6 @@ module CanCan
# helpful methods to determine permission checking and conditions hash generation.
class CanDefinition # :nodoc:
attr_reader :conditions, :block, :base_behavior
- include ActiveSupport::Inflector
attr_reader :block
attr_reader :actions
attr_writer :expanded_actions
@@ -37,17 +36,14 @@ def matches_conditions?(action, subject, extra_args)
end
end
- # Returns a hash of conditions. If the ":tableize => true" option is passed
- # it will pluralize the association conditions to match the table name.
- def conditions(options = {})
- if options[:tableize] && @conditions.kind_of?(Hash)
+ # Returns a hash of conditions, pluralizing the table names
+ def tableized_conditions
+ if @conditions
@conditions.inject({}) do |tableized_conditions, (name, value)|
- name = tableize(name).to_sym if value.kind_of? Hash
+ name = name.to_s.tableize.to_sym if value.kind_of? Hash
tableized_conditions[name] = value
tableized_conditions
end
- else
- @conditions
end
end
View
@@ -3,10 +3,9 @@ module CanCan
# Generates the sql conditions and association joins for use in ActiveRecord queries.
# Normally you will not use this class directly, but instead through ActiveRecordAdditions#accessible_by.
class Query
- def initialize(can_definitions, sanitizer, options)
- @can_definitions = can_definitions
+ def initialize(sanitizer, can_definitions)
@sanitizer = sanitizer
- @options = options
+ @can_definitions = can_definitions
end
# Returns an array of arrays composing from desired action and hash of conditions which match the given ability.
@@ -27,7 +26,7 @@ def initialize(can_definitions, sanitizer, options)
def conditions
unless @can_definitions.empty?
@can_definitions.map do |can_definition|
- [can_definition.base_behavior, can_definition.conditions(@options)]
+ [can_definition.base_behavior, can_definition.tableized_conditions]
end
else
false
@@ -34,7 +34,7 @@
it "should return table names in conditions for association joins" do
@conditions[:foo] = {:bar => 1}
@conditions[:test] = 1
- @can.conditions(:tableize => true).should == { :foos => { :bar => 1}, :test => 1 }
+ @can.tableized_conditions.should == { :foos => { :bar => 1}, :test => 1 }
end
it "should return no association joins if conditions is nil" do
View
@@ -84,19 +84,4 @@
@ability.query(:manage, Person).sql_conditions.should == {:id=>1}
@ability.query(:read, Person).sql_conditions.should == 'true=true'
end
-
- it "should accept array condition for use in sql" do
- @ability.can :read, Person, ["user_id = ?", 1]
-
- @ability.query(:read, Person).sql_conditions.should == ['user_id = ?', 1]
- @ability.query(:read, Person).association_joins.should be_nil
- end
-
- it "should accept array condition for use in sql and do sanitizing in complex conditions" do
- @ability.cannot :read, Person
- @ability.can :read, Person, ["user_id = ?", 1]
-
- @ability.query(:read, Person).sql_conditions.should == 'user_id = 1'
- @ability.query(:read, Person).association_joins.should be_nil
- end
end

0 comments on commit 964a476

Please sign in to comment.