contextually 0.0.1 → 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,17 +6,79 @@
6
6
 
7
7
  Contextually is a gem for running Rails controller tests under different user contexts in a convenient way. So you can test your authorization without much effort.
8
8
 
9
- == Features/Problems:
9
+ == Synopsis:
10
10
 
11
- * FIX (list of features or problems)
11
+ Somewhere sensible (like your spec helper file), define your contexts like this:
12
12
 
13
- == Synopsis:
13
+ Contextually.define do
14
+ roles :user, :visitor, :monkey
14
15
 
15
- FIX (code sample of usage)
16
+ group :user, :monkey, :as => :member
17
+ group :visitor, :monkey, :as => :idiot
16
18
 
17
- == Install:
19
+ before :user do
20
+ controller.stub!(:current_user).and_return(:user)
21
+ end
22
+ before :visitor do
23
+ controller.stub!(:current_user).and_return(nil)
24
+ end
25
+ before :monkey do
26
+ controller.stub!(:current_user).and_return(:monkey)
27
+ end
28
+
29
+ deny_access_to :visitor do
30
+ it("should deny access") { should redirect_to(new_session_url) }
31
+ end
32
+ deny_access do
33
+ it("should deny access") { should redirect_to(root_url) }
34
+ end
35
+ end
36
+
37
+ Then use them in your controller specs like this:
38
+
39
+ describe TestsController do
40
+ as :user, :get => :index do
41
+ it { should respond_with(:success) }
42
+ end
43
+
44
+ as :visitor, :get => :index do
45
+ it("should deny access") { should redirect_to(new_session_url) }
46
+ end
47
+
48
+ as :visitor, :monkey, :user, :get => :show do
49
+ it { should respond_with(:success) }
50
+ end
51
+
52
+ as :visitor, :monkey, :user, "GET /test" do
53
+ describe :get => :show do
54
+ it { should respond_with(:success) }
55
+ end
56
+ end
57
+
58
+ as :visitor, :monkey, :user do
59
+ describe :get => :show do
60
+ it { should respond_with(:success) }
61
+ end
62
+ end
18
63
 
64
+ only_as :user, :get => :index do
65
+ it { should respond_with(:success) }
66
+ end
19
67
 
68
+ deny_access_to :monkey, :visitor, :get => :index
69
+
70
+ deny_access_to :idiot, :get => :index
71
+
72
+ only_as :member, :get => :foo do
73
+ it { should respond_with(:success) }
74
+ end
75
+ end
76
+
77
+ == Install:
78
+
79
+ Contextually is hosted on Gemcutter.org only. Add this to your Rails test environment:
80
+
81
+ config.gem "contextually"
20
82
 
21
83
  == License:
22
84
 
@@ -1,8 +1,8 @@
1
1
  module Contextually
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1'
3
3
 
4
4
  class UndefinedContext < StandardError; end
5
5
  end
6
6
 
7
7
  require 'contextually/example_extension'
8
- require 'contextually/definition'
8
+ require 'contextually/definition'
@@ -18,6 +18,10 @@ module Contextually
18
18
  def before(name, &block)
19
19
  Contextually.roles[name].before = block
20
20
  end
21
+
22
+ def before_all(&block)
23
+ Contextually.before_all = block
24
+ end
21
25
 
22
26
  def deny_access_to(name, &block)
23
27
  Contextually.roles[name].deny_access = block
@@ -29,7 +33,7 @@ module Contextually
29
33
  end
30
34
 
31
35
  class << self
32
- attr_accessor :roles, :deny_access_to_all
36
+ attr_accessor :roles, :deny_access_to_all, :before_all
33
37
 
34
38
  def groups
35
39
  @groups ||= {}
@@ -54,4 +58,4 @@ module Contextually
54
58
  Contextually::Definition.define(&block)
55
59
  end
56
60
  end
57
- end
61
+ end
@@ -2,16 +2,14 @@ module Contextually
2
2
  module ExampleExtension
3
3
  def only_as(*args, &block)
4
4
  as(*args, &block)
5
- roles, params = extract_params(args)
6
- deny_params = Contextually.roles.keys - roles
7
- deny_params.push(params)
8
- deny_access_to(*deny_params)
5
+ only_allow_access_to(*args)
9
6
  end
10
7
 
11
8
  def as(*args, &block)
12
9
  roles, params = extract_params(args)
13
10
  roles.each do |role|
14
11
  context "as #{role}" do
12
+ before(&Contextually.before_all) if Contextually.before_all
15
13
  before(&Contextually.before(role))
16
14
  describe(params.dup, &block)
17
15
  end
@@ -24,6 +22,7 @@ module Contextually
24
22
  block = Contextually.deny_access(role)
25
23
  if block
26
24
  context "as #{role}" do
25
+ before(&Contextually.before_all) if Contextually.before_all
27
26
  before(&Contextually.before(role))
28
27
  describe(params.dup, &block)
29
28
  end
@@ -32,6 +31,13 @@ module Contextually
32
31
  end
33
32
  end
34
33
  end
34
+
35
+ def only_allow_access_to(*args)
36
+ roles, params = extract_params(args)
37
+ deny_params = Contextually.roles.keys - roles
38
+ deny_params.push(params)
39
+ deny_access_to(*deny_params)
40
+ end
35
41
 
36
42
  private
37
43
 
@@ -48,4 +54,4 @@ module Contextually
48
54
  end
49
55
  end
50
56
 
51
- Spec::Rails::Example::ControllerExampleGroup.send(:extend, Contextually::ExampleExtension) if defined?(Spec)
57
+ Spec::Rails::Example::ControllerExampleGroup.send(:extend, Contextually::ExampleExtension) if defined?(Spec)
@@ -6,6 +6,10 @@ Contextually.define do
6
6
  group :user, :monkey, :as => :member
7
7
  group :visitor, :monkey, :as => :idiot
8
8
 
9
+ before_all do
10
+ controller.stub!(:global_before).and_return(true)
11
+ end
12
+
9
13
  before :user do
10
14
  controller.stub!(:current_user).and_return(:user)
11
15
  end
@@ -34,6 +38,7 @@ end
34
38
 
35
39
  class TestsController < ApplicationController
36
40
  def index
41
+ raise "global before not run" unless global_before
37
42
  if not current_user
38
43
  redirect_to new_session_url
39
44
  elsif not current_user == :user
@@ -98,5 +103,9 @@ describe TestsController, :type => :controller do
98
103
  it { should respond_with(:success) }
99
104
  end
100
105
  end
106
+
107
+ context "with only_allow_access_to" do
108
+ only_allow_access_to :user, :get => :index
109
+ end
101
110
  end
102
111
 
@@ -73,4 +73,10 @@ TestsController with groups as monkey responding to #GET foo
73
73
  - should respond with success
74
74
 
75
75
  TestsController with groups as visitor responding to #GET foo
76
- - should deny access
76
+ - should deny access
77
+
78
+ TestsController with only_allow_access_to as visitor responding to #GET index
79
+ - should deny access
80
+
81
+ TestsController with only_allow_access_to as monkey responding to #GET index
82
+ - should deny access
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contextually
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: "0.1"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-16 00:00:00 +02:00
12
+ date: 2009-10-18 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency