role_model 0.3.0 → 0.3.1

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/README.rdoc CHANGED
@@ -32,7 +32,7 @@ Assigned roles will be stored as a bitmask in an configurable attribute
32
32
  => #<User ...>
33
33
 
34
34
  # role assignment
35
- >> u.roles = [:admin] # ['admin'] works as well
35
+ >> u.roles = [:admin] # ['admin'] works as well
36
36
  => [:admin]
37
37
 
38
38
  # adding roles
@@ -48,7 +48,7 @@ Assigned roles will be stored as a bitmask in an configurable attribute
48
48
  # ... check for individual roles
49
49
  >> u.has_role? :author
50
50
  => false
51
- >> u.has_role? :admin
51
+ >> u.is_a? :admin # has_role? is aliased as is_a?
52
52
  => true
53
53
 
54
54
  # see the internal bitmask representation (3 = 0b0011)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
@@ -1,5 +1,7 @@
1
+ require 'set'
2
+
1
3
  module RoleModel
2
- class Roles < Array
4
+ class Roles < ::Set
3
5
  attr_reader :model_instance
4
6
 
5
7
  def initialize(sender, *roles)
@@ -8,7 +10,8 @@ module RoleModel
8
10
  end
9
11
 
10
12
  def <<(role)
11
- model_instance.roles = super
13
+ model_instance.roles = super.to_a
14
+ self
12
15
  end
13
16
  end
14
17
  end
data/lib/role_model.rb CHANGED
@@ -28,6 +28,7 @@ module RoleModel
28
28
  def has_role?(role)
29
29
  roles.include?(role.to_sym)
30
30
  end
31
+ alias is_a? has_role?
31
32
  end
32
33
 
33
34
  module ClassMethods
data/role_model.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{role_model}
8
- s.version = "0.3.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Martin Rehfeld"]
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "lib/role_model.rb",
27
27
  "lib/role_model/roles.rb",
28
28
  "role_model.gemspec",
29
+ "spec/custom_matchers.rb",
29
30
  "spec/role_model_spec.rb",
30
31
  "spec/roles_spec.rb",
31
32
  "spec/spec.opts",
@@ -37,7 +38,8 @@ Gem::Specification.new do |s|
37
38
  s.rubygems_version = %q{1.3.6}
38
39
  s.summary = %q{Declare, assign and query roles with ease}
39
40
  s.test_files = [
40
- "spec/role_model_spec.rb",
41
+ "spec/custom_matchers.rb",
42
+ "spec/role_model_spec.rb",
41
43
  "spec/roles_spec.rb",
42
44
  "spec/spec_helper.rb"
43
45
  ]
@@ -0,0 +1,24 @@
1
+ module CustomMatchers
2
+ class ArrayIncludingMatcher
3
+ def initialize(*expected)
4
+ @expected = Array[*expected]
5
+ end
6
+
7
+ def ==(actual)
8
+ @expected.each do | value |
9
+ return false unless actual.include?(value)
10
+ end
11
+ true
12
+ rescue NoMethodError => ex
13
+ return false
14
+ end
15
+
16
+ def description
17
+ "array_including(#{@expected.inspect.sub(/^\[/,"").sub(/\]$/,"")})"
18
+ end
19
+ end
20
+
21
+ def array_including(*args)
22
+ ArrayIncludingMatcher.new(*args)
23
+ end
24
+ end
@@ -148,6 +148,10 @@ describe RoleModel do
148
148
  subject.roles.should include(:foo, :bar, :third)
149
149
  subject.should have(3).roles
150
150
  end
151
+
152
+ it "should not show a role twice in the return value" do
153
+ (subject.roles << :foo).should have(2).roles
154
+ end
151
155
  end
152
156
 
153
157
  context "without any previouly assigned roles" do
@@ -168,34 +172,36 @@ describe RoleModel do
168
172
  subject.roles.should include(:foo, :bar)
169
173
  subject.should have(2).roles
170
174
  end
171
- end
172
175
 
173
- it "should silently ignore undefined roles" do
174
- subject.roles << :baz
175
- subject.roles.should be_empty
176
+ it "should silently ignore undefined roles" do
177
+ subject.roles << :baz
178
+ subject.roles.should be_empty
179
+ end
176
180
  end
177
181
  end
178
182
 
179
- describe "#has_role?" do
180
- subject { model_class.new }
183
+ [:has_role?, :is_a?].each do |check_role_assignment_method|
184
+ describe "##{check_role_assignment_method}" do
185
+ subject { model_class.new }
181
186
 
182
- it "should return true when the given role was assigned" do
183
- subject.roles = :foo
184
- subject.should have_role(:foo)
185
- end
187
+ it "should return true when the given role was assigned" do
188
+ subject.roles = :foo
189
+ subject.send(check_role_assignment_method, :foo).should be_true
190
+ end
186
191
 
187
- it "should return false when the given role was not assigned" do
188
- subject.roles = :bar
189
- subject.should_not have_role(:foo)
190
- end
192
+ it "should return false when the given role was not assigned" do
193
+ subject.roles = :bar
194
+ subject.send(check_role_assignment_method, :foo).should be_false
195
+ end
191
196
 
192
- it "should return false when no role was assigned" do
193
- subject.should_not have_role(:foo)
194
- subject.should_not have_role(:bar)
195
- end
197
+ it "should return false when no role was assigned" do
198
+ subject.send(check_role_assignment_method, :foo).should be_false
199
+ subject.send(check_role_assignment_method, :bar).should be_false
200
+ end
196
201
 
197
- it "should return false when asked for an undefined role" do
198
- subject.should_not have_role(:baz)
202
+ it "should return false when asked for an undefined role" do
203
+ subject.send(check_role_assignment_method, :baz).should be_false
204
+ end
199
205
  end
200
206
  end
201
207
 
data/spec/roles_spec.rb CHANGED
@@ -6,15 +6,13 @@ describe RoleModel::Roles do
6
6
  let(:array) { [:foo, :bar] }
7
7
  subject { RoleModel::Roles.new(model_instance, array) }
8
8
 
9
- its(:model_instance) { should == model_instance }
9
+ its(:model_instance) { should equal(model_instance) }
10
10
  it { should include(:foo, :bar) }
11
- it { should be_kind_of(Array) }
11
+ it { should respond_to(:each) }
12
12
 
13
13
  describe "#<<" do
14
- let(:roles_of_model_instance) { [:one, :two] }
15
-
16
14
  it "should add the given element to the model_instance.roles by re-assigning all roles" do
17
- model_instance.should_receive(:roles=).with([:foo, :bar, :baz])
15
+ model_instance.should_receive(:roles=).with(array_including(:foo, :bar, :baz))
18
16
  subject << :baz
19
17
  end
20
18
  end
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,8 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'role_model'
4
4
  require 'spec'
5
5
  require 'spec/autorun'
6
+ require File.dirname(__FILE__) + "/custom_matchers"
6
7
 
7
8
  Spec::Runner.configure do |config|
8
-
9
+ config.include(CustomMatchers)
9
10
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 0
9
- version: 0.3.0
8
+ - 1
9
+ version: 0.3.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Martin Rehfeld
@@ -50,6 +50,7 @@ files:
50
50
  - lib/role_model.rb
51
51
  - lib/role_model/roles.rb
52
52
  - role_model.gemspec
53
+ - spec/custom_matchers.rb
53
54
  - spec/role_model_spec.rb
54
55
  - spec/roles_spec.rb
55
56
  - spec/spec.opts
@@ -85,6 +86,7 @@ signing_key:
85
86
  specification_version: 3
86
87
  summary: Declare, assign and query roles with ease
87
88
  test_files:
89
+ - spec/custom_matchers.rb
88
90
  - spec/role_model_spec.rb
89
91
  - spec/roles_spec.rb
90
92
  - spec/spec_helper.rb