bmaland-aegis 1.1.5 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -31,7 +31,7 @@ begin
31
31
  gemspec.homepage = "http://github.com/bmaland/aegis"
32
32
  gemspec.description = "Aegis is a role-based permission system, where all users are given a role. It is possible to define detailed and complex permissions for each role very easily."
33
33
  gemspec.authors = ["Henning Koch"]
34
- gemspec.version = '1.1.5'
34
+ gemspec.version = '1.1.6'
35
35
  end
36
36
  rescue LoadError
37
37
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.5
1
+ 1.1.6
@@ -0,0 +1,99 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{bmaland-aegis}
8
+ s.version = "1.1.6"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Henning Koch"]
12
+ s.date = %q{2009-11-11}
13
+ s.description = %q{Aegis is a role-based permission system, where all users are given a role. It is possible to define detailed and complex permissions for each role very easily.}
14
+ s.email = %q{github@makandra.de}
15
+ s.extra_rdoc_files = [
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "MIT-LICENSE",
21
+ "README.rdoc",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "bmaland-aegis.gemspec",
25
+ "init.rb",
26
+ "lib/aegis.rb",
27
+ "lib/aegis/constants.rb",
28
+ "lib/aegis/has_role.rb",
29
+ "lib/aegis/normalization.rb",
30
+ "lib/aegis/permission_error.rb",
31
+ "lib/aegis/permission_evaluator.rb",
32
+ "lib/aegis/permissions.rb",
33
+ "lib/aegis/role.rb",
34
+ "lib/rails/active_record.rb",
35
+ "test/app_root/app/controllers/application_controller.rb",
36
+ "test/app_root/app/models/permissions.rb",
37
+ "test/app_root/app/models/soldier.rb",
38
+ "test/app_root/app/models/user.rb",
39
+ "test/app_root/app/models/user_subclass.rb",
40
+ "test/app_root/config/boot.rb",
41
+ "test/app_root/config/database.yml",
42
+ "test/app_root/config/environment.rb",
43
+ "test/app_root/config/environments/in_memory.rb",
44
+ "test/app_root/config/environments/mysql.rb",
45
+ "test/app_root/config/environments/postgresql.rb",
46
+ "test/app_root/config/environments/sqlite.rb",
47
+ "test/app_root/config/environments/sqlite3.rb",
48
+ "test/app_root/config/routes.rb",
49
+ "test/app_root/db/migrate/20090408115228_create_users.rb",
50
+ "test/app_root/db/migrate/20090429075648_create_soldiers.rb",
51
+ "test/app_root/lib/console_with_fixtures.rb",
52
+ "test/app_root/log/.gitignore",
53
+ "test/app_root/script/console",
54
+ "test/has_role_options_test.rb",
55
+ "test/has_role_test.rb",
56
+ "test/permissions_test.rb",
57
+ "test/test_helper.rb",
58
+ "test/validation_test.rb"
59
+ ]
60
+ s.homepage = %q{http://github.com/bmaland/aegis}
61
+ s.rdoc_options = ["--charset=UTF-8"]
62
+ s.require_paths = ["lib"]
63
+ s.rubygems_version = %q{1.3.5}
64
+ s.summary = %q{Role-based permissions for your user models.}
65
+ s.test_files = [
66
+ "test/validation_test.rb",
67
+ "test/permissions_test.rb",
68
+ "test/test_helper.rb",
69
+ "test/app_root/db/migrate/20090408115228_create_users.rb",
70
+ "test/app_root/db/migrate/20090429075648_create_soldiers.rb",
71
+ "test/app_root/lib/console_with_fixtures.rb",
72
+ "test/app_root/app/controllers/application_controller.rb",
73
+ "test/app_root/app/models/permissions.rb",
74
+ "test/app_root/app/models/soldier.rb",
75
+ "test/app_root/app/models/user_subclass.rb",
76
+ "test/app_root/app/models/user.rb",
77
+ "test/app_root/config/environments/sqlite3.rb",
78
+ "test/app_root/config/environments/sqlite.rb",
79
+ "test/app_root/config/environments/postgresql.rb",
80
+ "test/app_root/config/environments/in_memory.rb",
81
+ "test/app_root/config/environments/mysql.rb",
82
+ "test/app_root/config/environment.rb",
83
+ "test/app_root/config/routes.rb",
84
+ "test/app_root/config/boot.rb",
85
+ "test/has_role_options_test.rb",
86
+ "test/has_role_test.rb"
87
+ ]
88
+
89
+ if s.respond_to? :specification_version then
90
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
91
+ s.specification_version = 3
92
+
93
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
94
+ else
95
+ end
96
+ else
97
+ end
98
+ end
99
+
@@ -1,79 +1,95 @@
1
- module Aegis
2
- module HasRole
3
-
4
- def validates_role_name(options = {})
5
- validates_each :role_name do |record, attr, value|
6
- options[:message] ||= ActiveRecord::Errors.default_error_messages[:inclusion]
7
- role = ::Permissions.find_role_by_name(value)
8
- record.errors.add attr, options[:message] if role.nil?
9
- end
10
- end
11
-
12
- alias_method :validates_role, :validates_role_name
13
-
14
- def has_role(options = {})
15
-
16
- if options[:name_accessor]
17
- options[:name_reader] = "#{options[:name_accessor]}"
18
- options[:name_writer] = "#{options[:name_accessor]}="
19
- options.delete(:name_accessor)
20
- end
21
-
22
- self.class_eval do
23
-
24
- class_inheritable_accessor :aegis_role_name_reader, :aegis_role_name_writer
25
-
26
- self.aegis_role_name_reader = (options[:name_reader] || "role_name").to_sym
27
- self.aegis_role_name_writer = (options[:name_writer] || "role_name=").to_sym
28
-
29
- def aegis_role_name_reader
30
- self.class.class_eval{ aegis_role_name_reader }
31
- end
32
-
33
- def aegis_role_name_writer
34
- self.class.class_eval{ aegis_role_name_writer }
35
- end
36
-
37
- def aegis_role_name
38
- send(aegis_role_name_reader)
39
- end
40
-
41
- def aegis_role_name=(value)
42
- send(aegis_role_name_writer, value)
43
- end
44
-
45
- def role
46
- ::Permissions.find_role_by_name!(aegis_role_name)
47
- end
48
-
49
- def role=(role_or_name)
50
- self.aegis_role_name = if role_or_name.is_a?(Aegis::Role)
51
- role_or_name.name
52
- else
53
- role_or_name.to_s
54
- end
55
- end
56
-
57
- private
58
-
59
- # Delegate may_...? and may_...! methods to the user's role.
60
- def method_missing_with_aegis_permissions(symb, *args)
61
- method_name = symb.to_s
62
- if method_name =~ /^may_(.+?)[\!\?]$/
63
- role.send(symb, self, *args)
64
- elsif method_name =~ /^(.*?)\?$/ && queried_role = ::Permissions.find_role_by_name($1)
65
- role == queried_role
66
- else
67
- method_missing_without_aegis_permissions(symb, *args)
68
- end
69
- end
70
-
71
- alias_method_chain :method_missing, :aegis_permissions
72
-
73
- end
74
-
75
- end
76
-
77
- end
78
-
79
- end
1
+ module Aegis
2
+ module HasRole
3
+
4
+ def validates_role_name(options = {})
5
+ validates_each :role_name do |record, attr, value|
6
+ options[:message] ||= ActiveRecord::Errors.default_error_messages[:inclusion]
7
+ role = ::Permissions.find_role_by_name(value)
8
+ record.errors.add attr, options[:message] if role.nil?
9
+ end
10
+ end
11
+
12
+ alias_method :validates_role, :validates_role_name
13
+
14
+ def has_role(options = {})
15
+
16
+ if options[:name_accessor]
17
+ options[:name_reader] = "#{options[:name_accessor]}"
18
+ options[:name_writer] = "#{options[:name_accessor]}="
19
+ options.delete(:name_accessor)
20
+ end
21
+
22
+ self.class_eval do
23
+
24
+ class_inheritable_accessor :aegis_role_name_reader, :aegis_role_name_writer
25
+
26
+ self.aegis_role_name_reader = (options[:name_reader] || "role_name").to_sym
27
+ self.aegis_role_name_writer = (options[:name_writer] || "role_name=").to_sym
28
+
29
+ def aegis_role_name_reader
30
+ self.class.class_eval{ aegis_role_name_reader }
31
+ end
32
+
33
+ def aegis_role_name_writer
34
+ self.class.class_eval{ aegis_role_name_writer }
35
+ end
36
+
37
+ def aegis_role_name
38
+ send(aegis_role_name_reader)
39
+ end
40
+
41
+ def aegis_role_name=(value)
42
+ send(aegis_role_name_writer, value)
43
+ end
44
+
45
+ def role
46
+ ::Permissions.find_role_by_name!(aegis_role_name)
47
+ end
48
+
49
+ def role=(role_or_name)
50
+ self.aegis_role_name = if role_or_name.is_a?(Aegis::Role)
51
+ role_or_name.name
52
+ else
53
+ role_or_name.to_s
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ # Delegate may_...? and may_...! methods to the user's role.
60
+ def method_missing_with_aegis_permissions(symb, *args)
61
+ method_name = symb.to_s
62
+ if method_name =~ /^may_(.+?)[\!\?]$/
63
+ role.send(symb, self, *args)
64
+ elsif method_name =~ /^(.*?)\?$/ && queried_role = ::Permissions.find_role_by_name($1)
65
+ role == queried_role
66
+ else
67
+ method_missing_without_aegis_permissions(symb, *args)
68
+ end
69
+ end
70
+
71
+ alias_method_chain :method_missing, :aegis_permissions
72
+
73
+ def respond_to_with_aegis_permissions?(symb, include_private = false)
74
+ if symb.to_s =~ /^may_(.+?)[\!\?]$/
75
+ true
76
+ else
77
+ respond_to_without_aegis_permissions?(symb, include_private)
78
+ end
79
+ end
80
+
81
+ alias_method_chain :respond_to?, :aegis_permissions
82
+
83
+ def set_default_aegis_role_name
84
+ if new_record?
85
+ self.aegis_role_name ||= self.class.aegis_default_role_name
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ end
@@ -39,10 +39,20 @@ class HasRoleTest < ActiveSupport::TestCase
39
39
  end
40
40
  end
41
41
 
42
- should "have a default roule" do
42
+ should "have a default role" do
43
43
  assert :guest, User.new(:role_name => nil).role.name
44
44
  end
45
45
 
46
+ should "know that they respond to permission methods" do
47
+ assert @guest.respond_to?(:may_foo?)
48
+ assert @guest.respond_to?(:may_foo!)
49
+ end
50
+
51
+ should "retain the usual respond_to behaviour for non-permission methods" do
52
+ assert !@guest.respond_to?(:nonexisting_method)
53
+ assert @guest.respond_to?(:to_s)
54
+ end
55
+
46
56
  end
47
57
 
48
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bmaland-aegis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-10 00:00:00 +01:00
12
+ date: 2009-11-11 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -27,6 +27,7 @@ files:
27
27
  - README.rdoc
28
28
  - Rakefile
29
29
  - VERSION
30
+ - bmaland-aegis.gemspec
30
31
  - init.rb
31
32
  - lib/aegis.rb
32
33
  - lib/aegis/constants.rb