role_model 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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