role_model 0.6.0 → 0.7.0

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.
File without changes
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'jeweler', '>=1.5.2'
5
+ gem 'rspec', '~> 2'
6
+ gem 'autotest'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,29 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ ZenTest (4.5.0)
5
+ autotest (4.4.6)
6
+ ZenTest (>= 4.4.1)
7
+ diff-lcs (1.1.2)
8
+ git (1.2.5)
9
+ jeweler (1.5.2)
10
+ bundler (~> 1.0.0)
11
+ git (>= 1.2.5)
12
+ rake
13
+ rake (0.8.7)
14
+ rspec (2.5.0)
15
+ rspec-core (~> 2.5.0)
16
+ rspec-expectations (~> 2.5.0)
17
+ rspec-mocks (~> 2.5.0)
18
+ rspec-core (2.5.1)
19
+ rspec-expectations (2.5.0)
20
+ diff-lcs (~> 1.1.2)
21
+ rspec-mocks (2.5.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ autotest
28
+ jeweler (>= 1.5.2)
29
+ rspec (~> 2)
data/Rakefile CHANGED
@@ -1,40 +1,43 @@
1
1
  require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
2
10
  require 'rake'
3
11
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "role_model"
8
- gem.summary = %Q{Declare, assign and query roles with ease}
9
- gem.description = %Q{Ever needed to assign roles to a model, say a User, and build conditional behaviour on top of that? Enter RoleModel -- roles have never been easier! Just declare your roles and you are done. Assigned roles will be stored as a bitmask.}
10
- gem.email = "martin.rehfeld@glnetworks.de"
11
- gem.homepage = "http://github.com/martinrehfeld/role_model"
12
- gem.authors = ["Martin Rehfeld"]
13
- gem.add_development_dependency "rspec", ">= 1.2.9"
14
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
- end
16
- Jeweler::GemcutterTasks.new
17
- rescue LoadError
18
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "role_model"
16
+ gem.homepage = "http://github.com/martinrehfeld/role_model"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Declare, assign and query roles with ease}
19
+ gem.description = %Q{Ever needed to assign roles to a model, say a User, and build conditional behaviour on top of that? Enter RoleModel -- roles have never been easier! Just declare your roles and you are done. Assigned roles will be stored as a bitmask.}
20
+ gem.email = "martin.rehfeld@glnetworks.de"
21
+ gem.authors = ["Martin Rehfeld"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
26
+ gem.add_development_dependency "rspec", "~> 2"
19
27
  end
28
+ Jeweler::RubygemsDotOrgTasks.new
20
29
 
21
- require 'spec/rake/spectask'
22
- Spec::Rake::SpecTask.new(:spec) do |spec|
23
- spec.libs << 'lib' << 'spec'
24
- spec.spec_files = FileList['spec/**/*_spec.rb']
30
+ require 'rspec/core'
31
+ require 'rspec/core/rake_task'
32
+ RSpec::Core::RakeTask.new(:spec) do |spec|
33
+ spec.pattern = FileList['spec/**/*_spec.rb']
25
34
  end
26
35
 
27
- Spec::Rake::SpecTask.new(:rcov) do |spec|
28
- spec.libs << 'lib' << 'spec'
36
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
29
37
  spec.pattern = 'spec/**/*_spec.rb'
30
38
  spec.rcov = true
31
- spec.rcov_opts.concat ['--exclude', 'rcov.rb']
32
- spec.rcov_opts.concat ['--exclude', '.*_spec.rb']
33
- spec.rcov_opts.concat ['--exclude', 'spec_helper.rb']
34
39
  end
35
40
 
36
- task :spec => :check_dependencies
37
-
38
41
  task :default => :spec
39
42
 
40
43
  require 'rake/rdoctask'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.0
data/lib/role_model.rb CHANGED
@@ -15,6 +15,7 @@ module RoleModel
15
15
  attr_accessor(*::RoleModel::INHERITABLE_CLASS_ATTRIBUTES)
16
16
  end
17
17
  roles_attribute :roles_mask # set default bitmask attribute
18
+ self.valid_roles = []
18
19
  end
19
20
  end
20
21
 
@@ -18,17 +18,6 @@ module RoleModel
18
18
  self.roles_attribute_name = name.to_sym
19
19
  end
20
20
 
21
- # :call-seq:
22
- # roles(:role_1, ..., :role_n)
23
- # roles('role_1', ..., 'role_n')
24
- # roles([:role_1, ..., :role_n])
25
- # roles(['role_1', ..., 'role_n'])
26
- #
27
- # declare valid roles
28
- def roles(*roles)
29
- self.valid_roles = Array[*roles].flatten.map { |r| r.to_sym }
30
- end
31
-
32
21
  def mask_for(*roles)
33
22
  (Array[*roles].map {|r|
34
23
  r.respond_to?(:each) ? r.to_a : r
@@ -40,5 +29,18 @@ module RoleModel
40
29
  sum + bitvalue
41
30
  } || 0
42
31
  end
32
+
33
+ protected
34
+
35
+ # :call-seq:
36
+ # roles(:role_1, ..., :role_n)
37
+ # roles('role_1', ..., 'role_n')
38
+ # roles([:role_1, ..., :role_n])
39
+ # roles(['role_1', ..., 'role_n'])
40
+ #
41
+ # declare valid roles
42
+ def roles(*roles)
43
+ self.valid_roles = Array[*roles].flatten.map { |r| r.to_sym }
44
+ end
43
45
  end
44
46
  end
data/role_model.gemspec CHANGED
@@ -1,64 +1,73 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{role_model}
8
- s.version = "0.6.0"
8
+ s.version = "0.7.0"
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"]
12
- s.date = %q{2010-10-10}
12
+ s.date = %q{2011-05-01}
13
13
  s.description = %q{Ever needed to assign roles to a model, say a User, and build conditional behaviour on top of that? Enter RoleModel -- roles have never been easier! Just declare your roles and you are done. Assigned roles will be stored as a bitmask.}
14
14
  s.email = %q{martin.rehfeld@glnetworks.de}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION",
26
- "lib/role_model.rb",
27
- "lib/role_model/class_methods.rb",
28
- "lib/role_model/implementation.rb",
29
- "lib/role_model/roles.rb",
30
- "role_model.gemspec",
31
- "spec/custom_matchers.rb",
32
- "spec/custom_matchers_spec.rb",
33
- "spec/role_model_spec.rb",
34
- "spec/roles_spec.rb",
35
- "spec/spec.opts",
36
- "spec/spec_helper.rb"
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/role_model.rb",
29
+ "lib/role_model/class_methods.rb",
30
+ "lib/role_model/implementation.rb",
31
+ "lib/role_model/roles.rb",
32
+ "role_model.gemspec",
33
+ "spec/custom_matchers.rb",
34
+ "spec/custom_matchers_spec.rb",
35
+ "spec/role_model_spec.rb",
36
+ "spec/roles_spec.rb",
37
+ "spec/spec_helper.rb"
37
38
  ]
38
39
  s.homepage = %q{http://github.com/martinrehfeld/role_model}
39
- s.rdoc_options = ["--charset=UTF-8"]
40
+ s.licenses = ["MIT"]
40
41
  s.require_paths = ["lib"]
41
- s.rubygems_version = %q{1.3.7}
42
+ s.rubygems_version = %q{1.7.2}
42
43
  s.summary = %q{Declare, assign and query roles with ease}
43
44
  s.test_files = [
44
45
  "spec/custom_matchers.rb",
45
- "spec/custom_matchers_spec.rb",
46
- "spec/role_model_spec.rb",
47
- "spec/roles_spec.rb",
48
- "spec/spec_helper.rb"
46
+ "spec/custom_matchers_spec.rb",
47
+ "spec/role_model_spec.rb",
48
+ "spec/roles_spec.rb",
49
+ "spec/spec_helper.rb"
49
50
  ]
50
51
 
51
52
  if s.respond_to? :specification_version then
52
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
53
53
  s.specification_version = 3
54
54
 
55
55
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
- s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
56
+ s.add_development_dependency(%q<jeweler>, [">= 1.5.2"])
57
+ s.add_development_dependency(%q<rspec>, ["~> 2"])
58
+ s.add_development_dependency(%q<autotest>, [">= 0"])
59
+ s.add_development_dependency(%q<rspec>, ["~> 2"])
57
60
  else
58
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
61
+ s.add_dependency(%q<jeweler>, [">= 1.5.2"])
62
+ s.add_dependency(%q<rspec>, ["~> 2"])
63
+ s.add_dependency(%q<autotest>, [">= 0"])
64
+ s.add_dependency(%q<rspec>, ["~> 2"])
59
65
  end
60
66
  else
61
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
67
+ s.add_dependency(%q<jeweler>, [">= 1.5.2"])
68
+ s.add_dependency(%q<rspec>, ["~> 2"])
69
+ s.add_dependency(%q<autotest>, [">= 0"])
70
+ s.add_dependency(%q<rspec>, ["~> 2"])
62
71
  end
63
72
  end
64
73
 
@@ -33,7 +33,6 @@ describe RoleModel do
33
33
 
34
34
  describe ".roles" do
35
35
  subject { model_class.new }
36
-
37
36
  it "should define the valid roles" do
38
37
  subject.roles = %w(foo bar baz)
39
38
  subject.roles.should include(:foo, :bar)
@@ -225,7 +224,46 @@ describe RoleModel do
225
224
  subject.should have(0).roles
226
225
  end
227
226
  end
227
+ end
228
+
229
+ describe "#-=" do
230
+ subject { model_class.new }
231
+
232
+ context "with roles :foo and :bar already assigned" do
233
+ before(:each) do
234
+ subject.roles = [:foo, :bar]
235
+ end
236
+
237
+ it "should delete a existing role given as a symbol" do
238
+ subject.roles -= [:foo]
239
+ subject.roles.should_not include(:foo)
240
+ subject.should have(1).roles
241
+ end
242
+
243
+ it "should delete a existing role given as a string" do
244
+ subject.roles -= ['foo']
245
+ subject.roles.should_not include(:foo)
246
+ subject.should have(1).roles
247
+ end
248
+
249
+ it "should not change anything if a non existing role is given" do
250
+ subject.roles -= [:third]
251
+ subject.roles.should include(:foo, :bar)
252
+ subject.should have(2).roles
253
+ end
254
+ end
255
+
256
+ context "without roles assigned" do
257
+ it "should have 0 roles if a role is given as a symbol" do
258
+ subject.roles -= [:foo]
259
+ subject.should have(0).roles
260
+ end
228
261
 
262
+ it "should have 0 roles if a role is given as a string" do
263
+ subject.roles -= ['foo']
264
+ subject.should have(0).roles
265
+ end
266
+ end
229
267
  end
230
268
 
231
269
  context "query for an individual role" do
@@ -294,10 +332,60 @@ describe RoleModel do
294
332
  end
295
333
  end
296
334
 
335
+ context "query for roles when none defined in model" do
336
+ [:has_any_role?, :is_any_of?, :has_role?, :has_all_roles?, :is?, :has_roles?].each do |check_role_assignment_method|
337
+ describe "##{check_role_assignment_method}" do
338
+
339
+ let(:model_class_without_roles) { Class.new }
340
+
341
+ before(:each) do
342
+ model_class_without_roles.instance_eval do
343
+ attr_accessor :roles_mask
344
+ attr_accessor :custom_roles_mask
345
+ include RoleModel
346
+ end
347
+ end
348
+
349
+
350
+ subject { model_class_without_roles.new }
351
+
352
+ it "should return false when a role was assigned" do
353
+ subject.roles = :foo
354
+ subject.send(check_role_assignment_method, :foo).should be_false
355
+ end
356
+
357
+ it "should return false when no role was assigned" do
358
+ subject.send(check_role_assignment_method, :foo).should be_false
359
+ end
360
+
361
+ end
362
+ end
363
+ end
364
+
365
+ context "ClassMethods" do
366
+
367
+ subject { model_class }
368
+
369
+ describe ".roles" do
370
+ it "should not allow public access to set roles" do
371
+ lambda do
372
+ subject.roles :foo, :quux
373
+ end.should raise_exception(NoMethodError, /protected method.*roles.*called/)
374
+ end
375
+ end
376
+
377
+ end
378
+
297
379
  context "inheritance" do
298
380
  let(:superclass_instance) { model_class.new }
299
381
  let(:inherited_model_class) { Class.new(model_class) }
300
382
  subject { inherited_model_class.new }
383
+
384
+ it "should not allow public access to set roles" do
385
+ lambda do
386
+ inherited_model_class.roles :foo, :quux
387
+ end.should raise_exception(NoMethodError, /protected method.*roles.*called/)
388
+ end
301
389
 
302
390
  it "should not alter the superclass behaviour" do
303
391
  inherited_model_class.instance_eval do
@@ -369,41 +457,30 @@ describe RoleModel do
369
457
  describe ".mask_for" do
370
458
  subject { model_class.new }
371
459
 
372
- before(:each) do
373
- model_class.instance_eval do
374
- attr_accessor :roles_mask
375
- attr_accessor :custom_roles_mask
376
- include RoleModel
377
- roles :foo, :bar, :third
378
- end
460
+ it "should return the role mask of a role" do
461
+ subject.class.mask_for(:foo).should == 1
462
+ subject.class.mask_for(:bar).should == 2
463
+ subject.class.mask_for(:third).should == 4
379
464
  end
380
465
 
381
- context "passing" do
382
- it "should return the role mask of a role" do
383
- subject.class.mask_for(:foo).should == 1
384
- subject.class.mask_for(:bar).should == 2
385
- subject.class.mask_for(:third).should == 4
386
- end
387
-
388
- it "should return the role mask of an array of roles" do
389
- subject.class.mask_for(:foo, :bar).should == 3
390
- subject.class.mask_for(:foo, :third).should == 5
391
- subject.class.mask_for(:foo, :bar, :third).should == 7
392
- end
466
+ it "should return the role mask of an array of roles" do
467
+ subject.class.mask_for(:foo, :bar).should == 3
468
+ subject.class.mask_for(:foo, :third).should == 5
469
+ subject.class.mask_for(:foo, :bar, :third).should == 7
470
+ end
393
471
 
394
- it "should return the role mask of a string array of roles" do
395
- subject.class.mask_for("foo").should == 1
396
- subject.class.mask_for("foo", "bar").should == 3
397
- subject.class.mask_for("foo", "third").should == 5
398
- end
472
+ it "should return the role mask of a string array of roles" do
473
+ subject.class.mask_for("foo").should == 1
474
+ subject.class.mask_for("foo", "bar").should == 3
475
+ subject.class.mask_for("foo", "third").should == 5
476
+ end
399
477
 
400
- it "should return the role mask of the existing roles" do
401
- subject.class.mask_for(:foo, :quux).should == 1
402
- end
478
+ it "should return the role mask of the existing roles" do
479
+ subject.class.mask_for(:foo, :quux).should == 1
480
+ end
403
481
 
404
- it "should return 0 when a role that does not exist is passed" do
405
- subject.class.mask_for(:quux).should == 0
406
- end
482
+ it "should return 0 when a role that does not exist is passed" do
483
+ subject.class.mask_for(:quux).should == 0
407
484
  end
408
485
  end
409
486
 
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,14 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rspec'
4
+ require File.dirname(__FILE__) + '/custom_matchers'
3
5
  require 'role_model'
4
- require 'spec'
5
- require 'spec/autorun'
6
- require File.dirname(__FILE__) + "/custom_matchers"
7
6
 
8
- Spec::Runner.configure do |config|
7
+ RSpec.configure do |config|
9
8
  config.include(CustomMatchers)
9
+ config.mock_with :rspec
10
10
  end
11
+
12
+ # Requires supporting ruby files with custom matchers and macros, etc,
13
+ # in spec/support/ and its subdirectories.
14
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each {|f| require f}
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: role_model
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
4
+ hash: 3
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 6
8
+ - 7
9
9
  - 0
10
- version: 0.6.0
10
+ version: 0.7.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Martin Rehfeld
@@ -15,25 +15,66 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-10 00:00:00 +02:00
19
- default_executable:
18
+ date: 2011-05-01 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- name: rspec
23
- prerelease: false
24
21
  requirement: &id001 !ruby/object:Gem::Requirement
25
22
  none: false
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- hash: 13
26
+ hash: 7
30
27
  segments:
31
28
  - 1
29
+ - 5
32
30
  - 2
33
- - 9
34
- version: 1.2.9
35
- type: :development
31
+ version: 1.5.2
36
32
  version_requirements: *id001
33
+ name: jeweler
34
+ prerelease: false
35
+ type: :development
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ hash: 7
43
+ segments:
44
+ - 2
45
+ version: "2"
46
+ version_requirements: *id002
47
+ name: rspec
48
+ prerelease: false
49
+ type: :development
50
+ - !ruby/object:Gem::Dependency
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ version_requirements: *id003
61
+ name: autotest
62
+ prerelease: false
63
+ type: :development
64
+ - !ruby/object:Gem::Dependency
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ hash: 7
71
+ segments:
72
+ - 2
73
+ version: "2"
74
+ version_requirements: *id004
75
+ name: rspec
76
+ prerelease: false
77
+ type: :development
37
78
  description: Ever needed to assign roles to a model, say a User, and build conditional behaviour on top of that? Enter RoleModel -- roles have never been easier! Just declare your roles and you are done. Assigned roles will be stored as a bitmask.
38
79
  email: martin.rehfeld@glnetworks.de
39
80
  executables: []
@@ -45,7 +86,9 @@ extra_rdoc_files:
45
86
  - README.rdoc
46
87
  files:
47
88
  - .document
48
- - .gitignore
89
+ - .rspec
90
+ - Gemfile
91
+ - Gemfile.lock
49
92
  - LICENSE
50
93
  - README.rdoc
51
94
  - Rakefile
@@ -59,15 +102,13 @@ files:
59
102
  - spec/custom_matchers_spec.rb
60
103
  - spec/role_model_spec.rb
61
104
  - spec/roles_spec.rb
62
- - spec/spec.opts
63
105
  - spec/spec_helper.rb
64
- has_rdoc: true
65
106
  homepage: http://github.com/martinrehfeld/role_model
66
- licenses: []
67
-
107
+ licenses:
108
+ - MIT
68
109
  post_install_message:
69
- rdoc_options:
70
- - --charset=UTF-8
110
+ rdoc_options: []
111
+
71
112
  require_paths:
72
113
  - lib
73
114
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -91,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
132
  requirements: []
92
133
 
93
134
  rubyforge_project:
94
- rubygems_version: 1.3.7
135
+ rubygems_version: 1.7.2
95
136
  signing_key:
96
137
  specification_version: 3
97
138
  summary: Declare, assign and query roles with ease
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC