Created
April 18, 2011 14:11
-
-
Save felipeelias/925425 to your computer and use it in GitHub Desktop.
just wondering
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'test/unit' | |
module RoleManagement | |
@@available_roles ||= [] | |
def available_roles | |
@@available_roles | |
end | |
def roles | |
@roles ||= {} | |
end | |
def deny(action_name) | |
roles[action_name] = false | |
end | |
def allow(action_name) | |
roles[action_name] = true | |
end | |
def set_role(action_name) | |
available_roles << action_name | |
class_eval do | |
define_method "can_#{action_name}?" do | |
!!self.class.roles[action_name] | |
end | |
end | |
end | |
end | |
class RoleBase | |
extend RoleManagement | |
set_role :edit_user | |
set_role :create_user | |
end | |
class GuestRole < RoleBase | |
deny :edit_user | |
# deny :create_user => by default is denied | |
end | |
class AdminRole < RoleBase | |
allow :edit_user | |
allow :create_user | |
end | |
class GuestRoleTest < Test::Unit::TestCase | |
def setup | |
@guest = GuestRole.new | |
end | |
def test_for_default_role | |
assert [email protected]_edit_user? | |
assert [email protected]_create_user? | |
end | |
def test_for_role_names | |
assert_equal @guest.class.available_roles, [:edit_user, :create_user] | |
end | |
end | |
class AdminRoleTest < Test::Unit::TestCase | |
def setup | |
@admin = AdminRole.new | |
end | |
def test_for_default_role | |
assert @admin.can_edit_user? | |
assert @admin.can_create_user? | |
end | |
end | |
class User | |
def role | |
return GuestRole.new | |
end | |
end | |
p User.new.role.can_create_user? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment