Skip to content

Commit

Permalink
parameter rework
Browse files Browse the repository at this point in the history
  • Loading branch information
triskweline committed Nov 11, 2009
1 parent 77b3721 commit 9a103e2
Show file tree
Hide file tree
Showing 11 changed files with 106 additions and 14 deletions.
32 changes: 25 additions & 7 deletions lib/aegis/has_role.rb
Expand Up @@ -13,18 +13,28 @@ def validates_role_name(options = {})

def has_role(options = {})

if options[:name_accessor]
options[:name_reader] = "#{options[:name_accessor]}"
options[:name_writer] = "#{options[:name_accessor]}="
options.delete(:name_accessor)
# Legacy parameter names
options[:accessor] ||= options.delete(:name_accessor)
options[:reader] ||= options.delete(:name_reader)
options[:writer] ||= options.delete(:name_writer)

if options[:accessor]
options[:reader] = "#{options[:accessor]}"
options[:writer] = "#{options[:accessor]}="
options.delete(:accessor)
end

self.class_eval do

class_inheritable_accessor :aegis_role_name_reader, :aegis_role_name_writer
class_inheritable_accessor :aegis_role_name_reader, :aegis_role_name_writer, :aegis_default_role_name

self.aegis_role_name_reader = (options[:name_reader] || "role_name").to_sym
self.aegis_role_name_writer = (options[:name_writer] || "role_name=").to_sym
if options[:default]
self.aegis_default_role_name = options[:default].to_s
after_initialize :set_default_aegis_role_name
end

self.aegis_role_name_reader = (options[:reader] || "role_name").to_sym
self.aegis_role_name_writer = (options[:writer] || "role_name=").to_sym

def aegis_role_name_reader
self.class.class_eval{ aegis_role_name_reader }
Expand Down Expand Up @@ -70,6 +80,14 @@ def method_missing_with_aegis_permissions(symb, *args)

alias_method_chain :method_missing, :aegis_permissions

def set_default_aegis_role_name
puts "set default!!!!!!!!"
if new_record?
puts "set default!!!!!!!!"
self.aegis_role_name ||= self.class.aegis_default_role_name
end
end

end

end
Expand Down
5 changes: 2 additions & 3 deletions lib/aegis/permissions.rb
Expand Up @@ -10,7 +10,6 @@ def self.inherited(base)
end

module ClassMethods


def role(role_name, options = {})
role_name = role_name.to_sym
Expand Down Expand Up @@ -53,8 +52,8 @@ def may?(role_or_role_name, permission, *args)
end

def evaluate_permission_blocks(role, blocks, *args)
evaluator = Aegis::PermissionEvaluator.new(role)
evaluator.evaluate(blocks, args)
evaluator = Aegis::PermissionEvaluator.new(role)
evaluator.evaluate(blocks, args)
end

def denied?(*args)
Expand Down
6 changes: 6 additions & 0 deletions test/app_root/app/models/old_soldier.rb
@@ -0,0 +1,6 @@
class VeteranSoldier < ActiveRecord::Base

# Use legacy parameter :name_accessor instead of :accessor
has_role :name_accessor => "rank"

end
2 changes: 1 addition & 1 deletion test/app_root/app/models/soldier.rb
@@ -1,5 +1,5 @@
class Soldier < ActiveRecord::Base

has_role :name_accessor => "rank"
has_role :accessor => "rank"

end
5 changes: 5 additions & 0 deletions test/app_root/app/models/trust_fund_kid.rb
@@ -0,0 +1,5 @@
class TrustFundKid < ActiveRecord::Base

has_role :default => :admin

end
6 changes: 6 additions & 0 deletions test/app_root/app/models/veteran_soldier.rb
@@ -0,0 +1,6 @@
class VeteranSoldier < ActiveRecord::Base

# Using legacy parameter names
has_role :name_accessor => "rank"

end
2 changes: 1 addition & 1 deletion test/app_root/db/migrate/20090408115228_create_users.rb
Expand Up @@ -2,7 +2,7 @@ class CreateUsers < ActiveRecord::Migration

def self.up
create_table :users do |t|
t.string "role_name"
t.string :role_name
t.timestamps
end
end
Expand Down
2 changes: 0 additions & 2 deletions test/app_root/db/migrate/20090429075648_create_soldiers.rb
@@ -1,12 +1,10 @@
class CreateSoldiers < ActiveRecord::Migration

def self.up

create_table :soldiers do |t|
t.string :rank
t.timestamps
end

end

def self.down
Expand Down
14 changes: 14 additions & 0 deletions test/app_root/db/migrate/20091110075648_create_veteran_soldiers.rb
@@ -0,0 +1,14 @@
class CreateVeteranSoldiers < ActiveRecord::Migration

def self.up
create_table :veteran_soldiers do |t|
t.string :rank
t.timestamps
end
end

def self.down
drop_table :veteran_soldiers
end

end
15 changes: 15 additions & 0 deletions test/app_root/db/migrate/20091110075649_create_trust_fund_kids.rb
@@ -0,0 +1,15 @@
class CreateTrustFundKids < ActiveRecord::Migration

def self.up
create_table :trust_fund_kids do |t|
t.string :role_name
t.integer :account_balance
t.timestamps
end
end

def self.down
drop_table :trust_fund_kids
end

end
31 changes: 31 additions & 0 deletions test/has_role_options_test.rb
Expand Up @@ -25,4 +25,35 @@ class HasRoleOptionsTest < ActiveSupport::TestCase

end

context "A record wiring up its role using legacy parameter names" do

setup do
@vetaran_soldier = VeteranSoldier.new
end

should "allow its role to be written and read" do
@vetaran_soldier.role = "guest"
assert "guest", @vetaran_soldier.role.name
end

end

context "A record with a default role" do

should "create new instances with that role" do
assert_equal "admin", TrustFundKid.new.role.name
end

should "create ignore the default if another role is given" do
assert_equal :student, TrustFundKid.new(:role_name => "student").role.name
end

should "not update existing records with the default role" do
kid = TrustFundKid.create!(:role_name => "student")
kid.update_attributes(:account_balance => 10_000_000)
assert_equal :student, kid.reload.role.name
end

end

end

0 comments on commit 9a103e2

Please sign in to comment.