cantango-api 0.1.1 → 0.1.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/VERSION +1 -1
- data/cantango-api.gemspec +1 -1
- data/lib/cantango/api/scope/user.rb +3 -1
- data/lib/cantango/api/session/account.rb +6 -4
- data/lib/cantango/api/session/user.rb +7 -5
- data/lib/cantango/api_ext/macros/clazz.rb +12 -4
- data/lib/cantango/api_ext/macros/user.rb +0 -1
- data/spec/cantango/api/scope/account_spec.rb +2 -2
- data/spec/cantango/api/scope/user_spec.rb +5 -5
- data/spec/cantango/api/session/account_spec.rb +75 -0
- data/spec/fixtures/models/user_account.rb +11 -1
- data/spec/helpers/current_user_accounts.rb +4 -0
- data/spec/helpers/current_users.rb +5 -1
- metadata +22 -22
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/cantango-api.gemspec
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module CanTango::Api
|
2
2
|
module Scope
|
3
3
|
module User
|
4
|
+
include CanTango::Api::Ability::User
|
5
|
+
|
4
6
|
def scope_user scope, options = {}, &block
|
5
7
|
user = scoped_user(scope)
|
6
8
|
ab_scope = user_ability_scope(user, options)
|
@@ -16,7 +18,7 @@ module CanTango::Api
|
|
16
18
|
protected
|
17
19
|
|
18
20
|
def user_ability_scope user, options = {}
|
19
|
-
CanTango::Ability
|
21
|
+
CanTango::Scope::Ability.new user_ability(user, options)
|
20
22
|
end
|
21
23
|
|
22
24
|
def scoped_user scope
|
@@ -15,11 +15,13 @@ module CanTango::Api
|
|
15
15
|
# give me any logged in user or the guest user
|
16
16
|
def any_account *types
|
17
17
|
types = types.flatten.select_labels.map(&:to_sym)
|
18
|
-
|
18
|
+
types = types & ::CanTango.config.accounts.registered
|
19
|
+
accounts = types.map do |type|
|
19
20
|
meth = :"current_#{type}_account"
|
20
|
-
send(meth) if respond_to?(meth) && (types.empty? || types.include?(
|
21
|
-
end
|
22
|
-
|
21
|
+
send(meth) if respond_to?(meth) && (types.empty? || types.include?(type))
|
22
|
+
end
|
23
|
+
chosen_account = accounts.compact.first
|
24
|
+
chosen_account || guest_account
|
23
25
|
end
|
24
26
|
|
25
27
|
def guest_account
|
@@ -15,11 +15,13 @@ module CanTango::Api
|
|
15
15
|
# give me any logged in user or the guest user
|
16
16
|
def any_user *types
|
17
17
|
types = types.flatten.select_labels.map(&:to_sym)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
types = types & ::CanTango.config.users.registered
|
19
|
+
users = types.map do |type|
|
20
|
+
meth = :"current_#{type}"
|
21
|
+
send(meth) if respond_to?(meth) && (types.empty? || types.include?(type))
|
22
|
+
end
|
23
|
+
chosen_user = users.compact.first
|
24
|
+
chosen_user || guest_user
|
23
25
|
end
|
24
26
|
|
25
27
|
def guest_user
|
@@ -3,13 +3,21 @@ module CanTango::Macros
|
|
3
3
|
include CanTango::Macros::Account
|
4
4
|
include CanTango::Macros::User
|
5
5
|
|
6
|
-
def cantango
|
6
|
+
def cantango options = {}
|
7
|
+
type = case options
|
8
|
+
when Array
|
9
|
+
options.first
|
10
|
+
when Symbol
|
11
|
+
options
|
12
|
+
when Hash
|
13
|
+
options[:type]
|
14
|
+
end
|
7
15
|
# determine if user or account
|
8
16
|
if !type
|
9
|
-
(name =~ /.+Account$/) ? tango_account : tango_user
|
17
|
+
(name =~ /.+Account$/) ? tango_account(options) : tango_user(options)
|
10
18
|
else
|
11
|
-
tango_account and return if type.to_s == 'account'
|
12
|
-
tango_user and return if type.to_s == 'user'
|
19
|
+
tango_account(options) and return if type.to_s == 'account'
|
20
|
+
tango_user(options) and return if type.to_s == 'user'
|
13
21
|
raise ArgumentError, "Unable to determine type of class to register; Please specify :user or :account as argument"
|
14
22
|
end
|
15
23
|
end
|
@@ -30,7 +30,7 @@ describe CanTango::Api::Scope::Account do
|
|
30
30
|
describe 'scope_account(scope, options)' do
|
31
31
|
specify do
|
32
32
|
subject.scope_account :user do |ability|
|
33
|
-
ability.subject.
|
33
|
+
ability.subject.should == subject.current_user_account
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -38,7 +38,7 @@ describe CanTango::Api::Scope::Account do
|
|
38
38
|
describe 'real_account(scope, options)' do
|
39
39
|
specify do
|
40
40
|
subject.real_account :admin do |ability|
|
41
|
-
ability.subject.
|
41
|
+
ability.subject.should == subject.current_admin_account
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -12,21 +12,21 @@ class User
|
|
12
12
|
cantango
|
13
13
|
end
|
14
14
|
|
15
|
-
class
|
16
|
-
|
15
|
+
class Admin
|
16
|
+
tango_user :masquerade
|
17
17
|
end
|
18
18
|
|
19
19
|
describe CanTango::Api::Scope::User do
|
20
20
|
subject { Context.new }
|
21
21
|
|
22
22
|
before do
|
23
|
-
subject.
|
23
|
+
subject.current_admin.masquerade_as subject.current_user
|
24
24
|
end
|
25
25
|
|
26
26
|
describe 'scope_user(scope, options)' do
|
27
27
|
specify do
|
28
28
|
subject.scope_user :user do |user|
|
29
|
-
user.
|
29
|
+
user.subject.should == subject.current_user
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -34,7 +34,7 @@ describe CanTango::Api::Scope::User do
|
|
34
34
|
describe 'real_user(scope, options)' do
|
35
35
|
specify do
|
36
36
|
subject.real_user :user do |user|
|
37
|
-
user.
|
37
|
+
user.subject.should == subject.current_user
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fixtures/models'
|
3
|
+
require 'helpers/current_user_accounts'
|
4
|
+
|
5
|
+
class SessionContext
|
6
|
+
include Singleton
|
7
|
+
include CanTango::Api::Session::Account
|
8
|
+
|
9
|
+
include_and_extend ::CurrentUserAccounts
|
10
|
+
|
11
|
+
attr_writer :session
|
12
|
+
def session
|
13
|
+
@session ||= {}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# mock
|
18
|
+
module CanTango::Api
|
19
|
+
module Session
|
20
|
+
module Account
|
21
|
+
def guest_account
|
22
|
+
SessionContext.instance.current_guest_account
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class UserAccount
|
29
|
+
tango_account
|
30
|
+
end
|
31
|
+
|
32
|
+
class AdminAccount
|
33
|
+
tango_account
|
34
|
+
end
|
35
|
+
|
36
|
+
describe CanTango::Api::Session::Account do
|
37
|
+
subject { SessionContext.instance }
|
38
|
+
|
39
|
+
describe 'registered accounts' do
|
40
|
+
specify { CanTango.config.accounts.registered.should include(:user, :admin) }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'any_account' do
|
44
|
+
describe 'default to :guest if none found' do
|
45
|
+
specify do
|
46
|
+
subject.any_account(:unknown).should == subject.guest_account
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe 'find :admin' do
|
51
|
+
specify do
|
52
|
+
subject.any_account(:admin, :user).should == subject.current_admin_account
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'guest_account' do
|
58
|
+
specify do
|
59
|
+
subject.guest_account.role?(:guest).should be_true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe 'active_account' do
|
64
|
+
specify do
|
65
|
+
subject.active_account.should == nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'active_account=' do
|
70
|
+
specify do
|
71
|
+
subject.active_account = subject.current_admin_account
|
72
|
+
subject.active_account.should == subject.current_admin_account
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -1,7 +1,17 @@
|
|
1
1
|
class UserAccount
|
2
|
-
attr_accessor :user
|
2
|
+
attr_accessor :user, :roles
|
3
3
|
|
4
4
|
def initialize user, options = {}
|
5
5
|
@user = user
|
6
|
+
@options = options
|
7
|
+
@roles = options[:roles]
|
8
|
+
end
|
9
|
+
|
10
|
+
def role? name
|
11
|
+
roles.include? name
|
12
|
+
end
|
13
|
+
|
14
|
+
def roles
|
15
|
+
@roles ||= []
|
6
16
|
end
|
7
17
|
end
|
@@ -12,6 +12,10 @@ module CurrentUserAccounts
|
|
12
12
|
def current_user_account
|
13
13
|
@current_user_account ||= ::UserAccount.new(current_user, :roles => [:user])
|
14
14
|
end
|
15
|
+
|
16
|
+
def current_guest_account
|
17
|
+
@current_guest_account ||= ::UserAccount.new(current_guest, :roles => [:guest])
|
18
|
+
end
|
15
19
|
|
16
20
|
def current_admin_account
|
17
21
|
@current_admin_account ||= ::AdminAccount.new(current_admin, :roles => [:admin])
|
@@ -3,8 +3,12 @@ module CurrentUsers
|
|
3
3
|
@current_user ||= ::User.new 'stan', 'stan@mail.ru', :role => 'user'
|
4
4
|
end
|
5
5
|
|
6
|
+
def current_guest
|
7
|
+
@current_guest ||= ::User.new 'guest', 'guest@mail.ru', :role => 'guest'
|
8
|
+
end
|
9
|
+
|
6
10
|
def current_admin
|
7
|
-
@current_admin ||= ::
|
11
|
+
@current_admin ||= ::Admin.new 'admin', 'admin@mail.ru', :role => 'admin'
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cantango-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-12-09 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70276899472420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70276899472420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sugar-high
|
27
|
-
requirement: &
|
27
|
+
requirement: &70276899471460 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.6.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70276899471460
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sweetloader
|
38
|
-
requirement: &
|
38
|
+
requirement: &70276899469500 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.1.6
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70276899469500
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: hashie
|
49
|
-
requirement: &
|
49
|
+
requirement: &70276899467420 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '1.2'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70276899467420
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: cantango-config
|
60
|
-
requirement: &
|
60
|
+
requirement: &70276899465860 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.1.9.2
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70276899465860
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: cantango-core
|
71
|
-
requirement: &
|
71
|
+
requirement: &70276899461080 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.1.9.2
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70276899461080
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bundler
|
82
|
-
requirement: &
|
82
|
+
requirement: &70276899459540 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.1.rc
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70276899459540
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: jeweler
|
93
|
-
requirement: &
|
93
|
+
requirement: &70276899457320 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 1.6.4
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70276899457320
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rcov
|
104
|
-
requirement: &
|
104
|
+
requirement: &70276899456140 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70276899456140
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rspec
|
115
|
-
requirement: &
|
115
|
+
requirement: &70276899455300 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: 2.6.0
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70276899455300
|
124
124
|
description: Ability, Can, Scope, Session, User, Account and more APIs for CanTango
|
125
125
|
email: kristian@unity3d.com
|
126
126
|
executables: []
|
@@ -214,7 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
214
214
|
version: '0'
|
215
215
|
segments:
|
216
216
|
- 0
|
217
|
-
hash: -
|
217
|
+
hash: -1309343168374128705
|
218
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
219
|
none: false
|
220
220
|
requirements:
|