aegis 2.5.1 → 2.5.2

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/.gitignore CHANGED
@@ -2,3 +2,5 @@ doc
2
2
  pkg
3
3
  *.gem
4
4
  .idea
5
+ Gemfile.lock
6
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.5.1
1
+ 2.5.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{aegis}
8
- s.version = "2.5.1"
8
+ s.version = "2.5.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Henning Koch", "Tobias Kraze"]
12
- s.date = %q{2010-11-02}
12
+ s.date = %q{2010-11-06}
13
13
  s.description = %q{Aegis is an authorization solution for Ruby on Rails that supports roles and a RESTish, resource-style declaration of permission rules.}
14
14
  s.email = %q{henning.koch@makandra.de}
15
15
  s.extra_rdoc_files = [
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.files = [
19
19
  ".gitignore",
20
20
  "Gemfile",
21
- "Gemfile.lock",
22
21
  "MIT-LICENSE",
23
22
  "README.rdoc",
24
23
  "Rakefile",
@@ -39,6 +38,7 @@ Gem::Specification.new do |s|
39
38
  "lib/aegis/sieve.rb",
40
39
  "lib/aegis/spec.rb",
41
40
  "lib/aegis/spec/matchers.rb",
41
+ "lib/aegis/util.rb",
42
42
  "spec/aegis/controller_spec.rb",
43
43
  "spec/aegis/has_role_spec.rb",
44
44
  "spec/aegis/loader_spec.rb",
@@ -69,7 +69,8 @@ Gem::Specification.new do |s|
69
69
  "spec/controllers/reviews_controller_spec.rb",
70
70
  "spec/rcov.opts",
71
71
  "spec/spec.opts",
72
- "spec/spec_helper.rb"
72
+ "spec/spec_helper.rb",
73
+ "spec/support/spec_candy.rb"
73
74
  ]
74
75
  s.homepage = %q{http://github.com/makandra/aegis}
75
76
  s.post_install_message = %q{Upgrade notice:
@@ -106,7 +107,8 @@ Also see http://wiki.github.com/makandra/aegis/controller-integration
106
107
  "spec/aegis/permissions_spec.rb",
107
108
  "spec/aegis/sieve_spec.rb",
108
109
  "spec/aegis/spec/matchers_spec.rb",
109
- "spec/aegis/controller_spec.rb"
110
+ "spec/aegis/controller_spec.rb",
111
+ "spec/support/spec_candy.rb"
110
112
  ]
111
113
 
112
114
  if s.respond_to? :specification_version then
@@ -29,8 +29,7 @@ module Aegis
29
29
  role_names.include?(role_name.to_s)
30
30
  end
31
31
 
32
- prototype = respond_to?(:singleton_class) ? singleton_class : metaclass
33
- prototype.send :define_method, :validates_role do |*validate_options|
32
+ Aegis::Util.define_class_method(self, :validates_role) do |*validate_options|
34
33
  validate_options = validate_options[0] || {}
35
34
 
36
35
  send :define_method, :validate_role do
@@ -66,9 +65,11 @@ module Aegis
66
65
  send :define_method, :method_missing_with_aegis_permissions do |symb, *args|
67
66
  method_name = symb.to_s
68
67
  if method_name =~ may_pattern
69
- action_path = $1
70
- severity = $2
71
- permissions.call.send("may#{severity}", self, action_path, *args)
68
+ action_path, severity = $1, $2
69
+ Aegis::Util.define_class_method(self, method_name) do |*method_args|
70
+ permissions.call.send("may#{severity}", self, action_path, *method_args)
71
+ end
72
+ send(method_name, *args)
72
73
  else
73
74
  method_missing_without_aegis_permissions(symb, *args)
74
75
  end
@@ -77,12 +78,8 @@ module Aegis
77
78
  alias_method_chain :method_missing, :aegis_permissions
78
79
 
79
80
  send :define_method, :respond_to_with_aegis_permissions? do |symb, *args|
80
- if symb.to_s =~ may_pattern
81
- true
82
- else
83
- include_private = args.first.nil? ? false : args.first
84
- respond_to_without_aegis_permissions?(symb, include_private)
85
- end
81
+ include_private = args.first.nil? ? false : args.first
82
+ respond_to_without_aegis_permissions?(symb, include_private) || (symb.to_s =~ may_pattern)
86
83
  end
87
84
 
88
85
  alias_method_chain :respond_to?, :aegis_permissions
@@ -4,7 +4,7 @@ module Aegis
4
4
 
5
5
  def paths
6
6
  [ 'ostruct',
7
-
7
+ 'aegis/util',
8
8
  'aegis/errors',
9
9
  'aegis/action',
10
10
  'aegis/compiler',
@@ -75,16 +75,17 @@ module Aegis
75
75
  compile
76
76
  action = nil
77
77
  action_name = action_name.to_s
78
- guess_action_paths(resource_name, action_name, map).detect do |path|
78
+ possible_paths = guess_action_paths(resource_name, action_name, map)
79
+ possible_paths.detect do |path|
79
80
  action = find_action_by_path(path, false)
80
81
  end
81
- handle_missing_action(action)
82
+ handle_missing_action(action, possible_paths.first)
82
83
  end
83
84
 
84
85
  def find_action_by_path(path, handle_missing = true)
85
86
  compile
86
87
  action = @actions_by_path[path.to_s]
87
- action = handle_missing_action(action) if handle_missing
88
+ action = handle_missing_action(action, path) if handle_missing
88
89
  action
89
90
  end
90
91
 
@@ -117,12 +118,12 @@ module Aegis
117
118
  end
118
119
  end
119
120
 
120
- def handle_missing_action(possibly_missing_action)
121
+ def handle_missing_action(possibly_missing_action, path)
121
122
  possibly_missing_action ||= case @missing_action_strategy
122
123
  when :default_permission then Aegis::Action.undefined
123
124
  when :allow then Aegis::Action.allow_to_all
124
125
  when :deny then Aegis::Action.deny_to_all
125
- when :error then raise Aegis::MissingAction, "Undefined Aegis action: #{action}"
126
+ when :error then raise Aegis::MissingAction, "Missing action: #{path}"
126
127
  end
127
128
  end
128
129
 
@@ -0,0 +1,12 @@
1
+ module Aegis
2
+ class Util
3
+ class << self
4
+
5
+ def define_class_method(object, method, &body)
6
+ prototype = object.respond_to?(:singleton_class) ? object.singleton_class : object.metaclass
7
+ prototype.send(:define_method, method, &body)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -151,6 +151,12 @@ describe Aegis::HasRole do
151
151
  lambda { user.nonexisting_method }.should raise_error(NoMethodError)
152
152
  end
153
153
 
154
+ it 'should define a missing Aegis method so that method is used directly from there on' do
155
+ user = @user_class.new
156
+ user.should_receive_and_execute(:method_missing).once
157
+ 2.times { user.may_do_action? }
158
+ end
159
+
154
160
  end
155
161
 
156
162
  describe 'respond_to?' do
@@ -632,12 +632,12 @@ describe Aegis::Permissions do
632
632
  @permissions.may?(@admin, 'missing_action').should be_false
633
633
  end
634
634
 
635
- it "should raise an error if the strategy is :error" do
635
+ it "should raise an error naming the missing action if the strategy is :error" do
636
636
  @permissions.class_eval do
637
637
  missing_action_means :error
638
638
  end
639
- lambda { @permissions.may?(@user, 'missing_action') }.should raise_error(Aegis::MissingAction)
640
- lambda { @permissions.may?(@admin, 'missing_action') }.should raise_error(Aegis::MissingAction)
639
+ lambda { @permissions.may?(@user, 'missing_action') }.should raise_error(Aegis::MissingAction, 'Missing action: missing_action')
640
+ lambda { @permissions.may?(@admin, 'missing_action') }.should raise_error(Aegis::MissingAction, 'Missing action: missing_action')
641
641
  end
642
642
 
643
643
  end
@@ -18,3 +18,7 @@ Spec::Runner.configure do |config|
18
18
  config.use_transactional_fixtures = true
19
19
  config.use_instantiated_fixtures = false
20
20
  end
21
+
22
+ # Requires supporting files with custom matchers and macros, etc,
23
+ # in ./support/ and its subdirectories.
24
+ Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
@@ -0,0 +1,20 @@
1
+ # Abbreviated from http://makandra.com/notes/627-the-definitive-spec_candy-rb-rspec-helper
2
+
3
+ Object.class_eval do
4
+
5
+ # a should receive that executes the expected method as usual. does not work with and_return
6
+ def should_receive_and_execute(method)
7
+ method_called = "_#{method}_called"
8
+
9
+ prototype = respond_to?(:singleton_class) ? singleton_class : metaclass
10
+ prototype.class_eval do
11
+ define_method method do |*args|
12
+ send(method_called, *args)
13
+ super
14
+ end
15
+ end
16
+
17
+ should_receive(method_called)
18
+ end
19
+
20
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aegis
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 2
8
8
  - 5
9
- - 1
10
- version: 2.5.1
9
+ - 2
10
+ version: 2.5.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Henning Koch
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-11-02 00:00:00 +01:00
19
+ date: 2010-11-06 00:00:00 +01:00
20
20
  default_executable:
21
21
  dependencies: []
22
22
 
@@ -31,7 +31,6 @@ extra_rdoc_files:
31
31
  files:
32
32
  - .gitignore
33
33
  - Gemfile
34
- - Gemfile.lock
35
34
  - MIT-LICENSE
36
35
  - README.rdoc
37
36
  - Rakefile
@@ -52,6 +51,7 @@ files:
52
51
  - lib/aegis/sieve.rb
53
52
  - lib/aegis/spec.rb
54
53
  - lib/aegis/spec/matchers.rb
54
+ - lib/aegis/util.rb
55
55
  - spec/aegis/controller_spec.rb
56
56
  - spec/aegis/has_role_spec.rb
57
57
  - spec/aegis/loader_spec.rb
@@ -83,6 +83,7 @@ files:
83
83
  - spec/rcov.opts
84
84
  - spec/spec.opts
85
85
  - spec/spec_helper.rb
86
+ - spec/support/spec_candy.rb
86
87
  has_rdoc: true
87
88
  homepage: http://github.com/makandra/aegis
88
89
  licenses: []
@@ -148,3 +149,4 @@ test_files:
148
149
  - spec/aegis/sieve_spec.rb
149
150
  - spec/aegis/spec/matchers_spec.rb
150
151
  - spec/aegis/controller_spec.rb
152
+ - spec/support/spec_candy.rb
@@ -1,48 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- aegis (2.5.0)
5
-
6
- GEM
7
- remote: http://rubygems.org/
8
- specs:
9
- actionmailer (2.3.8)
10
- actionpack (= 2.3.8)
11
- actionpack (2.3.8)
12
- activesupport (= 2.3.8)
13
- rack (~> 1.1.0)
14
- activerecord (2.3.8)
15
- activesupport (= 2.3.8)
16
- activeresource (2.3.8)
17
- activesupport (= 2.3.8)
18
- activesupport (2.3.8)
19
- columnize (0.3.1)
20
- linecache (0.43)
21
- rack (1.1.0)
22
- rails (2.3.8)
23
- actionmailer (= 2.3.8)
24
- actionpack (= 2.3.8)
25
- activerecord (= 2.3.8)
26
- activeresource (= 2.3.8)
27
- activesupport (= 2.3.8)
28
- rake (>= 0.8.3)
29
- rake (0.8.7)
30
- rspec (1.2.9)
31
- rspec-rails (1.2.9)
32
- rack (>= 1.0.0)
33
- rspec (>= 1.2.9)
34
- ruby-debug (0.10.3)
35
- columnize (>= 0.1)
36
- ruby-debug-base (~> 0.10.3.0)
37
- ruby-debug-base (0.10.3)
38
- linecache (>= 0.3)
39
-
40
- PLATFORMS
41
- ruby
42
-
43
- DEPENDENCIES
44
- aegis!
45
- rails (= 2.3.8)
46
- rspec (= 1.2.9)
47
- rspec-rails (= 1.2.9)
48
- ruby-debug