bumbleworks 0.0.70 → 0.0.71
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/lib/bumbleworks/user.rb +18 -8
- data/lib/bumbleworks/version.rb +1 -1
- data/spec/lib/bumbleworks/user_spec.rb +9 -0
- metadata +4 -4
data/lib/bumbleworks/user.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
module Bumbleworks
|
2
2
|
module User
|
3
|
+
# This exception is raised if the including class has no #role_identifiers
|
4
|
+
# method defined. See #role_identifiers below for details.
|
3
5
|
class NoRoleIdentifiersMethodDefined < StandardError; end
|
6
|
+
# This exception is raised if the including class has no #claim_token
|
7
|
+
# method defined, and also no fallback methods (#username or #email). See
|
8
|
+
# #claim_token below for details.
|
4
9
|
class NoClaimTokenMethodDefined < StandardError; end
|
5
|
-
|
6
|
-
|
10
|
+
|
11
|
+
# Attempting to #claim a task that the user is not authorized for will raise
|
12
|
+
# this exception.
|
7
13
|
class UnauthorizedClaimAttempt < StandardError; end
|
14
|
+
# Attempting to #release a task that is claimed by another token will raise
|
15
|
+
# this exception.
|
8
16
|
class UnauthorizedReleaseAttempt < StandardError; end
|
9
17
|
|
10
18
|
# The return value from this method is used as the "claimant" token on
|
@@ -41,17 +49,19 @@ module Bumbleworks
|
|
41
49
|
# Attempts to set self as the claimant of the given task. If not authorized
|
42
50
|
# to claim the task, raises exception. Also bubbles exception from Task
|
43
51
|
# when task is already claimed by a different claimant.
|
44
|
-
def claim(task)
|
52
|
+
def claim(task, force = false)
|
45
53
|
raise UnauthorizedClaimAttempt unless has_role?(task.role)
|
54
|
+
release!(task) if force
|
46
55
|
task.claim(claim_token)
|
47
56
|
end
|
48
57
|
|
49
|
-
# Same as #claim, but first releases (by force) the task, to avoid
|
50
|
-
#
|
51
|
-
#
|
58
|
+
# Same as #claim, but first releases (by force) the task, to avoid an
|
59
|
+
# AlreadyClaimed exceptions. Note that this may still raise an
|
60
|
+
# UnauthorizedClaimAttempt exception - this method does not allow a user
|
61
|
+
# to claim a task they are not authorized for. Should only be made
|
62
|
+
# available to supervisory roles.
|
52
63
|
def claim!(task)
|
53
|
-
|
54
|
-
claim(task)
|
64
|
+
claim(task, true)
|
55
65
|
end
|
56
66
|
|
57
67
|
# If we are the current claimant of the given task, release the task. Does
|
data/lib/bumbleworks/version.rb
CHANGED
@@ -65,6 +65,15 @@ describe Bumbleworks::User do
|
|
65
65
|
task.should_receive(:claim).with("the umpire of snorts").ordered
|
66
66
|
subject.claim!(task)
|
67
67
|
end
|
68
|
+
|
69
|
+
it 'raises exception (and does not release) if unauthorized' do
|
70
|
+
task = double('task', :role => 'fashbone')
|
71
|
+
task.should_receive(:release).never
|
72
|
+
task.should_receive(:claim).never
|
73
|
+
expect {
|
74
|
+
subject.claim!(task)
|
75
|
+
}.to raise_error(Bumbleworks::User::UnauthorizedClaimAttempt)
|
76
|
+
end
|
68
77
|
end
|
69
78
|
end
|
70
79
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bumbleworks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.71
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-02-
|
15
|
+
date: 2014-02-20 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: ruote
|
@@ -266,7 +266,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
266
266
|
version: '0'
|
267
267
|
segments:
|
268
268
|
- 0
|
269
|
-
hash:
|
269
|
+
hash: 53431836910523847
|
270
270
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
271
271
|
none: false
|
272
272
|
requirements:
|
@@ -275,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
275
|
version: '0'
|
276
276
|
segments:
|
277
277
|
- 0
|
278
|
-
hash:
|
278
|
+
hash: 53431836910523847
|
279
279
|
requirements: []
|
280
280
|
rubyforge_project:
|
281
281
|
rubygems_version: 1.8.23
|